4

py.test レポート フック (pytest_runtest_makereport() および pytest_report_teststatus()) を使用しています。

py.test テストが失敗すると、レポート フック (report.sections[]) でキャプチャされた stdout データを見つけることができます。

py.test テストに合格すると、report.sections[] リストは空になります。

合格したテストのキャプチャされた stdout はどこにありますか?

ありがとう。

編集: ソース (_pytest/capture.py) から、これはテストに合格しない場合にのみ利用できるようです:

def pytest_runtest_makereport(self, __multicall__, item, call):
    ...
    if not rep.passed:
        addouterr(rep, outerr)
4

1 に答える 1

2

この情報は、2 つの Unicode 文字列のタプルである item.outerr で利用できることがわかりました。1 つ目は stdout で、2 つ目は stderr です。

py.test は、これらの文字列をセットアップ、呼び出し、ティアダウン レポートで指定し、それらの一部は空の文字列である可能性があることに注意してください。したがって、空の文字列で上書きせずに出力を保存するには、ロジックを次のようにする必要があります。

stdout = item.outerr[0]
if stdout and len(stdout):
    whatever.stdout = stdout

stderr = item.outerr[1]
if stderr and len(stderr):
    whatever.stderr = stderr
于 2012-10-30T20:25:06.143 に答える