4

Pythonロギングモジュールからのログファイルにアサートエラーを記録するには、py.testが必要です。テストにはPythonロギングモジュールが設定されており、すべてのログが期待どおりにそこに送られます。テスト全体を通してassertステートメントを使用しました。ただし、アサーションエラーが発生した場合、それらのメッセージはPythonのログ出力ではなく、コマンドコンソールに記録されます。

py.testにアサーションエラーをテストのログ出力に記録させる方法はありますか?

現在、エラーはコマンドコンソールにありますが、これらのアサーションエラーもPythonログ出力の一部としてログに記録され、すべてのログメッセージが1か所にキャプチャされると便利です。また、長時間実行するテストの場合、テスト全体が終了するまでエラーを確認できません。これは、長い待ち時間になる可能性があります。アサーションエラーをすぐに確認できれば、行動を起こすことができれば素晴らしいと思います。

4

2 に答える 2

7

これは、conftest.py ファイルで pytest_runtest_call フックを使用して実現できます。

import logging

def pytest_runtest_call(__multicall__):
    try:
        __multicall__.execute()
    except KeyboardInterrupt:
        raise
    except:
        logging.exception('pytest_runtest_call caught exception:')
        raise

pytest_runtest_call フックは、実際にテスト関数を実行する責任がありますが、例外をキャッチして報告する責任はありません。これは、例外をキャッチしてロギングに渡すのに理想的な場所であることを意味します。

テスト関数が呼び出される方法を実際に変更する代わりに、__multicall__このフックが存在しない場合に呼び出されるフックを単に呼び出すために使用します。

フックによってログに記録された例外は、通常 py.test によって報告される例外よりもはるかに長くなることに注意してください。これは、ロギングがスタックを単なるテスト関数に切り捨てないためです。必要な場合は、これを自分で追加できます。

于 2012-09-22T21:22:11.870 に答える