py.test de ejecución prolongada se detiene en el primer error

2 minutos de lectura

avatar de usuario
Mate

estoy usando pytest, y se supone que la ejecución de la prueba debe ejecutarse hasta que encuentre una excepción. Si la prueba nunca encuentra una excepción, debe continuar ejecutándose por el resto del tiempo o hasta que le envíe un SIGINT/SIGTERM.

¿Hay alguna forma programática de decir pytest dejar de ejecutarse en el primer error en lugar de tener que hacerlo en la línea de comando?

  • ¿Puede mostrar su código de cómo está invocando pytest programáticamente?

    –Tom Dalton

    22 de abril de 2016 a las 23:19

avatar de usuario
Praveen Yalagandula

pytest -x           # stop after first failure
pytest --maxfail=2  # stop after two failures

Ver el documentación de prueba.

avatar de usuario
miguelvargasf

pytest tiene la opción -x o --exitfirst que detiene la ejecución de las pruebas instantáneamente en el primer error o prueba fallida.

pytest también tiene la opción --maxfail=num en el cual num indica el número de errores o fallos necesarios para detener la ejecución de las pruebas.

pytest -x            # if 1 error or a test fails, test execution stops 
pytest --exitfirst   # equivalent to previous command
pytest --maxfail=2   # if 2 errors or failing tests, test execution stops

avatar de usuario
chicosilencioso

Puedes usar adopta en pytest.ini expediente. No requiere invocar ningún interruptor de línea de comando.

# content of pytest.ini
[pytest]
addopts = --maxfail=2  # exit after 2 failures

También puede establecer la variable env PYTEST_ADDOPTS antes de ejecutar la prueba.

Si desea usar el código Python para salir después del primer error, puede usar este código:

import pytest

@pytest.fixture(scope="function", autouse=True)
def exit_pytest_first_failure():
    if pytest.TestReport.outcome == 'failed':
        pytest.exit('Exiting pytest')

Este código se aplica exit_pytest_first_failure fixture a todas las pruebas y sale de pytest en caso de la primera falla.

  • AttributeError: el módulo ‘pytest’ no tiene el atributo ‘TestReport’

    – Azure IP

    1 de febrero a las 13:06

¿Ha sido útil esta solución?