如何在使用pytest进行测试后显示测试名*?

时间:2017-06-05 20:42:44

标签: python pytest

大多数时候,当我使用pytest时,输出非常非常长。一百多行。而且我经常想要这个输出,我真的这么做。 --tb=short 但是我不想在我的tmux窗口中向后滚动200行来查找我的测试输出,因为它的超级烦人。

我希望拥有的是这样的:

______________________ >>test_my_test_with_a_lot_of_output _______________________
# imagine lots of test output here
______________________ <<test_my_test_with_a_lot_of_output _______________________

我可以在py.test中使用一些标志或设置来实现这种输出吗?

3 个答案:

答案 0 :(得分:1)

您可以在main / root conftest.py中添加一个在每个测试用例之前和之后自动调用的fixture。像

@pytest.fixture(scope='function', autouse=True)
def test_log(request):
    logging.info("Test '{}' STARTED".format(request.node.nodeid)) # Here logging is used, you can use whatever you want to use for logs
    def fin():
        logging.info("Test '{}' COMPLETED".format(request.node.nodeid))
    request.addfinalizer(fin)

此处,request.node.nodeid会为您提供测试名称。

答案 1 :(得分:0)

我无法找到一种使用钩子实现此目的的简单方法。但这是我如何实现这一点。 但它并不是一个理想的实现方式。

  c3.generate({
    bindto: '#chart',
    data: {
      json: this.obc,
      keys: {
        value: ['lowRepCycle', 'takt', 'oee']
      },
      type: 'bar',
      types: {
        takt: 'line',
        oee: 'line'
      },
      groups: [
        ['processId']
      ]
    }
  })

关于扩展此方法的灵感来自# 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') 类来源。

答案 2 :(得分:0)

运行测试时使用“ pytest -rA”

请参阅文档here