web-dev-qa-db-ja.com

長時間実行されているpy.testが最初の失敗で停​​止する

pytest を使用していますが、テストの実行は例外が発生するまで実行されることになっています。テストで例外が発生しない場合は、残りの時間またはSIGINT/SIGTERMを送信するまで実行を継続する必要があります。

コマンドラインでこれを行うのではなく、pytestに最初の失敗で実行を停止するようにプログラムで指示する方法はありますか?

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

http://pytest.org/en/latest/usage.html のドキュメントを参照してください

39

Pytest.iniファイルで addopts を使用できます。コマンドラインスイッチを呼び出す必要はありません。

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

テストを実行する前に、環境変数「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を終了します。

4
SilentGuy

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
1
lmiguelvargasf