Macchine virtuali e applicazione Web di test di unità / integrazione

2

Sono in procinto di aggiungere test unitari a un progetto a cui sto lavorando al lavoro e mi è stato suggerito di utilizzare VM per popolare il database con dati validi. Questo è stato suggerito come alternativa a quello che faccio di solito, che utilizza il file di fixture yaml per caricare i dati. Mentre penso che l'utilizzo di una VM per il database di test delle unità potrebbe avere alcuni vantaggi, nel complesso non la vedo come una soluzione eccezionale.

La prima preoccupazione che ho è la velocità dei test in esecuzione. Non so quanto tempo ci vorrà per far apparire e abbattere una nuova istanza VM basata su un'istantanea, ma la mia ipotesi è che sarebbe più lungo per gli inserimenti di dati che fanno i file di dati yaml. I test unitari dovrebbero essere eseguiti il più velocemente possibile perché dovrebbero essere eseguiti almeno una volta prima di ogni push al repository di controllo della versione e ciò può accadere diverse volte al giorno (anche di più quando si trova in modalità bug fixing).

La prossima preoccupazione è avere i dati in uno stato noto per tutti i test. Certo, il primo test che viene eseguito sul database della VM saprà in quale stato si trova il database una volta che un test ha modificato i dati, che potrebbero rovinare gli altri test. Con i file di dati di yaml fixture, ogni test è garantito per sapere in quale stato si trova il database.

L'ultima preoccupazione principale è la complessità che potrebbe comportare l'installazione di una macchina virtuale (ovviamente potrei sbagliarmi dato che non ho mai avuto una configurazione come questa prima). Ovviamente non possiamo semplicemente eseguire phpunit con l'utilizzo di VMs nel setup. Per prima cosa dovremmo creare uno script che fondamentalmente crea ed elimina la VM. Questo dovrebbe funzionare su tutti i sistemi operativi o dovremmo costringere tutti a lavorare in un ambiente VM (e l'esecuzione di una VM all'interno di una VM sembra che sarà davvero ancora più lenta).

Il suggerimento VM era di combattere il problema della gestione dei file di dati di yaml fixture, ma a me sembra che gestire il file yaml sia la più facile delle due opzioni.

Qualcuno ha mai lavorato in un ambiente in cui gli sviluppatori avrebbero utilizzato le VM per il database che richiedevano e testavano l'unità (o test di integrazione o qualsiasi altra cosa si voglia chiamare)?

    
posta ryanzec 19.04.2012 - 15:34
fonte

1 risposta

1

Ero su un progetto per un grande cliente aerospaziale. L'applicazione che stavamo sviluppando era progettata per raccogliere dati dalle flotte utilizzando i loro motori in tutto il mondo. A causa dei requisiti hardware, abbiamo determinato che sarebbe stato più conveniente utilizzare la virtualizzazione anziché acquistare diversi server discreti per ospitare il sistema.

Abbiamo acquistato un set doppio di server sani (4 ram quad core xeon da 256 GB) uno per la stadiazione, l'altro per la produzione. Ho configurato il server per consentire agli sviluppatori di eseguire autonomamente il provisioning dei propri ambienti di sviluppo (ogni volta che volevano cancellare il loro database, era sufficiente fare clic su un pulsante sul portale e sarebbe pronto per loro in pochi minuti).

Il vantaggio imprevisto di questa configurazione è stato che siamo stati in grado di copiare semplicemente le VM di staging sul server di produzione e bada-bing bada-boom, eravamo in diretta. Quel progetto ha avuto tanto successo, che è diventato un modello per tutto il nostro futuro lavoro di progetto. E abbiamo anche deciso di virtualizzare la nostra infrastruttura interna.

Quindi sì, può funzionare con gli strumenti appropriati. Abbiamo utilizzato Hyper-V e Microsoft System Center per Virtual Machine Management (SCVMM). Esistono strumenti simili disponibili per VMWare (sia per la prima che per la terza parte).

    
risposta data 19.04.2012 - 18:19
fonte

Leggi altre domande sui tag