Test automatici con macchine virtuali

1

Sto lavorando alla realizzazione di un sistema per la verifica automatica dei compiti degli studenti. Il più grande ostacolo che sto affrontando in questo momento è capire come eseguire il collaudo del codice in modalità sandbox, ma ancora ottenere ed elaborare i risultati del test. Ho bisogno di eseguirlo su una VM in quanto non vi è alcuna garanzia che il codice non sia dannoso.

Mi piacerebbe avere un processo simile al seguente:

  1. Lo studente invia il compito
  2. VM viene creata e viene fornito il codice sorgente inviato dallo studente
  3. VM esegue i test sul codice sorgente
  4. VM restituisce i risultati del test al sistema operativo host
  5. I risultati vengono elaborati

I passaggi 2 e 4 sono quelli per cui cerco una buona soluzione. Non sono sicuro di quale sarebbe un buon modo per automatizzare il passaggio dei file alla VM e il passaggio dei risultati dalla VM. Sembra che questo sia un problema che potrebbe già avere una soluzione e preferirei non reinventare la ruota.

    
posta Justin 19.05.2014 - 03:48
fonte

3 risposte

2

Probabilmente userò solo ssh sulla VM. Prima copia l'eseguibile nella VM usando ssh (scp o sftp), quindi eseguilo di nuovo usando ssh e leggi l'output, eventualmente usa di nuovo ssh per estrarre i file di output (scp / sftp di nuovo, anche se è più facile restare con output standard ogni volta che è sufficiente ) e spegni la VM.

La VM deve avere abilitato il networking per questo, ma puoi facilmente impedirgli di raggiungere il mondo esterno configurando il firewall sull'host.

La VM dovrebbe avere l'immagine del disco montata in modalità copy-on-write e la parte scrivibile scartata dopo l'arresto, quindi tutti i test vengono eseguiti con lo stesso stato iniziale. Puoi opzionalmente controllare che il file copy-on-write non contenga modifiche ai file che non dovrebbe contenere.

    
risposta data 19.05.2014 - 13:57
fonte
2

Ecco alcune opzioni, in ordine di preferenza crescente:

Opzione 1) Per 2), è possibile copiare il file in una posizione condivisa definita sulla VM. Un artefatto di 3) è che può produrre un file di output. Per 4), il sistema operativo host può eseguire il polling del file di output previsto sulla VM per sapere quando i test sono eseguiti.

Opzione 2) Crea un servizio Web banale (ad esempio SOAP o HTTP API) sulla VM che il sistema operativo host può chiamare, quindi esegue la VM e restituisce la risposta al client del servizio Web sul sistema operativo host. Se l'esecuzione può richiedere molto tempo, è necessario prendere in considerazione l'impostazione di un timeout sufficientemente elevato sul client del servizio Web.

Opzione 3) Se possibile (non sono sicuro perché non so quale software VM stai usando) usa alcune API fornite dal server VM per eseguire un comando e ottenere la sua risposta.

    
risposta data 19.05.2014 - 03:57
fonte
-1

C'è una ragione per cui devi ruotare la VM tra i test?

Personalmente, avrei una singola VM in grado di eseguire i test e avere accesso a un'unità condivisa sulla macchina host in cui risiedono i test. È quindi possibile eseguire iterazioni sui test all'interno di una singola VM accedendo allo spazio condiviso.

Sono solo versi in VirtualBox, ma puoi creare cartelle condivise con relativa facilità, e < a href="http://www.virtualbox.org/manual/ch01.html#ovf"> esporta la tua VM quando hai impostato tutto correttamente in modo che se ti imbatti in qualcosa di malevolo, fai esplodere la VM rotta e prendi un'altra esportazione (copia) della versione di backup.

Il lato negativo di questo è che non si hanno i risultati automaticamente dati all'host dall'ospite, ma non conosco alcun metodo per farlo a livello di programma comunque. Ovviamente, il guest può scrivere i risultati nella stessa (o diversa) cartella condivisa a cui ha accesso sul computer host.

    
risposta data 19.05.2014 - 13:23
fonte

Leggi altre domande sui tag