Pergunta

Eu tenho o seguinte esquema para o meu conjunto de teste:

TestSuite1.cmd:

  1. Execute o meu programa
  2. Verifique o seu resultado de retorno
  3. Se o resultado de retorno não é 0, converter o erro de saída textual e abortar o script. Se for bem sucedido, escrever sucesso.

No meu arquivo .cmd single, eu chamo meu programa cerca de 10 vezes com entrada diferente.

O problema é que o programa que eu corro 10 vezes leva várias horas para ser executado a cada vez.

Existe uma maneira para mim para paralelizar todas estas 10 corridas do meu programa enquanto ainda de alguma forma verificar o resultado de retorno e fornecendo um arquivo de saída adequada e enquanto ainda estiver usando um arquivo único .cmd e um arquivo de saída single?

Foi útil?

Solução

Assumindo que eles não interfiram uns com os outros por escrito aos mesmos arquivos, etc:

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

Isto irá iniciar três processos simultâneos, cada qual ecos que do número de seqüência, em seguida, aguarde 30 segundos.

Tudo isso com um arquivo cmd e (eventualmente) um arquivo de saída.

Outras dicas

Running coisas em paralelo em arquivos em lote pode ser feito via 'iniciar' comando / executável.

Windows:

Você cria um arquivo de lote que, essencialmente, chama:

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

e assim por diante, que é essencialmente bifurcação novas linhas de comando,

que iria funcionar, se o aplicativo pode lidar com usuários simultâneos (mesmo se é o mesmo do usuário) e sua TestSuite1.cmd é capaz de parâmetros punho.

Você vai precisar para iniciar o script com parâmetros diferentes em máquinas diferentes , porque o que faz com que o take programa tanto tempo para uma tarefa (IO, tempo de CPU) estarão em oferta ainda mais curto quando várias instâncias a sua execução do programa ao mesmo tempo.

Apenas exceção:. O tempo de execução é causa pelo programa colocando-se a dormir

tente o comando start , ele gera um prompt de comando novo e você pode enviar junto com todos os comandos que você quer que ele seja executado.

Eu usaria isso para arquivos em lote de desova que são executados os testes e, em seguida, anexa a um output.txt usando >> como tal:

testthingie.cmd >> output.txt
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top