2014-05-13 11 views
9

Ich richte meine Attestests-Umgebung ein, aber es scheint, als würde die Zeitüberschreitung nicht funktionieren. Ich hätte gerne eine x Sekunde (sagen wir 2) Timeout bei jedem Test von Nase entdeckt.Timeout bei Tests mit Nasetests

habe ich versucht, die folgenden:

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

Das funktioniert ganz gut, aber ich bemerkte folgendes:

  • Parallel Prüfung dauert länger für ein paar einfache Testfälle
  • Nase nicht, wenn sich zurückzumelden ein Test ist abgelaufen (und daher fehlgeschlagen)

Weiß jemand Wie kann ich eine solche Zeitüberschreitung erreichen? Ich würde es vorziehen, ohne parallele Tests zu arbeiten, aber das wäre kein Problem, solange ich die Rückmeldung bekomme, dass ein Test abgelaufen ist.

Antwort

9

Ich weiß nicht, ob dies wird Ihr Leben leichter machen, aber es gibt eine ähnliche Funktionalität in nose.tools, die auf Timeout fehlschlagen, und Sie nicht parallel Tests für sie haben müssen:

from nose.tools import timed 

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

Sie kann wahrscheinlich alle Ihre Tests in einem Modul mit einem Skript/Plugin automatisch dekorieren, wenn manuell ein Attribut hinzufügen ein Problem ist, aber ich persönlich bevorzuge Klarheit über Magie.

Durch den Blick durch die Lib/site-packages/nose/plugins/multiprocess.py Quelle sieht es aus wie process-timeout Option, die Sie verwenden, ist etwas spezifisch für die Verwaltung "hängen" Teilprozesse, die Test von Abschluss verhindert werden kann.

+2

Funktioniert wie erwartet, danke! Obwohl ich eine Befehlszeilenoption bevorzugen würde, um eine Zeitüberschreitung für alle Testscripts zu setzen, werde ich mit diesem Ansatz fortfahren. Dies erlaubt mir, Timeouts für bestimmte Funktionen einzustellen, die länger dauern als andere. – JustMe

+3

Ich habe das versucht und war unglücklich. Hier ist, was ich in meinen Code: importieren nose.tools.timed # Warnung, dies nicht wie angekündigt, nicht verwenden, diese Linie links als Warnung # nose.tools.timed nicht die Zeit zu begrenzen ein Test muss ausgeführt werden, es führt den Test aus, und wenn es zu lange dauerte # dann löst TimeExpired(), dies bietet weder eine Grenze für die Laufzeit, noch eine Möglichkeit, die Laufzeit eines erweitern Test, der länger dauert als die nasenweite Testgrenze. Warum sollte jemand das jemals benutzen? – Jim