Test di timeout in TestNG
-
20-08-2019 - |
Domanda
Grazie a un aggiornamento della libreria (easymock 2.2 - > 2.4), stiamo avendo dei test che hanno iniziato a bloccarsi. Mi piacerebbe passare un po 'di tempo sui test individuali, tutti quanti. L'idea è di identificare i test bloccati - al momento stiamo indovinando - e risolverli.
È possibile, preferibilmente a livello di suite? Abbiamo 400 test, facendo questo ogni metodo o anche ogni classe richiederà tempo.
Soluzione
Il il tag suite può avere l'attributo di timeout. Questo timeout verrà utilizzato come predefinito per tutti i metodi di prova.
Questo timeout predefinito può essere sovrascritto in base al metodo per test.
Altri suggerimenti
Se il livello Suite risulta essere l'approccio sbagliato (ovvero " troppo ampia una net " ;, poiché si finisce per contrassegnare troppi metodi con un limite di timeout), è necessario definire un personalizzato IAnnotationTransformer che, per ogni funzione illeggibile, ti darà l'opportunità di modificare un'annotazione @Test (con, ad esempio, la metodo setTimout () ).
(setTimout(0)
annulla una direttiva di timeout)
Molto tardi, ma: l'esecuzione di jstack -l <PID>
ti darà il dump dello stack, che puoi controllare per trovare quali chiamate sono bloccate. Potresti voler campionare alcune volte per essere sicuro che siano bloccati.
È possibile effettuare una ricerca e sostituire " @Test " con " @Test (timeout =) " Dovrebbe funzionare per trovare il test bloccato e può essere annullato dopo.