質問

私のテストスイートには次のレイアウトがあります。

TestSuite1.cmd:

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

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

問題は、プログラムを 10 回実行するたびに実行に数時間かかることです。

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

役に立ちましたか?

解決

同じファイルへの書き込みなどによって相互に干渉しないと仮定すると、次のようになります。

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 つの出力ファイルを使用します。

他のヒント

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

ウィンドウズ:

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

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

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

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

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

唯一の例外:実行時間は、プログラムが自身をスリープ状態にすることによって発生します。

コマンドを試してください 始める, を実行すると、新しいコマンド プロンプトが生成され、実行したいコマンドを送信できます。

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

testthingie.cmd >> output.txt
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top