Drucken von Testausführungszeiten und Festhalten langsamer Tests mit py.test


116

Ich führe Unit-Tests auf einem CI-Server mit py.test durch. Tests verwenden externe Ressourcen, die über das Netzwerk abgerufen werden. Manchmal dauert der Testläufer zu lange, wodurch der Testläufer abgebrochen wird. Ich kann die Probleme nicht lokal wiederholen.

Gibt es eine Möglichkeit, die Ausführungszeiten von (langsamen) Tests mit py.test auszudrucken, damit problematische Tests einfacher festgelegt werden können?

Antworten:


169

Ich bin nicht sicher, ob dies Ihr Problem lösen wird, aber Sie können --durations=Ndie langsamsten NTests nach Abschluss der Testsuite drucken .

Verwenden Sie --durations=0diese Option , um alle zu drucken.


88
Wenn Sie die --durations=0Ausführungszeit für ALLE Tests überschreiten , wird dies gemeldet.
oLas

Wissen Sie, ob es eine Möglichkeit gibt, es dem generierten HTML-Bericht hinzuzufügen? Ähnlich wie beim Hinzufügen einer .coveragercDatei mit dem Inhalt werden [run] branch = TrueInformationen zur Verzweigungsabdeckung hinzugefügt ?
Martin Thoma

Sie müssen diese Informationen selbst hinzufügen. Pytest-html unterstützt das Einfügen zusätzlicher Inhalte.
Bruno Oliveira

4
@oLas: Das stimmt nicht: Wenn Tests "zu schnell" sind, kann die gemessene Zeit anscheinend 0 werden und sie werden trotzdem herausgefiltert. Eine negative Schwelle hilft auch in diesem Fall nicht. Ein weiteres Ärgernis bei diesem Ansatz ist, dass der Pytest immer gedruckt wird, (0.00 durations hidden. Use -vv to show these durations.)was keinen Sinn ergibt.
bluenote10

17

Sie können die Nummer mit übergeben --durations

pytest --durations=0 — Show all times for tests and setup and teardown

pytest --durations=1 — Just show me the slowest

pytest --durations=50 — Slowest 50, with times,  etc

Weitere Informationen finden Sie unter: https://medium.com/@brianokken/pytest-durations-0-show-all-times-for-tests-and-setup-and-teardown-848dccac85db

Oder: https://docs.pytest.org/en/latest/usage.html#profiling-test-execution-duration

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.