我找不到一個簡單的方法來實現這個使用鉤子。但是,我將如何實現這一點。 雖然這不是一個理想的實現。
# 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'將在測試設置子句中打印,'test'在測試拆卸子句中打印出來:'[capture stdout setup] Test abc STARTED; [capture stdout call]這裏的長輸出... [capture stdout teardown] Test abc COMPLETED'但是這種方法比我的優雅得多。 – MarSoft