문제

내 테스트 스위트에는 다음과 같은 레이아웃이 있습니다.

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

이것은 각각의 동시 프로세스를 시작하여 각각 시퀀스 번호를 반향 한 다음 30 초를 기다립니다.

하나의 CMD 파일과 (결국) 하나의 출력 파일이 있습니다.

다른 팁

배치 파일에서 병렬로 실행하는 것은 '시작'실행 가능/명령을 통해 수행 할 수 있습니다.

윈도우:

기본적으로 다음을 호출하는 배치 파일을 만듭니다.

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

본질적으로 새로운 명령줄을 분기하는 등의 작업이 있습니다.

이는 응용 프로그램이 동시 사용자(동일한 사용자라도)를 처리할 수 있고 TestSuite1.cmd가 매개변수를 처리할 수 있다면 작동할 것입니다.

다른 매개 변수로 스크립트를 시작해야합니다. 다른 기계에서 프로그램의 여러 인스턴스가 한 번에 실행될 때 프로그램이 너무 오래 걸리는 작업 (IO, CPU 시간)은 공급이 짧아지기 때문입니다.

예외 만 : 프로그램이 잠들게하는 프로그램으로 인해 런타임이 원인입니다.

명령을 시도하십시오 시작, 새로운 명령 프롬프트가 생겨서 실행하려는 명령을 따라 보낼 수 있습니다.

이것을 사용하여 테스트를 실행하는 배치 파일을 스폰 한 다음 >>를 사용하여 output.txt에 추가합니다.

testthingie.cmd >> output.txt
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top