【测试开发】Pytest—Html测试报告定制及封装

当我们运行完我们的测试用例后,需要一个结果展示,那就是测试报告。Pytest作为一个强大的第三方库,也提供了输出测试报告的插件,比如Html、Allure等,本文对Pytest-Html进行探讨学习。【注:本文全过程基于IDE Pycharm 虚拟开发环境】

目录

一、Pytest-Html介绍及安装

二、项目详情

1、 定制化Pytest-Html(conftest.py)

1.1、环境信息精简

1.2、添加Summary展示的信息

1.3、增加用例描述和去除link列

2、测试用例(test_html.py)

3、测试用例运行入口(run.py)

三、Html测试报告输出

1、执行run.py文件

2、查看html测试报告

总结


一、Pytest-Html介绍及安装

Pytest是python的一种单元测试框架,能够极大地提高自动化测试的效率,相较于unittest框架,Pytest使用起来更简洁,效率更高。就本人来使用体验来说,Pytest的自定义前/后置及数据传参两大功能是自动化测试不可或缺的。今天介绍一下pytest-HTML这个插件,并通过该插件将测试结果可视化。

安装:

  • 当前环境:python 3.6.8
  • 前提条件:pytest (!=6.0.0,>=5.0)、pytest==5.4.3
  • 安装方式:pip install pytest-html==2.1.1 终端安装指定版本,3.0以上有兼容性问题

二、项目详情

以下是最为简单的一个结构,大家可做参考,主要为大家能够理解并运用Pytest-Html测试报告,下边做详细介绍。

【测试开发】Pytest—Html测试报告定制及封装_第1张图片

1、 定制化Pytest-Html(conftest.py)

以下是最为原始的html报告,其实在我们实际工作中,部分环境信息不一定要在报告中详细提现,可以适当增减;links列没有用到,可以删除;一般来说还可以添加一个测试用例的描述,大家学到后边就可以理解了~

【测试开发】Pytest—Html测试报告定制及封装_第2张图片

接下来就开始定制化Pytest-Html,所有内容均需要在conftest.py中配置。

首先引入相关包

import pytest
from py.xml import html

1.1、环境信息精简

def pytest_configure(config):#修改Environment展示信息
    #添加项目名称
    config._metadata["项目名称"] = "HTML封装测试"
    #删除JAVA_HOME
    config._metadata.pop("JAVA_HOME")
    #删除Plugins
    config._metadata.pop("Plugins")

1.2、添加Summary展示的信息

def pytest_html_results_summary(prefix):
    '''Summary部分在此设置'''
    prefix.extend([html.p("测试开发组:尹煜")])

1.3、增加用例描述和去除link列

这是定制化中较为重要及复杂的部分,description取值就是测试用例下的解释行,参考3.2。

def pytest_html_results_table_header(cells):
    cells.insert(1,html.th('Description'))#表头添加Description
    cells.pop()#删除link

def pytest_html_results_table_row(report,cells):
    if hasattr(report,'description'): #判断对象是否包含对应的属性
        cells.insert(1,html.td(report.description))#表头对应的内容
        cells.pop()
    else:
        print("!!!",report.longreprtext)

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):  #description取值为用例说明'''doc'''
    outcome = yield
    report = outcome.get_result()
    report.description = str(item.function.__doc__)

2、测试用例(test_html.py)

输出测试报告的前提当然是存在测试用例,而且命名需符合Pytest用例设计规范(①文件名必须test_开头,如:test_pytest_demo1.py、②类必须Test开头、③方法名必须test_开头)。

下边三个用例仅供测试html报告使用,假如正常输出报告,应该是2成功+1失败。

  • 断言(assert+表达式),断言验证操作是否执行成功,相当于功能测试用例中的预期结果
class TestDemo():

    def test_01(self):
        '''测试加法功能一'''
        print('测试加法功能一开始')
        assert 3+4==7,"断言失败"

    def test_02(self):
        '''测试加法功能二'''
        print('测试加法功能二开始')
        assert 3+4==8,"断言失败"

    def test_03(self):
        '''测试加法功能三'''
        print('测试加法功能三开始')
        assert 4+4==8,"断言失败"

3、测试用例运行入口(run.py)

此文件可以当作执行全部用例的入口,同时也可写入pytest命令行方式,直接在pycharm中执行输出报告,后续也方便Jenkins等持续集成工具的调用。

import os
import time
import pytest

def run_main():

    #测试用例文件路径——参考具体项目路径
    test_case = r'C:\Users\xiaowo\Desktop\TestHtml\test_html.py'
    #html报告命名
    name_html = time.strftime('%Y_%m_%d_%H', time.localtime(time.time())) + '.html'
    #html报告输出路径——参考具体项目路径
    report_path = os.path.join(r'C:\Users\xiaowo\Desktop\TestHtml',name_html)
    #通过python代码执行pytest命令行方式
    pytest.main(['-v', '--html={}'.format(report_path), '--self-contained-html', test_case])

if __name__ == "__main__":
    run_main() #可执行输出报告操作

三、Html测试报告输出

1、执行run.py文件

最后在run.py文件执行run_main()函数后,以实时日期作为文件名的html测试报告便会自动生成了。

【测试开发】Pytest—Html测试报告定制及封装_第3张图片

2、查看html测试报告

进入2022_04_06_20.html文件后会发现是html格式,因此我们可以点击右上角熟悉的浏览器进行查看,笔者选择了Edge浏览器。

【测试开发】Pytest—Html测试报告定制及封装_第4张图片

 下边就是正式的html测试报告,红方框内就是html定制化后的结果,是否合理了许多,通过,圆框内所展示的测试用例通过情况也完全符合预期结果。

【测试开发】Pytest—Html测试报告定制及封装_第5张图片


总结

本文不同于新手教程,可能需要大家具备部分测试框架基础,然后大家如果有疑问都可以评论提出,最后有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

你可能感兴趣的:(测试开发,python,html,测试工具)