2014-05-13 12 views
9

Sto configurando l'ambiente dei nosetests ma non riesco a ottenere il timeout per funzionare correttamente. Mi piacerebbe avere un secondo timeout (diciamo 2) per ogni test scoperto dal naso.Timeout sui test con nosetests

ho provato la seguente:

nosetests --processes=-1 --process-timeout=2 

Questo funziona bene, ma ho notato quanto segue:

  • esami in parallelo richiede più tempo per un paio di semplici casi di test
  • naso non riferire quando un test è scaduto (e quindi fallito)

Qualcuno sa come posso ottenere un tale timeout per lavorare? Preferirei che funzionasse senza test paralleli, ma questo non sarebbe un problema finché ricevo il feedback che un test è scaduto.

risposta

9

Non so se questo renderà la vita più facile, ma c'è una funzionalità simile in nose.tools che fallirà il timeout, e non si deve avere il test parallelo per esso:

from nose.tools import timed 

@timed(2) 
def test_a(): 
    sleep(3) 

È può probabilmente decorare automaticamente tutti i tuoi test in un modulo usando uno script/plugin, se aggiungere manualmente un attributo è un problema, ma personalmente preferisco la chiarezza alla magia.

Guardando attraverso la fonte Lib/site-packages/nose/plugins/multiprocess.py sembra che l'opzione process-timeout sia in qualche modo specifica per gestire sottoprocessi "sospesi" che potrebbero impedire il completamento del test.

+2

Funziona come previsto, grazie! Anche se preferirei un'opzione della riga di comando per impostare un timeout per tutti i testscripts, continuerò con questo approccio. Questo in realtà mi consentirà di impostare i timeout per funzioni specifiche che dovrebbero richiedere più tempo di altri – JustMe

+3

Ho provato questo ed ero infelice. Ecco quello che ho messo nel mio codice: import nose.tools.timed # Attenzione, questo non fa come loro affermano, non utilizzare, questa linea ha lasciato come avvertimento # nose.tools.timed non limita il tempo un test deve correre, si esegue il test, e se ci sono voluti troppo a lungo # allora solleva TimeExpired(), questo non prevede né legato alla fase di esecuzione, né un modo per estendere la # tempo di esecuzione di un test che richiede più tempo del limite per test del naso. Perché qualcuno dovrebbe mai usarlo? – Jim

Problemi correlati