Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 511|回复: 0

Python2--Pytest_html测试报告优化(解决中文输出问题)

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-7-8 05:53:43 | 显示全部楼层 |阅读模式

    1、报告的输出:

    pytest.main(["-s","Auto_test.py","--html=Result_test.html"])

    2、此时输出的报告为英文版,如果需要在用例中加上中文描述,需要参数化的修饰器中,添加参数ids,举例如下:

    @pytest.mark.parametrize("devtype,mac,dev_servaddr",dev_method_data,ids = [u"中文描述"])

    3、此时直接执行用例,输出的报告,该字段显示为\x....,查看编码方式为ascii编码

    4、为了将中文显示出来,需要修改编码方式,尝试在html下的plugs.py修改report.nodeid,发现encode("utf-8")编码无效,编码后还是ascii

    5、根据官方给出的文档,发现可以在conftest.py文件中,自定义添加删除修改列内容,于是创建conftest.py,源码如下

    #coding=utf-8
    from datetime import datetime
    from py.xml import html
    import pytest
    import re
    import sys reload(sys) sys.setdefaultencoding('utf8')
    
    @pytest.mark.hookwrapper
    def pytest_runtest_makereport(item):
        '''
        修改Description里面的内容,增加中文显示
        '''
        # pytest_html = item.config.pluginmanager.getplugin('html')
        outcome = yield
        report = outcome.get_result()
        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.nodeid))
        # cells.insert(2, html.td(report.nodeid))
        # cells.insert(1, html.td(datetime.utcnow(), class_='col-time'))
        cells.pop(2)

    6、注意以上使用sys包,修改默认编码方式为utf8

    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf8')

    7、进一步优化,因为输出的report.nodeid包含了文件名,测试类名,测试函数名,为了更直观的展示用例描述,以下可以将描述输出进一步优化

    #coding=utf-8
    from datetime import datetime
    from py.xml import html
    import pytest
    import re
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    @pytest.mark.hookwrapper
    def pytest_runtest_makereport(item):
        '''
        修改Description里面的内容,增加中文显示
        '''
        # pytest_html = item.config.pluginmanager.getplugin('html')
        outcome = yield
        report = outcome.get_result()
        _description = ""
        report.nodeid = report.nodeid.encode("utf-8").decode("unicode_escape")
        for i in range(len(report.nodeid)):
            if report.nodeid == "[":
                _description = report.nodeid[i+1:-1]
        report._nodeid = _description
    
    @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._nodeid))
        # cells.insert(2, html.td(report.nodeid))
        # cells.insert(1, html.td(datetime.utcnow(), class_='col-time'))
        cells.pop(2)

    8、最后pytest_html报告展示中文,效果如下:

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-15 01:45 , Processed in 7.044342 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表