Frage

Ich würde die Einrichtung gerne einige automatisierten Tests von Testfällen auf Fortran-Binärdateien in einer SVN-Repository, auf Anfrage oder mit einem Cron Job. Erschwerend leicht das Problem, würden die Testfälle auf einem Computer-Cluster ausgeführt werden, so dass jeder Testfall benötigen würde einen PBS-Skript zu generieren. (Linux Environment)

Es gibt eine Menge von Web-Test und Unit-Test-Lösungen gibt, aber ich kann nichts finden für Binär-Dateien direkt zu testen. Sagen, liefern Eingänge und die Ausgänge mit der erwarteten Lösung vergleichen.

Alle Vorschläge, wie sollte diese genähert?

War es hilfreich?

Lösung

Ich bin damit einverstanden, dass dies etwas ist, das ziemlich einfach zu Skript wäre. Je nachdem, wie Ihre Binärdateien sind so konfigurieren, und wie unterschiedlich Ihre Programme sind voneinander, man konnte sogar den Test Skripte als Teil der SVN-Repository enthalten.

Da Sie in einem Batch-System sind, haben Sie eine gewisse Freiheit für die Tests planen. Sie können einen generischen „überprüfen“ Job haben wollen, dass Sie Setup-Parameter (beispielsweise an Orten von erwarteten und tatsächlichen Programmausgabe-Ausgang) zur Verfügung stellen können. Nick grep erwähnt unter Verwendung der Ausgabe zu überprüfen von qstat für Ihren Job-ID, aber Sie können PBS sagen einen Job, bis ein anderer Auftrag abgeschlossen zu halten. Dies würde bedeuten, dass Sie so etwas wie:

...
#PBS -N run_test_1
#PBS -a 200906270000
...
<compile test>
<run test>
<save output>

, wenn vorgelegt, speichern Sie die ID Auftrag von qsub zurückgegeben (wie Sie tun dies auf Ihrer Plattform abhängig ist - in der Regel so etwas wie job_id=$(qsub $JOB_FILE) ausreichend). Stecken Sie dann diesen Wert in zu einem anderen Skript:

...
#PBS -N verify_test_1
#PBS -W depend=afterany:$job_id
<run comparison>
...

Dies wird (wenn der richtige Wert von job_id eingeführt wird) halten die Ausführung des Testlaufs bis Mitternacht am 27. Juni 2009 und die Ausführung der Überprüfung Job halten, bis der Testauftrag abgeschlossen ist (die afterany Richtlinie gibt an, dass es sollte immer nach dem ersten Auftrag ausgeführt -. nicht nur, wenn es erfolgreich ist)

Je nach Clusters Durchlaufzeit, aber Sie all dies in einem Skript setzen könnten, obwohl man noch die PBS nutzen könnte zeitbasierte hält nur zu einem bestimmten Zeitpunkt ausgeführt werden. Ich habe mit Python anstelle von Shell-Skripten vor kurzem damit begonnen, auch dieser System-Arbeitsplätze zu handhaben - ich getestet gestern die Python-Skript ausführbar zu machen und das Hinzufügen der PBS-Richtlinien direkt in die Quelle -. Es schien sehr gut zu funktionieren

Andere Tipps

Es kann eine bessere Antwort sein, die mehr abgepackte ist, aber ich glaube, dass Buildbot konfigurierbar genug ist, dass, solange Sie ein Python-Skript schreiben können, die Binärdatei zu laufen, sollte es für Arbeit, was Sie wollen.

http://buildbot.net/

Es scheint wie für die einfache Eingabe / Ausgabe Testen Sie ein Skript klopfen könnte sich dies zu tun ...

z.

for each program
    compile
    submit to queue
    wait for finish
    check output

In der Praxis würden Sie vermutlich mehr als ein Auftrag an die Warteschlange senden möchten, aber die Idee ist die gleiche.

Hier sind ein paar Ideen aus der Spitze von meinem Kopf, wie Sie jeden Schritt tun könnten.

einreichen

Sie können eine Vorlage PBS-Skript verwenden, und verwenden Sie sed intput Token mit Eingabewerten für das Programm vor dem Absenden

finden / ersetzen

Warten auf Finish

Sie können wiederholt grep die Ausgabe von qstat für Ihren Job-ID, zu warten, bis es

beenden

Überprüfen Ausgang

überprüfen Sie die Ausgabedatei des Jobs mit dem erwarteten Ausgang. Sie könnte entweder die erwartete Ausgabe in eine Datei speichern und diff verwenden, oder eine Liste von regulären Ausdrücken, die für jeden Lauf übereinstimmen muß

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top