Wie Sie angeben, test timeout für python unittest?
Ich bin mit python
Rahmen unittest
. Ist es möglich zu spezifizieren, indem framework-Fähigkeiten ein Zeitlimit für den test? Wenn Nein, ist es möglich zu bestimmen, die sich anmutig eine timeout
für alle Prüfungen und für einige tests getrennt einem eigenen Wert für jeden?
Ich möchte definieren global timeout
für alle tests (Sie wird ihn als Standard verwenden) und ein Zeitlimit für einige test, die eine lange Zeit dauern kann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich weiß
unittest
enthält keine Unterstützung für tests, timeout.Können Sie versuchen,
timeout-Dekorator
Bibliothek von PyPI. Anwenden des decorator auf einzelne tests zu machen, Ihnen zu kündigen, wenn Sie zu lange dauern:Erstellen eine Globale timeout, können Sie ersetzen Sie rufen
mit
unittest.main()
, aber ich hoffe, ich kann annehmendecorator
für meinen Fall. Aber meine tests sind nicht in der single-thread...timeout-decorator
Verweis - Sie müssen Sie nur nutzentimeout_decorator.timeout(TIMEOUT, use_signals=False)
im multi-Threading-Umgebung.use_signals=False
bei mir nicht funktioniert, aber mit Signalen, die es sieht, zu arbeiten. Wie ich fand, dieses Modul macht die hook zu nennen_Timeout.__call__
statt testmethod direkt. Das problem liegt in der Tatsache, dassself
von testmethod verloren (ersetzt) durchself
von_Timeout
. Bei Aufruftestmethod
keineself
und es scheitert. Ich weiß nicht, was Los ist und wie es zu lösen ist. Trick mit globalen timeout funktioniert nicht zu.@timeout_decorator.timeout(TIMEOUT, timeout_exception=StopIteration)
. Sie müssen, um diese decorator auf allen möglichen gestapelt tests. In meinem Fall ist es in Prüfungen im Zusammenhang zu async/websocketBaute ich eine
unittest
timeout-Lösung mit denwith
keyowrd, basierend auf dieser Antwort.Dieser Ansatz auch verwendet
signal
, es können daher nur gültig sein, die auf *nix-Systemen (ich habe nur ausführen, in meinem Ubuntu 16.04 Umgebung).TestTimeout
Ausnahme:test_timeout
, die sich um diewith
Blöcke:with test_timeout()
Blöcke in Ihre unit-tests:Mit diesem Ansatz, tests, time-out, führen zu einem Fehler aufgrund der Erhöhung TestTimeout Ausnahme.
Optional, könnten Sie wickeln die
with test_timeout()
block in einemtry: except TestTimeout:
block, und behandeln der Ausnahme mit mehr Granularität (überspringen ein test statt Fehler zum Beispiel).