2

テストスイートのレイアウトは次のとおりです。

TestSuite1.cmd:

  1. プログラムを実行する
  2. 返された結果を確認する
  3. 返された結果が 0 でない場合は、エラーをテキスト出力に変換し、スクリプトを中止します。成功した場合は、成功と書きます。

単一の .cmd ファイルで、異なる入力を使用してプログラムを約 10 回呼び出します。

問題は、私が 10 回実行するプログラムは、毎回実行するのに数時間かかることです。

何らかの方法で戻り結果をチェックし、適切な出力ファイルを提供しながら、単一の.cmd ファイルと単一の出力ファイルを使用しながら、プログラムのこれら 10 回の実行をすべて並列化する方法はありますか?

4

5 に答える 5

4

同じファイルに書き込むなどして、互いに干渉しないと仮定します。

test1.cmd

:: intercept sub-calls.
  if "%1"=="test2" then goto :test2

:: start sub-calls.
  start test1.cmd test2 1
  start test1.cmd test2 2
  start test1.cmd test2 3

:: wait for sub-calls to complete.
:loop1
  if not exist test2_1.flg goto :loop1
:loop2
  if not exist test2_2.flg goto :loop2
:loop3
  if not exist test2_3.flg goto :loop3

:: output results sequentially
  type test2_1.out >test1.out
    del /s test2_1.out
    del /s test2_1.flg
  type test2_2.out >test1.out
    del /s test2_2.out
    del /s test2_2.flg
  type test2_3.out >test1.out
    del /s test2_3.out
    del /s test2_3.flg

  goto :eof
:test2

:: Generate one output file
  echo %1 >test2_%1.out
  ping -n 31 127.0.0.1 >nul: 2>nul:

:: generate flag file to indicate finished
  echo x >test2_%1.flg

これにより、それぞれがシーケンス番号をエコーする3つの並行プロセスが開始され、30秒待機します。

すべて1つのcmdファイルと(最終的には)1つの出力ファイルが含まれます。

于 2008-09-25T12:06:03.217 に答える
1

バッチファイルで物事を並行して実行するには、「start」実行可能ファイル/コマンドを使用します。

于 2008-09-25T12:04:48.930 に答える
1

ウィンドウズ:

基本的に以下を呼び出すバッチファイルを作成します。

start TestSuite1.cmd [TestParams1]
start TestSuite1.cmd [TestParams2]

など、基本的に新しいコマンドラインをフォークしています。

これは、アプリケーションが同時ユーザーを処理でき(同じユーザーであっても)、TestSuite1.cmdがパラメーターを処理できる場合に機能します。

于 2008-09-25T12:06:34.463 に答える
0

コマンドstartを試してみてください。新しいコマンドプロンプトが表示され、実行したいコマンドを送信できます。

これを使用して、テストを実行するバッチファイルを生成し、>>を使用してoutput.txtに追加します。

testthingie.cmd >> output.txt
于 2008-09-25T12:03:45.860 に答える
0

プログラムの複数のインスタンスが一度に実行されると、プログラムがタスクに非常に長くかかる原因 (IO、CPU 時間) がさらに短くなるため、異なるマシンで異なるパラメーターを使用してスクリプトを開始する必要があります。

唯一の例外: 実行時間は、プログラム自体がスリープ状態になることが原因です。

于 2008-09-25T12:11:51.020 に答える