Imprimir tempos de execução de teste e definir testes lentos com py.test

117

Estou executando testes de unidade em um servidor CI usando py.test. Os testes usam recursos externos obtidos pela rede. Às vezes, o executor de teste demora muito, fazendo com que o executor de teste seja abortado. Não posso repetir os problemas localmente.

Existe uma maneira de fazer com que py.test imprima os tempos de execução de teste (lento), de forma que definir testes problemáticos se torne mais fácil?

Mikko Ohtamaa
fonte

Respostas:

171

Não tenho certeza de que isso resolverá seu problema, mas você pode passar --durations=Npara imprimir os Ntestes mais lentos após a conclusão do conjunto de testes.

Use --durations=0para imprimir tudo.

Bruno Oliveira
fonte
88
Se você passar o --durations=0tempo de execução, TODOS os testes serão relatados.
oLas de
Você sabe se existe a possibilidade de adicioná-lo ao relatório de cobertura HTML gerado? Semelhante a adicionar .coveragercarquivo com o conteúdo [run] branch = Trueadiciona informações de cobertura de ramificação?
Martin Thoma
Você mesmo precisará adicionar essas informações, o pytest-html tem suporte para inserir conteúdos adicionais.
Bruno Oliveira
4
@oLas: Isso não é verdade: se os testes forem "muito rápidos", o tempo medido pode aparentemente chegar a 0 e eles ainda serão filtrados. Um limite negativo também não ajuda neste caso. Outro aborrecimento com essa abordagem é que pytest sempre imprimirá, o (0.00 durations hidden. Use -vv to show these durations.)que não faz nenhum sentido.
bluenote10
17

Você pode passar o número com --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

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

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

Phuong
fonte