Pytest报告添加描述时报错:AttributeError: ‘TestReport‘ object has no attribute ‘description‘

AttributeError: ‘TestReport’ object has no attribute ‘description’

在conftest文件增加报告描述,如下:

@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
    cells.insert(2, html.th('Description'))
    cells.insert(1, html.th('Time', class_='sortable time', col='time'))
    cells.pop()

@pytest.mark.optionalhook
def pytest_html_results_table_row(report, cells):
    cells.insert(2, html.td(report.description))
    cells.insert(1, html.td(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), class_='col-time'))
    cells.pop()

但是运行后会报错误,AttributeError: ‘TestReport’ object has no attribute ‘description’:

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/jiekou/testcase/test_login.py", line 24, in <module>
    pytest.main(['-v', '-s',"-W", "ignore:Module already imported:pytest.PytestWarning", '--html=report/report.html','--self-contained-html'])
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\_pytest\config\__init__.py", line 164, in main
    ret = config.hook.pytest_cmdline_main(
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\manager.py", line 84, in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 208, in _multicall
    return outcome.get_result()
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\_pytest\main.py", line 306, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\_pytest\main.py", line 294, in wrap_session
    config.hook.pytest_sessionfinish(
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\manager.py", line 84, in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 203, in _multicall
    gen.send(outcome)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\_pytest\terminal.py", line 794, in pytest_sessionfinish
    outcome.get_result()
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pytest_html\plugin.py", line 746, in pytest_sessionfinish
    self._post_process_reports()
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pytest_html\plugin.py", line 728, in _post_process_reports
    self.append_passed(test_report)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pytest_html\plugin.py", line 444, in append_passed
    self._appendrow("Passed", report)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pytest_html\plugin.py", line 425, in _appendrow
    result = self.TestResult(outcome, report, self.logfile, self.config)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pytest_html\plugin.py", line 191, in __init__
    self.config.hook.pytest_html_results_table_row(report=report, cells=cells)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\manager.py", line 84, in <lambda>
    self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 208, in _multicall
    return outcome.get_result()
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "C:\Users\Administrator\Desktop\jiekou\venv\lib\site-packages\pluggy\callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "C:\Users\Administrator\Desktop\jiekou\conftest.py", line 39, in pytest_html_results_table_row
    cells.insert(2, html.td(report.description))
AttributeError: 'TestReport' object has no attribute 'description'

此时我们只需要在conftest文件下加如下钩子函数就可以完美解决:

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
    outcome = yield
    report = outcome.get_result()
    report.description = str(item.function.__doc__)
    report.nodeid = report.nodeid.encode("utf-8").decode("unicode_escape")  # 设置编码显示中文
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值