暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pytest系列——pytest-html生成测试报告

迅捷小莫 2021-09-02
4703

Pytest

在使用pytest做一些自动化测试的时候,我们经常需要一些测试报告来做测试统计,那么使用pytest如何生成测试报告呢?pytest给我们提供了很多的第三方的测试报告插件,常见的有:

pytest-html

allure-pytest

pytest-tmreport

那么本篇文章我们就介绍第一个最简单的测试报告(当然也是最丑的!)pytest-html

01

pytest-html的安装

非常简单,我们直接使用pip安装即可:

    pip install pytest-html


    02

    pytest-html生成测试报告

    命令也是非常的简单:

      pytest --html 报告名称(后缀为.html)

      比如我们现在的项目结构是这个样子:

      我们有一个report文件夹专门来存放测试报告,那么我们在命令行输入:

        pytest --html report/report.html

        执行完毕后,可以看到report下面已经生成了测试报告,如下:

        可以看到,生成的文件不止是一个report.html文件,并且还有一个css样式文件同步生成了,这个主要是报告的一些样式会放在这里。那我们打开这个报告看下

        emm,虽然有点一言难尽,但是确实该有的都有了,可以看到最上面有环境的信息,有整体的测试汇总结果,详细的测试记录列表,日志等等,同时还有一些筛选项。但是,还是丑,哈哈再多的就不吐槽了,总结一下,还是能用的

        这里小提莫想提醒一下各位的,如果你想把这份测试报告发送邮件的话,一定要把这个样式文件和html一起发送出去,不然可能会变成下面这样(缺少样式文件):

        被领导看到的话,就十分的尴尬了。

        03

        解决中文乱码问题

        在使用的过程中,小提莫也发现了中文乱码的BUG, 比如我们的测试用例名称带有中文的时候(写UI自动化的时候经常会有):

          import pytest  # 导入pytest




          def test_测试用例1():
             assert 1 == 2




          def test_测试用例2():
             print("test_002 done")




          if __name__ == '__main__':  # 定义主函数
             pytest.main()

          然后还是用一下我们生成报告的命令,可以看到现在生成的测试报告是这样:

          这个经小提莫查看源码后发现 ,pytest-html中报告对乱码的处理存在一点问题,在源码的这里可以发现问题:

          我们其实不需要进行转换,把他修改一下:

            # self.test_id = report.nodeid.encode("utf-8").decode("unicode_escape")  #  修改前
            self.test_id = report.nodeid  # 修改后

            然后我们再试一下,现在好了:

            问题是解决了,但是可能有的小伙伴想问,哎呀,改源码多不优雅,多不好呀,有没有别的好办法呢?

            在这里小提莫再给提供一种不需要改源码的方法,利用conftest.py做处理,我们在conftest.py里加上一段代码即可:

              import pytest




              def pytest_collection_modifyitems(items):
                 """
                 修改用例名称中文乱码
                 :param items:
                 :return:
                 """
                 for item in items:
                     item.name = item.name.encode('unicode_escape').decode('utf-8')
                     item._nodeid = item.nodeid.encode('unicode_escape').decode('utf-8')

              小提莫也是推荐使用这一种方法~比较优雅哦。

              那么今天内容不多,快速掌握,后面的内容我们再看看其他好看的测试报告。

              see you later.

              扫码关注


              文章转载自迅捷小莫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论