1

SVN リポジトリ内の Fortran バイナリに対して、オンデマンドで、または Cron ジョブを使用して、テスト ケースの自動テストをセットアップしたいと考えています。問題を少し複雑にするために、テスト ケースは計算クラスターで実行されるため、各テスト ケースは PBS スクリプトを生成する必要があります。(Linux環境)

Web テストや単体テストのソリューションはたくさんありますが、バイナリを直接テストするためのものは見つかりませんでした。たとえば、入力を提供し、出力を予想されるソリューションと比較します。

これにどのようにアプローチすべきかについての提案はありますか?

4

3 に答える 3

1

より事前にパッケージ化されたより良い答えがあるかもしれませんが、ビルドボットは十分に構成可能であり、バイナリを実行するための python スクリプトを作成できる限り、必要に応じて機能するはずです。

http://buildbot.net/

于 2009-06-26T14:37:08.507 に答える
1

単純な入力/出力テストの場合、これを行うためにスクリプトを自分でノックアップできるようです...

例えば

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

実際には、おそらく複数のジョブをキューに送信したいと思うでしょうが、考え方は同じです。

ここでは、各ステップをどのように実行できるかについて、頭の中で浮かんだいくつかのアイデアを紹介します。

提出中

テンプレートPBSスクリプトを使用し、sedを使用して、送信する前に入力トークンをプログラムの入力値で検索/置換できます

終了待ち

ジョブIDのqstatの出力を繰り返しgrepして、終了するのを待つことができます

出力を確認する

予想される出力に対してジョブの出力ファイルを確認してください。予想される出力をファイルに保存して diff を使用するか、実行ごとに一致する必要がある正規表現のリストを用意することができます

于 2009-06-26T14:54:07.410 に答える
1

これは、スクリプトを作成するのが非常に簡単なものであることに同意します。バイナリがどのように構成されているか、およびプログラムが互いにどのように異なるかに応じて、テスト スクリプトを SVN リポジトリの一部として含めることもできます。

バッチ システムを使用しているため、テストのスケジュールにはある程度の自由があります。セットアップ パラメータを提供できる一般的な「検証」ジョブが必要な場合があります (たとえば、期待されるプログラム出力と実際のプログラム出力出力の場所)。 Nickgrepは、ジョブ IDの出力を確認するためにを使用すると述べqstatましたが、別のジョブが完了するまでジョブを保留するように PBS に指示できます。これは、次のようなものがあることを意味します。

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

送信されたら、によって返されたジョブ ID を保存しqsubます (これを行う方法はプラットフォームによって異なります。通常は次のようなものjob_id=$(qsub $JOB_FILE)で十分です)。次に、その値を別のスクリプトに組み込みます。

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

これにより、(適切な値job_idが挿入された場合) 2009 年 6 月 27 日の午前 0 時までテスト実行の実行が保留され、テスト ジョブが完了するまで検証ジョブの実行が保留されます (afteranyディレクティブでは、最初の仕事 - 成功した場合だけではありません)。

ただし、クラスターのターンアラウンド タイムによっては、これらすべてを 1 つのスクリプトに入れることもできますが、PBS の時間ベースのホールドを使用して特定の時間にのみ実行することもできます。私は最近、シェル スクリプトの代わりに Python を使用して、このシステム関連のジョブを処理するようになりました。昨日、Python スクリプトを実行可能にして、PBS ディレクティブをソースに直接追加することをテストしました。非常にうまく機能しているように見えました。

于 2009-06-26T15:51:06.287 に答える