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") # 设置编码显示中文