首页 > 其他分享 >Pytest单元测试报告用例标题中文名称怎么显示(转载)

Pytest单元测试报告用例标题中文名称怎么显示(转载)

时间:2023-05-20 18:13:25浏览次数:53  
标签:__ item 单元测试 pytest nodeid 用例 Pytest html

  背景   基础不牢,地动山摇。在开发编程一途,尤为重要。   有python同学喜欢使用pytest框架实现接口自动化测试方案,在使用参数化过程中,无论是控制台还是测试报告中都没有展示用例名称(中文),而是参数化过程的参数顺序,如下图所示:   从报告效果上看,存在不知道fail的用例是哪个用例的问题,即使知道是第多少位的用例,但是也要在用例文件中快速找到用例,其难度不小!   实际期望的结果是要知道参数化过程的每次请求是哪个接口(用例描述),如下:   但是,中文名称在报告中很不友好的展示了乱码,这是后续需要解决的!   先看案例   yaml用例文件demo如下;其实在写入yaml文件使用safe_dump可以将中文正确写入。   - basePath: /prd     host: 192.168.5.160:31081     params:     - Authorization: null       code: '6000000000'       codeType: '31'       name: "\u539F\u6CB9\u5916\u8F93\u6CF5P-2001A"     path: /equipment/getEquipmentType     summary: "\u4E3B\u8981\u8BBE\u5907\u8FD0\u884C\u72B6\u6001--\u83B7\u53D6\u8BBE\u5907\       \u8FD0\u884C\u5217\u8868--\u4E0B\u62C9\u6846"   - basePath: /prd     host: 192.168.5.160:31081     params:     - Authorization: null       code: '2001001000'       end_time: '2021-07-21'       start_time: '2021-07-21'       type: '1'     path: /DynamicTracking/Personneldynamic/terminal/echartData     summary: "\u751F\u4EA7\u52A8\u6001\u8DDF\u8E2A-\u4EBA\u5458\u52A8\u6001-\u7EC8\u7AEF\       -\u56FE\u8868\u7EDF\u8BA1\u6570\u636E"     测试代码   这里需要掌握@pytest.mark.parametrize装饰器的用法,包括其中的参数。   不太正确的用例代码是这样的,以为title会在html报告中展示,结果并不是:   with open("datas.yaml","r",encoding="utf-8") as pf:       datas = yaml.load(pf, Loader=yaml.FullLoader)          class Test():              @pytest.mark.parametrize("da",datas)        def test_1(self,da):           title = da.get("summary")           pass   if __name__ == '__main__':       pytest.main(['--html',"sss.html"])         @pytest.mark.parametrize装饰器的ids参数是个字符串元素的列表,即pytest生成用例的title:   with open("datas.yaml","r",encoding="utf-8") as pf:       datas = yaml.load(pf, Loader=yaml.FullLoader)          class Test():              @pytest.mark.parametrize("da",datas,ids=[i.get("summary") for i in datas])        def test_1(self,da):           # title = da.get("summary") 不需要这样操作           pass   if __name__ == '__main__':       pytest.main(['--html',"sss.html"])         如何在测试报告的标题列展示中文用例名称不乱吗?   找百度解决   千篇一律:就算是错误的解决方案,都被网络传至各个论坛;结果就是导致用户不断在尝试错误的解决方案。   两个办法其一:根路径conftest.py新增如下代码:

"""解决pytest-html报告中文乱码问题,避免修改pytest-html/plugi.py源码"""
def pytest_collection_modifyitems(items):
    for item in items:
        item.name = item.name.encode('unicode-escape').decode('utf-8')
        item._nodeid = item.nodeid.encode('unicode-escape').decode('utf-8')

 

    网络错误的写法如下,完全将顺序写反:   item.name = item.name.encode('utf-8').decode('unicode-escape')   item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')     两个办法其二:修改pytest-html/plugin.py源码:   修改pytest-html/plugin.py源码,找到class TestResult:注释#self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape");新增self.test_id = report.nodeid   从源码中可以看出,原来已经有self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape");它也是错的。   class TestResult:       def __init__(self, outcome, report, logfile, config):           # self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")           # 新增一行           self.test_id = report.nodeid           if getattr(report, "when", "call") != "call":               self.test_id = "::".join([report.nodeid, report.when])     allure报告却没有pytest-html的问题     总结   上面的几个问题没有多余的解释,就是一顿操作猛如虎!但是需要你心细、胆大怀疑一切可能的错误,不然会陷入错误的死循环。谁也没有解释为什么要这么写,只能靠自己去读代码,理解作者的意图!   pytest框架是真的很强大,在组织测试用例和生成测试报告方面,它的诸多装饰器功能强大的无与伦比;这也是考验使用者的基本功扎不扎实。题主也是一边试错一边学习pytest,每有会意不可言传!

标签:__,item,单元测试,pytest,nodeid,用例,Pytest,html
From: https://www.cnblogs.com/gezirui/p/17417568.html

相关文章

  • pytest中,fixture的scope可以设置的级别
    function:默认值,表示fixture将在测试函数被调用时执行,并且它们每个测试函数都会运行一次。@pytest.fixture()defmy_fixture():#setupcodehereyield#teardowncodehereclass:表示fixture将在类内所有测试方法之前和之后执行。一个类有多个测试方法,则......
  • 测试工程师都是怎么写测试用例的?
    ​很多人不知道写测试用例有什么用,而仅仅是像工具人一样,在每次提测之前,把测试用例照着需求文档抄一遍,仿佛像是走个过场。开发提测之后,就照着测试用例点点点,可能一天就走完用例了,开发代码写得真好,测试用例执行完毕都没有测出bug,然后美其名曰:测试完了,达到上线标准。测完之后,测试用......
  • SpringBoot单元测试只${spring.profiles.active}异常
    在使用SpringBoot进行单元测试时,如果遇到「couldnotresolveplaceholder'spring.profiles.active'」的错误提示,通常是因为你在测试用例中使用了@ActiveProfiles注解来激活某些特定的配置文件,但是你的项目中并没有这些指定的配置文件。为了解决这个问题,你需要检查你的测试......
  • 功能测试用例模板
    功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。在功能测试中,注意的检测重点包括:界面操作是否符合用户习惯:测试人员要确保软件界面的操作符合用户的使用习惯,如按钮的位置、字体大小、颜色等是否合适,操作是否简单、方便、快捷。......
  • Pytest根据命令行参数使用动态数据进行参数话数据驱动
    Python中有一个重要的特性是,装饰器、类属性、模块变量都是模块加载时立即执行的。因此在使用@pytest.mark.parametrize进行参数话的时候,数据一般是确定的,如下例:importpytestDATA=["a.txt","b.txt","c.txt",]@pytest.mark.parametrize('filepath',DATA)......
  • Pytest生成allure报告
    allure官网https://github.com/allure-framework/allure2/releases1. 安装allure-pytest插件2.下载allure,下载之后解压,解压之后还要配置环境变量(环境变量path下加bin路径)3.验证allure是否安装成功:dos中验证: allure--versionpytest中验证:allure--version(如果失败重启pyte......
  • 关于测试用例的步骤和预期结果的看法
    一、步骤:1)操作步骤中的对象要具体而且是唯一的,后台的配置可以不需要给出全路径,但是文件或者操作页面的描述要清晰,唯一,且没有歧义举例:a、修改后台xxx模块的XXX.conf配置文件,修改后重启,步骤中可以不用给出配置文件的路径,但是必须说明是具体的哪个文件,不能只是说修改后台配置  ......
  • Python 单元测试:assertTrue 和assertFalse 的真假
    导读Lightbot在这篇文章中,我们将介绍单元测试的布尔断言方法assertTrue和assertFalse与身份断言assertIs之间的区别。定义下面是目前单元测试模块文档中关于assertTrue和assertFalse的说明,代码进行了高亮:assertTrue(expr,msg=None)assertFalse(expr,msg=No......
  • 测试用例标题
    一、编写测试用例时,用例的标题是用例一个比包含的环节,一个好的用例标题可以让人一目了然的知道需要测试的点,测试的功能是什么,这样更有助于用例的评审和让执行者执行用例,可以分以下几种情况以下例子都是已上传文件到系统简单说明,因子有文件大小、格式、系统类型(这里只是简单的举例......
  • pytest的执行顺序
    一、相关库推荐rich打印更好loguru日志库二、一个py.文件setupmodule(最优先运行的,不能放在class内部,模块级别)class:setup_class(类级别)setup_method(方法级别)teardown_methodtest_atest_bteardown_classte......