Domanda

Ho il seguente layout per la mia suite di test:

TestSuite1.cmd:

  1. Esegui il mio programma
  2. Controlla il suo risultato di ritorno
  3. Se il risultato restituito non è 0, converti l'errore in output testuale e annulla lo script. Se riesce, scrivi il successo.

Nel mio singolo file .cmd, chiamo il mio programma circa 10 volte con input diversi.

Il problema è che il programma che eseguo 10 volte impiega diverse ore per funzionare ogni volta.

Esiste un modo per parallelizzare tutte queste 10 sequenze del mio programma, controllando comunque in qualche modo il risultato di ritorno e fornendo un file di output corretto e utilizzando ancora un file .cmd e un singolo file di output?

È stato utile?

Soluzione

Supponendo che non interferiscano tra loro scrivendo negli stessi file, ecc.

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

Questo avvierà tre processi simultanei ciascuno che fa eco al suo numero di sequenza, quindi attendi 30 secondi.

Tutto con un file cmd e (eventualmente) un file di output.

Altri suggerimenti

L'esecuzione di cose in parallelo in file batch può essere eseguita tramite eseguibile / comando 'start'.

Windows:

si crea un file batch che essenzialmente chiama:

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

e così via, che essenzialmente sta biforcendo nuove righe di comando,

che funzionerebbe, se l'applicazione fosse in grado di gestire utenti simultanei (anche se è lo stesso Utente) e TestSuite1.cmd è in grado di gestire i parametri.

Dovrai avviare lo script con parametri diversi su macchine diverse perché qualunque cosa richieda un programma così lungo per un'attività (IO, tempo di CPU) sarà ancora più breve quando più istanze di il programma viene eseguito contemporaneamente.

Unica eccezione: il tempo di esecuzione è causato dalla sospensione del programma.

prova il comando start , genera un nuovo prompt dei comandi e puoi inviare insieme tutti i comandi che desideri vengano eseguiti.

Lo userei per generare file batch che eseguono i test e quindi aggiungo un output.txt usando > > come tale:

testthingie.cmd >> output.txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top