• pytest-html中文乱码


    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去解码它,就导致了乱码。

    当然,是可以直接改源码的,但是修改源码只能在本地生效,在其他机器上运行还会有问题。

    方案一 在conftest.py中把编码改回来

    这种我感觉比较是比较优美的,在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")  # 再把编码改回来
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    方案二 在conftest.py中修改pytest的输出

    但是这样会把控制台的输出编码也成了unicode_escape,会在控制台乱码

    def pytest_itemcollected(item):     # 把case中的三引号注释输出到输出中的用例列表
    	  item._nodeid = item._nodeid.encode("unicode_escape").decode("utf-8")
    
    • 1
    • 2

    方案三 修改源码

    这种是见到比较多的方案,但是个人不推荐

    修改${env_dir}\Lib\site-packages\pytest_html\plugin.py

    self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")
    
    • 1

    改为

    self.test_id = report.nodeid
    
    • 1
  • 相关阅读:
    聊聊 C++ 和 C# 中的 lambda 玩法
    java返给前端ECharts的格式
    202、弱电工程十大无线视频监控系统应用场景
    Python入门教程之基本语法详解,收藏慢慢学~
    hive数据load到redis
    C++ 继承
    Java反射获取抽象类方法属性问题讲解
    大数据算法系列10:字符串检验算法
    带头+双向+循环链表
    代码随想录刷题| 01背包理论基础 LeetCode 416. 分割等和子集
  • 原文地址:https://blog.csdn.net/BBJG_001/article/details/126092794