длительная остановка py.test при первом отказе

Я использую pytest, и выполнение теста должно выполняться, пока не встретится исключение. Если тест никогда не встречает исключение, он должен продолжаться до конца или до тех пор, пока я не отправлю SIGINT/SIGTERM.

Есть ли программный способ сказать pytest чтобы он прекратил работу при первом сбое, в отличие от необходимости делать это в командной строке?

Ответ 1

Пожалуйста, проверьте документацию по адресу http://pytest.org/latest/usage.html#usage.

py.test -x            # stop after first failure
py.test --maxfail=2    # stop after two failures

Ответ 2

Вы можете использовать addopts в файле pytest.ini. Это не требует вызова какого-либо параметра командной строки.

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

Вы также можете установить переменную env "PYTEST_ADDOPTS" перед выполнением теста.

Если вы хотите использовать код Python для выхода после первого сбоя, вы можете использовать этот код:

import pytest

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

Этот код применяет приспособление exit_pytest_first_failure ко всем тестам и выходит из pytest в случае первого сбоя.

Ответ 3

У pytest есть опция -x или --exitfirst которая останавливает выполнение тестов мгновенно при первой ошибке или неудачной проверке.

У pytest также есть опция --max-fail=num в которой num указывает количество ошибок или сбоев, необходимых для остановки выполнения тестов.

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