Drukowanie czasów wykonania testów i przypinanie powolnych testów za pomocą py.test

122

Przeprowadzam testy jednostkowe na serwerze CI przy użyciu py.test. Testy wykorzystują zasoby zewnętrzne pobierane przez sieć. Czasami program uruchamiający test trwa zbyt długo, co powoduje przerwanie programu uruchamiającego testy. Nie mogę powtórzyć problemów lokalnie.

Czy istnieje sposób, aby py.test wydrukował czasy wykonywania (wolnego) testu, tak aby ustalenie problematycznych testów stało się łatwiejsze?

Mikko Ohtamaa
źródło

Odpowiedzi:

175

Nie jestem pewien, czy to rozwiąże Twój problem, ale możesz przejść --durations=Ndo drukowania najwolniejszych Ntestów po zakończeniu zestawu testów.

Służy --durations=0do drukowania wszystkich.

Bruno Oliveira
źródło
89
Jeśli przekroczysz --durations=0czas wykonania, WSZYSTKIE testy zostaną zgłoszone.
oLas
Czy wiesz, czy istnieje możliwość dodania go do generowanego raportu pokrycia HTML? Podobnie jak dodanie .coveragercpliku z zawartością [run] branch = Truepowoduje dodanie informacji o zasięgu gałęzi?
Martin Thoma
Będziesz musiał sam dodać te informacje, pytest-html obsługuje wstawianie dodatkowych treści.
Bruno Oliveira
4
@oLas: To nieprawda: jeśli testy są „zbyt szybkie”, zmierzony czas może najwyraźniej zmienić się na 0 i nadal zostaną odfiltrowane. Ujemny próg również w tym przypadku nie pomaga. Kolejną przeszkodą związaną z tym podejściem jest to, że pytest zawsze drukuje, (0.00 durations hidden. Use -vv to show these durations.)co nie ma żadnego sensu.
bluenote10
19

Możesz przekazać numer za pomocą --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

Skorzystaj z: https://medium.com/@brianokken/pytest-durations-0-show-all-times-for-tests-and-setup-and-teardown-848dccac85db

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

Phuong
źródło