Wie kann ich die wiederholen jeden test mehrfach in py.test ausführen?
Möchte ich laufen jeden ausgewählten py.testen Sie Element eine beliebige Anzahl Male nacheinander.
Ich sehe keine standard-py.test-Mechanismus, dies zu tun.
Ich versuchte dies in der pytest_collection_modifyitems()
Haken. Ich veränderte die Liste der Elemente, die übergeben, um geben Sie jedes Element mehr als einmal. Die erste Ausführung eines test-Element funktioniert wie erwartet, aber das scheint einige Probleme verursachen, für meinen code.
Weiter, ich würde es vorziehen, einen einzigartigen test-item-Objekt für jeden Lauf, als ich mit id (item), die als Schlüssel in verschiedenen reporting-code. Leider kann ich keine py.test-code zu duplizieren eines test item copy.copy()
funktioniert nicht, und copy.deepcopy()
bekommt eine Ausnahme.
Kann jemand empfehlen, eine Strategie für die Ausführung einer test mehrmals?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um jeden test eine Anzahl von Zeiten, wir werden programmgesteuert parametrisieren jeder testen, wie die tests generiert werden.
Erste, lassen Sie 's fügen Sie den parser option (geben Sie den folgenden in einer Ihrer conftest.py's):
Fügen wir nun einen "pytest_generate_tests" Haken. Hier ist, wo die Magie passiert.
Laufen ohne das repeat-flag:
Läuft mit der repeat-flag:
Weiter Lesen:
Den pytest Modul pytest-wiederholen existiert für diesen Zweck, und ich empfehle die Verwendung von Modulen, wenn möglich, eher als eine re-Implementierung Ihrer Funktionalität selbst.
Es zu verwenden, fügen Sie einfach
pytest-repeat
zu Ihremrequirements.txt
oderpip install pytest-repeat
, dann führen Sie Ihre tests mit--count n
.warnings.warn("Repeating unittest class tests not supported")
github.com/pytest-dev/pytest-repeat/blob/...Eine mögliche Strategie ist die Parametrisierung der test in Frage, aber nicht explizit mit dem parameter.
Beispiel:
Den oben genannten test fünf mal.
Check-out der Parametrierung-Dokumentation: https://pytest.org/latest/parametrize.html
Basierend auf Frank T ' s Vorschlag fand ich eine sehr einfache Lösung in der pytest_generate_tests() Legende:
Nun ausführen von "py.test --count 5" bewirkt, dass jeder test ausgeführt werden fünf mal in der test-Sitzung.
Und es erfordert keine änderungen an bestehenden tests.
Dank Frank T!
Basierend auf dem, was ich hier gesehen, und da ich schon einige filtern von tests in
pytest_collection_modifyitems
meine Methode der Wahl ist die folgende. Inconftest.py