Impresión de tiempos de ejecución de pruebas y determinación de pruebas lentas con py.test

2 minutos de lectura

Estoy ejecutando pruebas unitarias en un servidor CI usando py.test. Las pruebas utilizan recursos externos obtenidos a través de la red. A veces, el corredor de prueba tarda demasiado, lo que hace que se cancele. No puedo repetir los problemas localmente.

¿Hay alguna manera de hacer que py.test imprima los tiempos de ejecución de la prueba (lenta), para que sea más fácil identificar las pruebas problemáticas?

avatar de usuario
Bruno Oliveira

No estoy seguro de que esto resuelva tu problema, pero puedes pasar --durations=N para imprimir lo más lento N pruebas después de que finalice el conjunto de pruebas.

Usar --durations=0 para imprimir todo.

  • ¿Sabe si existe la posibilidad de agregarlo al informe de cobertura HTML generado? Similar a agregar .coveragerc archivo con el contenido [run] branch = True agrega información de cobertura de sucursales?

    – Martín Tomas

    30 de agosto de 2018 a las 11:03

  • Deberá agregar esa información usted mismo, pytest-html tiene soporte para insertar contenido adicional.

    –Bruno Oliveira

    31 de agosto de 2018 a las 12:07

  • @oLas: Eso no es cierto: si las pruebas son “demasiado rápidas”, el tiempo medido aparentemente puede convertirse en 0 y aún se filtrarán. Un umbral negativo tampoco ayuda en este caso. Otra molestia con este enfoque es que pytest siempre imprimirá (0.00 durations hidden. Use -vv to show these durations.) que no tiene ningún sentido.

    – bluenote10

    28 de noviembre de 2018 a las 16:57


  • @ bluenote10 no estoy seguro si esto es algo que se agregó más tarde, ya que ahora es 2021 pero con --durations-min=N puede establecer la duración mínima en segundos para su inclusión en la lista de los más lentos. El valor predeterminado es 0.005, por lo que incluso –durations=0 no mostrará ninguno por debajo de 0.005 a menos que establezca un valor para durations-min

    – javrd

    18 oct 2021 a las 15:36

Puedes pasar el número con --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

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

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

¿Ha sido útil esta solución?