Domanda

Vorrei impostare alcuni test automatici dei casi di test sui binari Fortran all'interno di un repository SVN, su richiesta o con un lavoro Cron. Per complicare leggermente il problema, i casi di test verrebbero eseguiti su un cluster computazionale, quindi ogni caso di test dovrebbe generare uno script PBS. (Ambiente Linux)

Esistono molti test Web e soluzioni di unit test là fuori, tuttavia non sono riuscito a trovare nulla per testare direttamente i binari. Dire, fornire input e confrontare gli output con la soluzione prevista.

Qualche suggerimento su come dovrebbe essere affrontato questo?

È stato utile?

Soluzione

Sono d'accordo che questo è qualcosa che sarebbe abbastanza semplice da scrivere. A seconda di come sono configurati i tuoi binari e di quanto sono diversi i tuoi programmi l'uno dall'altro, potresti persino includere gli script di test come parte del tuo repository SVN.

Dato che sei in un sistema batch, hai un po 'di libertà per programmare i test. Potresti voler avere un & Quot generico; verifica & Quot; lavoro a cui è possibile fornire parametri di configurazione (ad es. posizioni dell'output di programma atteso ed effettivo) Nick menzionato usando grep per controllare l'output di qstat per l'ID lavoro, ma è possibile indicare a PBS di conservare un lavoro fino al completamento di un altro lavoro. Ciò significherebbe che hai qualcosa del tipo:

...
#PBS -N run_test_1
#PBS -a 200906270000
...
<compile test>
<run test>
<save output>

una volta inviato, salva l'ID lavoro restituito da qsub (il modo in cui lo fai dipende dalla tua piattaforma, in genere è sufficiente qualcosa come job_id=$(qsub $JOB_FILE)). Quindi, collega quel valore a un altro script:

...
#PBS -N verify_test_1
#PBS -W depend=afterany:$job_id
<run comparison>
...

Ciò (quando viene inserito il valore corretto di job_id) manterrà l'esecuzione dell'esecuzione del test fino a mezzanotte del 27 giugno 2009 e manterrà l'esecuzione del processo di verifica fino al completamento del processo di test (il afterany la direttiva indica che dovrebbe sempre essere eseguito dopo il primo lavoro, non solo se ha esito positivo).

Tuttavia, a seconda del tempo di consegna del cluster, è possibile inserire tutto questo in uno script, anche se è ancora possibile utilizzare i blocchi temporizzati PBS per l'esecuzione solo in un determinato momento. Di recente ho iniziato a utilizzare Python anziché gli script di shell per gestire anche questi lavori relativi al sistema - ho testato ieri rendendo eseguibile lo script Python e aggiungendo le direttive PBS direttamente alla fonte - sembrava funzionare molto bene.

Altri suggerimenti

Potrebbe esserci una risposta migliore che è più preconfezionata, ma credo che Buildbot sia abbastanza configurabile che fintanto che puoi scrivere uno script Python per eseguire il tuo binario, dovrebbe funzionare per quello che vuoi.

http://buildbot.net/

Sembra che, per semplici test di input / output, potresti fare a pezzi uno script per farlo ...

per es.

for each program
    compile
    submit to queue
    wait for finish
    check output

In pratica, probabilmente vorresti inviare più di un lavoro alla coda, ma l'idea è la stessa.

Ecco alcune idee sulla mia testa su come potresti fare ogni passo.

Sottoporre

È possibile utilizzare uno script PBS modello e utilizzare sed per trovare / sostituire i token intput con valori di input per il programma prima di inviare

In attesa di fine

È possibile eseguire più volte il grep dell'output di qstat per l'ID lavoro, in attesa che finisca

Controlla output

Controlla il file di output del lavoro rispetto all'output previsto. È possibile salvare l'output previsto in un file e utilizzare diff oppure disporre di un elenco di espressioni regolari che devono corrispondere per ogni esecuzione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top