like this,报告中的中文是乱码的
原因是在pytest-html的源码(env\Lib\site-packages\pytest_html\plugin.py)里有这么一行代码
这个test_id
应该就是上面的docs/api/test_docs.py::testPreview//创建预览
,pytest-html把这个内容用unicode_escape重新编码了,浏览器会默认用utf-8
去解码它,就导致了乱码。
当然,是可以直接改源码的,但是修改源码只能在本地生效,在其他机器上运行还会有问题。
这种我感觉比较是比较优美的,在pytest的conftest.py中进行修改。
# conftest.py
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):
outcome = yield
report = outcome.get_result()
if item.function.__doc__ is None:
report.description = str(item.function.__name__) # 如果没有三引号注释('''注释'''),就提取函数名到case的输出文案中,就是上面的test_id
else:
report.description = str(item.function.__doc__) # 提取三引号注释('''注释''')到case的输出文案中
report.nodeid = report.nodeid.encode("unicode_escape").decode("utf-8") # 再把编码改回来
但是这样会把控制台的输出编码也成了unicode_escape,会在控制台乱码
def pytest_itemcollected(item): # 把case中的三引号注释输出到输出中的用例列表
item._nodeid = item._nodeid.encode("unicode_escape").decode("utf-8")
这种是见到比较多的方案,但是个人不推荐
修改${env_dir}\Lib\site-packages\pytest_html\plugin.py
将
self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")
改为
self.test_id = report.nodeid