2013-05-17 12 views
5

Ho bisogno di eseguire oltre 100 script perl (scritti dall'ex dipendente) su Windows per i test di stabilità del sistema. Ogni script ha diverse funzioni, e ogni funzione invia alcuni dei comandi di linux al nostro sistema back-end, e restituisce i risultati. Il risultato è scritto in un file di registro (attualmente ogni script ha un file di registro). I risultati sono "Success", "Fail".Come posso eseguire automaticamente una grande quantità di script perl?

L'esecuzione di questi script perl uno per uno sta uccidendo il mio tempo. Sto pensando di scrivere un file batch per automatizzarlo, ma devo analizzare i file dei risultati per generare un rapporto di prova. Ho cercato online, e sembra che diverse strutture di test, come Test::Harness, Test::More, Test::Most siano buone scelte. Pur basandosi sulla mia comprensione, prendono solo il file .t, e i nostri script sono normali script perl (.pl), e non script di test perl standard (script .tt). Se si usa, ad esempio, Test :: Harness, dovrei cambiare tutto lo script perl da .pl a .t e metterli nella cartella t? Come chiamare le mie funzioni in Test :: Harness? Qualcuno può suggerire un modo migliore per automatizzare il processo di test e generare il rapporto di test come fa Test :: Harness? Penso che un esempio sarà molto utile.

+0

Idealmente si potrebbe cambiare il vostro test per utilizzare le funzioni [Test :: More] (http://p3rl.org/Test::More) invece di stampare 'Success', e' Fail'. Esempio: invece di 'print $ a eq 'a"? "Success \ n": "Fail \ n"; 'sarebbe' is $ a,' a ',' Alcuni testi esplicativi''. L'output sarebbe in [TAP] (http://testanything.org) in formato. –

risposta

1

Uno di noi è confuso qui. Questi script (oltre 100) perl non sono unit tests giusto?

Se ho ragione, continua a leggere.

Test::* che hai menzionato non sono proprio quello che stai cercando.

Mi sembra che sia sufficiente un main.pl o un .bat, per eseguire ogni test.pl.

Quindi sembra che tu sia sulla strada giusta. Se è possibile avere tutti i test nella stessa directory, puoi fare qualcosa di simile.

my $tests_directory = "/some/path/test_dir"; 
opendir my $dh, $tests_directory or die"$!"; 
my @tests = grep { $_ !~ /^\./{1,2}$/ } readdir $dh; 

for my $test (@tests) { 
    system('perl', $test); 
} 
+0

si è corretto, non sono unit test – ericyoung

+0

@ericyoung - quindi utilizzare l'esempio fornito. – chrsblck

2

Test :: Harness and friends non è una scelta appropriata per questa attività, a meno che non si desideri modificare tutti i 100 script per l'emissione di dati TAP anziché un file di registro.

Perché non basta scrivere uno script Perl per eseguire tutti gli script Perl?

use strict; 
use warnings; 

my $script_dir = "/path/to/dir/full/of/scripts"; 
opendir my $dh, $script_dir or die "Can't open dir $script_dir: $!"; 

my @scripts = grep { /\.pl$/ } readdir $dh; 
foreach my $script(@scripts) { 
    print "Running $script\n"; 
    system 'perl', $script; 
} 

Si potrebbe anche parallelizzare questo utilizzando fork e exec (o Parallel::ForkManager, ancora meglio), supponendo che abbia un senso per il sistema.