HPC上のSVNからのバイナリの自動テスト
質問
私はオンデマンドで、またはcronジョブで、セットアップにSVNリポジトリ内のFortranのバイナリに対する試験例いくつかの自動テストをしたいと思います。各テストケースは、PBSスクリプトを生成する必要がありますように少し問題を複雑にするには、テストケースは、計算クラスタ上で実行されるだろう。 (Linux環境)
ウェブ多くのテスト、およびユニット・テスト・ソリューションは、そこにあります、しかし、私は直接バイナリをテストするための何かを見つけることができませんでした。言って、入力を提供し、期待される溶液を用いて出力を比較。
これは近づいべきか上の任意の提案ですか?
解決
私は、これはスクリプトにかなり簡単になる何かがあることに同意します。あなたのバイナリが設定されている方法に応じて、どのように異なるあなたのプログラムが相互にある、あなたもあなたのSVNリポジトリの一部として、テストスクリプトを含めることができます。
あなたはバッチシステムにしているので、、あなたはテストをスケジューリングするためのいくつかの自由を持っています。あなたがに(例えば、期待と実際のプログラムの出力出力の場所に)設定パラメータを提供することができ、一般的な「検証」の仕事を持っている場合があります。チェックするgrep
使用して言及するのニックジョブIDのqstat
の出力ができますが、別のジョブが完了するまで、ジョブを保持するためにPBSを伝えることができます。これはあなたのような何かを持っていることを意味します:
...
#PBS -N run_test_1
#PBS -a 200906270000
...
<compile test>
<run test>
<save output>
提出されたときに、qsub
によって返されたジョブID(あなたがこれを行う方法は、お使いのプラットフォームに依存している - 通常job_id=$(qsub $JOB_FILE)
のようなもので十分である)に保存します。その後、別のスクリプトにその値をプラグイン
...
#PBS -N verify_test_1
#PBS -W depend=afterany:$job_id
<run comparison>
...
このは(job_id
の適切な値が挿入されたとき)(2009年6月27日の真夜中まで、テスト実行の実行を保持し、テストジョブが完了するまで、検証ジョブの実行を開催しますafterany
ディレクティブは、それは常に最初の仕事の後に実行する必要があることを示し - それは成功だだけではない場合)
クラスタの所要時間に応じて、しかし、あなたは、ひとつのスクリプトでは、このすべてを置くことができます。私は最近も、このシステム関連のジョブを処理するためのPythonの代わりに、シェルスクリプトを使用し始めました - 私は、Pythonスクリプトの実行可能ファイルを作成し、まっすぐソースにPBSディレクティブを追加し、昨日検査 - 。非常にうまく動作するように見えた。
他のヒント
があり、より事前にパッケージ化され、より良い答えであるが、私はBuildbotのは、限り、あなたはあなたのバイナリを実行するPythonスクリプトを書くことができるように、それはあなたが望むもののために働く必要があることを十分に設定可能であると考えていることがあります。
それはあなた自身がこれを行うためのスクリプトをノックすることができテストする簡単な入力/出力のためのように思える...
例えばます。
for each program
compile
submit to queue
wait for finish
check output
実際には、あなたはおそらくキューに複数のジョブを提出したいと思いますが、考え方は同じです。
ここでは、各ステップを行うことができますどのように私の頭の上からいくつかのアイデアがあります。
提出
あなたが提出する前に、プログラムの入力値とintputトークンを置き換える/テンプレートPBSスクリプトを使用して、見つけることsedを使用することができます。
仕上げを待っている
あなたが繰り返し、それが終了するのを待つために、自分のジョブIDは、qstatの出力をgrepすることができます。
出力を確認してください。
予想出力に対するジョブの出力ファイルを確認してください。あなたは、ファイルへの期待出力を保存し、差分を使用するか、または各実行のために一致しなければならない正規表現のリストを持っている可能性のいずれか