Domanda

Ciao nel mio progetto abbiamo centinaia di casi di test di prova cases.These fanno parte del processo di generazione che viene attivato su ogni check-in e invia la posta ai nostri group.this sviluppatore del progetto è abbastanza grande ed è stato per più di cinque anni.
Ora abbiamo così tanti casi di test che costruiscono prende più di un'ora .Alcuni dei casi di test non sono strutturati correttamente e dopo di loro refactoring sono stato in grado di ridurre il tempo di esecuzione in modo sostanziale, ma abbiamo centinaia di casi di test e loro uno refactoring da uno sembra po 'troppo.
Ora ho eseguito alcuni dei casi di test (che impiega davvero tanto tempo per l'esecuzione) solo come parte di nightly build e non come parte di ogni checkin.
Sono curioso di sapere come gli altri ragazzi a gestire questo.

È stato utile?

Soluzione

Credo che sia stato in "Lavorare in modo efficace con il codice legacy" che ha detto che se la piattaforma di test richiede più di un paio di minuti che rallenterà gli sviluppatori giù troppo ei test inizierà sempre trascurata. Sembra che si sta cadendo in questa trappola.

Sono i casi di test in esecuzione su un database? Allora è molto probabile che il tuo più grande fonte di problemi di prestazioni. Come regola generale, i test non dovrebbero mai essere fare I / O, se possibile. Dependency Injection può permettere di sostituire un oggetto di database con oggetti mock che simulano la parte del database del codice. Che ti permette di testare il codice , senza preoccuparsi se il database è configurato correttamente.

Mi raccomando lavorando in modo efficace con il codice legacy di Michael Feathers. Si discute come gestire un sacco di mal di testa che ti sembra di essere in esecuzione in senza dover refactoring del codice di tutti in una volta.

UPDATE:

Un altro possibile aiuto sarebbe qualcosa di simile NDbUnit. Non ho ampiamente ancora utilizzato, ma sembra promettente: http://code.google.com / p / ndbunit /

Altri suggerimenti

Forse si potrebbe prendere in considerazione mantenere il database Oracle, ma in esecuzione da un'unità RAM? Non avrebbe bisogno di essere grande perché sarebbe contenere solo dati di test.

Abbiamo circa 1000 test, grande percentuale di coloro che comunicare attraverso il riposo e colpire database. tempo di esecuzione totale è di circa 8 minuti. Un'ora sembra eccessivo, ma non so cosa si sta facendo e come complesso i test sono.

Ma penso che ci sia un modo per aiutarvi. Stiamo usando TeamCity e ha una bella possibilità di avere più agenti di compilazione. Che cosa si potrebbe fare è dividere il progetto di test in sottoprogetti con ogni sottoprogetto contenente solo una serie di test. Si potrebbe utilizzare JNunit / NUnit Categorie di separarli. Poi si sarebbe configurare TeamCity in modo che ogni agente avrebbe costruito un solo tipo di sottoprogetto. In questo modo, si otterrebbe l'esecuzione parallela di test. Con pochi agenti (che si ottiene 3 per libero), si dovrebbe essere in grado di arrivare a 20 minuti, che potrebbe anche essere accettabile. Se mettete ogni agente in VM, si potrebbe anche non richiedere ulteriori macchine, è sufficiente un sacco di RAM.

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