2012-03-23 2 views
12

Nella nostra build ci sono alcuni scenari che falliscono per motivi che sono fuori dal nostro controllo o richiedono troppo tempo per eseguire il debug in modo corretto. Cose come javascript asincrono ecc.cetriolo riesegue automaticamente gli scenari falliti con un tag?

Ad ogni modo il punto a volte funzionano a volte no, quindi stavo pensando che sarebbe stato utile aggiungere un tag a uno scenario come @rerun_on_failure o @retry che riproverà lo scenario X numero di volte prima di fallire la compilazione.

Capisco questa non è una soluzione ideale, ma il test è ancora prezioso e ci piacerebbe tenerlo senza avere i falsi negativi

La prova effettiva che non riesce clic su un link e si aspetta un evento di monitoraggio per essere inviato a un server per l'analisi (tramite javascript). A volte il web driver del selenio carica la pagina successiva troppo velocemente e l'evento non ha tempo di essere inviato.

Grazie

+2

È possibile utilizzare wait_until? http://stackoverflow.com/questions/3876412/capybara-doesnt-recognize-dynamically-added-dom-elements – michaeltwofish

+1

usiamo wait_until per altri test ma in questo caso non è applicabile. Aggiornerò la domanda sul perché. Grazie – amleszk

+0

Non posso fare a meno di pensare che i ganci di cetriolo potrebbero raggiungere questo obiettivo. Forse un aggancio. Tuttavia, non è così semplice come rieseguire lo scenario perché è necessario che anche il tuo driver capybara sia nello stato giusto. Ho provato a farlo funzionare da solo, ma non sono ancora riuscito a farlo. – iainbeeston

risposta

9

Ho preso in considerazione la scrittura qualcosa di simile a quello che stai descrivendo, ma ho trovato questo:

http://web.archive.org/web/20160713013212/http://blog.crowdint.com/2011/08/22/auto-retry-failed-cucumber-tests.html

Se siete stanchi di dover ri-calcio crea nel tuo server CI a causa di errori non deterministici, questo post è per te.

In breve: esegue una nuova attività di rake denominata cetriolo: rerun che utilizza rerun.txt per riprovare i test non riusciti. Dovrebbe essere abbastanza facile aggiungere del loop per riprovare al massimo 3 volte (per esempio).

+2

Questo è interessante, ma mi piacerebbe utilizzalo solo come ultima risorsa. La cosa migliore da fare è rimuovere tutti i comportamenti non deterministici dai test. –

+0

@Mark Questo è abbastanza difficile per i test javascript che falliscono in modo non deterministico per ragioni non deterministiche –

3

più recenti versioni di cetrioli hanno una bandiera di tentativi

cucumber --retry 2 

Will riprovare i test due volte se non riesce

+0

Questa dovrebbe essere la nuova risposta selezionata. Anche se la risposta di neomindryan era grandiosa al momento, questa risposta la rende completamente obsoleta. – sergut