Test dell'automazione utilizzando file batch:
-
02-07-2019 - |
Domanda
Ho il seguente layout per la mia suite di test:
TestSuite1.cmd:
- Esegui il mio programma
- Controlla il suo risultato di ritorno
- 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?
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