フックを使用してこれを実現する簡単な方法が見つかりませんでした。しかし、ここでこれを実装する方法があります。 これは理想的な実装ではありません。
# contest.py
import pytest
import _pytest
class TerminalReporter(_pytest.terminal.TerminalReporter):
def _gettestname(self, rep):
# actually "rename" original method for clarity
return super()._getfailureheadline(rep)
def _getfailureheadline(self, rep):
# instead of test name
# (which is originally printed at the top of report)
# return prefixed name
return '>>' + self._gettestname(rep)
def _outrep_summary(self, rep):
super()._outrep_summary(rep)
# after printing test report end, print out test name again
# XXX: here we hard-code color, so red will be used even for passed tests
# (if passes logging is enabled)
# You can add some more logic with analyzing report status
self.write_sep('_', '<<' + self._gettestname(rep), red=True)
@pytest.hookimpl(trylast=True)
def pytest_configure(config):
# overwrite original TerminalReporter plugin with our subclass
# we want this hook to be executed after all other implementations
# to be able to unregister original plugin
reporter = TerminalReporter(config)
config.pluginmanager.unregister(name='terminalreporter')
config.pluginmanager.register(reporter, 'terminalreporter')
このアプローチを拡張することのインスピレーションのためには、_pytest.terminal.TerinalReporter
クラスソースを参照してください。
ニースアプローチ。ただ一つの小さな問題は、テストセットアップ節に 'STARTED'が、テストティアダウン節に' COMPLETED'が出力されることです。 '[captured stdout setup] Test abc STARTED; [キャプチャされたstdout呼び出し]ここで長い出力... [キャプチャされたstdoutティアダウン]テストabc COMPLETED'しかし、このアプローチはまだ私よりもエレガントです。 – MarSoft