Pregunta

Tengo el siguiente diseño para mi suite de prueba:

TestSuite1.cmd:

  1. Ejecutar mi programa
  2. Comprueba el resultado devuelto
  3. Si el resultado devuelto no es 0, convierta el error a salida textual y cancele la secuencia de comandos. Si tiene éxito, escriba el éxito.

En mi único archivo .cmd, llamo a mi programa unas 10 veces con una entrada diferente.

El problema es que el programa que ejecuto 10 veces tarda varias horas en ejecutarse cada vez.

¿Hay alguna forma de paralelizar todas estas 10 ejecuciones de mi programa sin dejar de verificar el resultado de la devolución y proporcionar un archivo de salida adecuado y al mismo tiempo usar un archivo único .cmd y un solo archivo de salida?

¿Fue útil?

Solución

Suponiendo que no interfieran entre sí escribiendo en los mismos archivos, 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

Esto iniciará tres procesos simultáneos, cada uno de los cuales se hace eco de su número de secuencia y luego espera 30 segundos.

Todo con un archivo cmd y (eventualmente) un archivo de salida.

Otros consejos

La ejecución de cosas en paralelo en archivos por lotes se puede hacer a través del ejecutable / comando 'start'.

Windows:

creas un archivo por lotes que esencialmente llama:

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

y así sucesivamente, que básicamente es forking nuevas líneas de comando,

que funcionaría, si la aplicación puede manejar usuarios concurrentes (incluso si es el mismo Usuario), y su TestSuite1.cmd es capaz de manejar parámetros.

Necesitará iniciar la secuencia de comandos con diferentes parámetros en diferentes máquinas porque todo lo que haga que el programa tarde tanto tiempo para una tarea (IO, tiempo de CPU) será aún más corto cuando varias instancias de tu programa se ejecuta a la vez.

Única excepción: el tiempo de ejecución se debe a que el programa se pone en suspensión.

prueba el comando iniciar , genera un nuevo indicador de comandos y puedes enviar cualquier comando que quieras que ejecute.

Lo usaría para generar archivos por lotes que ejecuten las pruebas y luego se agreguen a un output.txt usando > > como tal:

testthingie.cmd >> output.txt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top