2017-06-28 7 views
0

注:fixture用の古いスタイルのpytestの2.7.3を使用しています。私はに持っていなければなりません。私はLinux上でPython 2.7を使用しています。pytestファイナライザで失敗(エラーではない)テストを発生させることは可能ですか?

私は現在、各テストの最後にチェックが必要なpytestによるテストに取り組んでいます。続行するには、チェックを実行するファイナライザを使用してフィクスチャを書きましたが、例外を発生させると奇妙な結果が生じます。ここで

は、コード(SOのために編集され、あなたは/テストするためにコピー&ペーストすることができます)です。

​​

ので、コードが現在動作しますが、出力は奇妙な、間違ったになります。

# test pass and finalizer raise exception 
# expected result : foobar.py::test_ok FAILED 
foobar.py::test_ok PASSED 
foobar.py::test_ok ERROR 


# test fail and finalizer raise exception 
# expected result : foobar.py::test_nok FAILED 
foobar.py::test_nok FAILED 
foobar.py::test_nok ERROR 

ファイナライザーが何もしていない場合。

誰かがそれをどのように修正するか考えている場合。私は良いアプローチを持っていないかもしれないが、ファイナライザーは良いアイデアのように聞こえる。

ありがとうございました。

EDIT:私はpytest_runtest_teardownフックと同じ構成です。

答えて

0

したがって、ソリューションはそれほど難しくありませんでした。

Pytestはhooksを多く提供しており、のテスト実行後にを実行したpytest_pyfunc_callを使用する必要があります。

ソリューション:

# conftest.py 
def check(): 
    assert 0 

def pytest_pyfunc_call(pyfuncitem): 
    check() 


# test_foobar.py 
def test_ok(): 
    assert 1 

def test_nok(): 
    assert 0 

そして結果:

test_foobar.py::test_ok FAILED 
test_foobar.py::test_nok FAILED 

はそれを改善:テストが失敗したとcheck()check()のだけAssertionErrorを失敗した場合、デフォルトで

を、トレースしています。テストが失敗した場合にcheck()を無視する解決策を見つけたら、私は答えを更新します。あなたが解決策を持っているなら、あなたは大歓迎です!

関連する問題