pytest文档21-pytest-html报告优化(nodeid中文显示[\u6350\u52a9\u6211\u4eec]问题解决)

news/2024/11/7 21:33:21/

前言

pytest-html报告中当用到参数化时候,获取用例的nodeid里面有中文时候,会显示[\u6350\u52a9\u6211\u4eec]这种编码(再次声明,这个不叫乱码,这是unicode编码)
关于python2和python3里面Unicode编码转化可以参考之前写的一篇【python笔记6-%u60A0和\u60a0类似unicode解码】
本篇以python3.6版本为例

遇到问题

官网文档https://github.com/pytest-dev/pytest-html上说明如下:
注意ANSI代码支持取决于ansi2html包,此包不作为依赖项包含在内。如果你安装了这个软件包,那么ANSI代码会在你的报告中被转换成HTML。
试过了,安装ansi2html包也无法解决问题,于是只有自己解码,重新优化报告内容了

编码转化

相关转化参考这篇【python笔记6-%u60A0和\u60a0类似unicode解码】

# coding:utf-8
# a是str类型
a = r"case/test_houtai.py::TestHouTai::()::test_aboutzenta[\u6350\u52a9\u6211\u4eec]"
print(type(a))
# 转码
print(a.encode("utf-8").decode("unicode_escape"))

运行结果

<class ‘str’>
case/test_houtai.py::TestHouTai:😦)::test_aboutzenta[捐助我们]

pytest-html报告优化

源码地址【https://github.com/pytest-dev/pytest-html/blob/master/pytest_html/plugin.py】

Test这一列显示的内容是用例的nodeid,nodeid获取方法从源码可以看出是通过report.nodeid获取到的

于是我们可以在conftest.py里面新增一列,重新命名Test_nodeid,然后删除原有的Test列,具体参考前面一篇内容【pytest文档20-pytest-html报告优化(添加Description)】

from datetime import datetime
from py.xml import html
import pytest@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):"""当测试失败的时候,自动截图,展示到html报告中:param item:"""pytest_html = item.config.pluginmanager.getplugin('html')outcome = yieldreport = outcome.get_result()extra = getattr(report, 'extra', [])if report.when == 'call' or report.when == "setup":xfail = hasattr(report, 'wasxfail')if (report.skipped and xfail) or (report.failed and not xfail):file_name = report.nodeid.replace("::", "_")+".png"screen_img = _capture_screenshot()if file_name:html = '<div><img src="https://img-blog.csdnimg.cn/2022010705471030324.png" alt="screenshot" style="width:600px;height:300px;" ' \'onclick="window.open(this.src)" align="right"/></div>' % screen_imgextra.append(pytest_html.extras.html(html))report.extra = extrareport.description = str(item.function.__doc__)report.nodeid = report.nodeid.encode("utf-8").decode("unicode_escape")@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):cells.insert(1, html.th('Description'))cells.insert(2, html.th('Test_nodeid'))# cells.insert(1, html.th('Time', class_='sortable time', col='time'))cells.pop(2)@pytest.mark.optionalhook
def pytest_html_results_table_row(report, cells):cells.insert(1, html.td(report.description))cells.insert(2, html.td(report.nodeid))# cells.insert(1, html.td(datetime.utcnow(), class_='col-time'))cells.pop(2)

结果展示

修改之后结果展示如下


作者:上海-悠悠 QQ交流群:874033608

也可以关注下我的个人公众号:yoyoketang


http://www.ppmy.cn/news/172597.html

相关文章

【JZOJ6350】考试(test)

description analysis 对于\(n0\)的点&#xff0c;直接模拟就好了状压\(DP\)&#xff0c;设\(f[i][j][S]\)表示到第\(i\)题、连续\(GG\)了\(j\)题、喝的饮料集合为\(S\)的最大答案由于一题可以喝多瓶饮料所以转移需要枚举\(S\)的子集\(SS\)来转移然后转移比较显然但是细节恶心我…

Always Online hdu 6350

ps&#xff1a;今天真是石乐志&#xff0c;改了一下午bug&#xff0c;结果是忘了排序。。。。。。。。。。这题姿势较多&#xff0c;坑点就一个。 题解&#xff1a;有个结论&#xff0c;任意两点之间如果至多存在两条不相交路径&#xff0c;那么每一条边至多出现在一个环中&…

快狗打车开启招股:奇瑞、广发为基石,二者合计认购6350万美元

6月14日&#xff0c;快狗打车&#xff08;HK:02246&#xff09;在港交所发布公告&#xff0c;拟全球发售3120万股股份&#xff0c;其中香港发售股份312万股&#xff0c;国际发售股份2808万股&#xff0c;另有15%超额配股权。发售价将为每股发售股份21.5港元&#xff0c;预期股份…

hdu6350 /// tarjan+并查集+组合+最大流思想

题目大意&#xff1a; 给定n个点 m条边没有重边的仙人掌图&#xff08;没有一条边会同时存在与两个环 也就是环都是相互独立的&#xff09; 求任意两点间 i^j^maxflow(i,j)的总和 maxflow为两点间最大流 题解&#xff1a;https://blog.csdn.net/du_lun/article/details/8161062…

hdu - 6350

Topic 题目链接 Always Online Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 208 Accepted Submission(s): 66 Problem Description Wayne is an administrator of some metropolitan area network. The n…

HDU 6350 Always Online——仙人掌图

思路&#xff1a;把每个环的最小边去掉&#xff0c;加在环的其他边上&#xff0c;然后并查集跑一下就可以&#xff0c;跑的时候维护一下某位为1的点有多少个 #include <cstdio> #include <vector> #include <iostream> #include <algorithm> u…

HDU 6350 Always Online (仙人掌图,最大流)

传送门 这道题真的是坑&#xff0c;竟然用ull&#xff0c;ll都会爆。 首先这是一个仙人掌图。题意让求任意两点最大流&#xff0c;再进行异或。先说最大流&#xff0c;对于环上任意两点最大流&#xff0c;就是两条路径最小的边和&#xff0c;这就等效于求出环中最小的边&…

MTK Android5.1 单独调整主副麦的模拟增益PGA(MT6350_PMIC)

MTK Android5.1 单独调整主副麦的模拟增益PGA&#xff08;MT6350_PMIC&#xff09; 项目使用副麦消噪&#xff0c;但是副麦增益太小&#xff0c;需要单独修改副麦增益&#xff0c;使用工程模式APP和Audio Tuning Tool调整的MIC的Level4的值&#xff0c;都会同时调整主麦和副麦…