当我们运行完我们的测试用例后,需要一个结果展示,那就是测试报告。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是python的一种单元测试框架,能够极大地提高自动化测试的效率,相较于unittest框架,Pytest使用起来更简洁,效率更高。就本人来使用体验来说,Pytest的自定义前/后置及数据传参两大功能是自动化测试不可或缺的。今天介绍一下pytest-HTML这个插件,并通过该插件将测试结果可视化。
安装:
以下是最为简单的一个结构,大家可做参考,主要为大家能够理解并运用Pytest-Html测试报告,下边做详细介绍。
以下是最为原始的html报告,其实在我们实际工作中,部分环境信息不一定要在报告中详细提现,可以适当增减;links列没有用到,可以删除;一般来说还可以添加一个测试用例的描述,大家学到后边就可以理解了~
接下来就开始定制化Pytest-Html,所有内容均需要在conftest.py中配置。
首先引入相关包
import pytest
from py.xml import html
def pytest_configure(config):#修改Environment展示信息
#添加项目名称
config._metadata["项目名称"] = "HTML封装测试"
#删除JAVA_HOME
config._metadata.pop("JAVA_HOME")
#删除Plugins
config._metadata.pop("Plugins")
def pytest_html_results_summary(prefix):
'''Summary部分在此设置'''
prefix.extend([html.p("测试开发组:尹煜")])
这是定制化中较为重要及复杂的部分,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__)
输出测试报告的前提当然是存在测试用例,而且命名需符合Pytest用例设计规范(①文件名必须test_开头,如:test_pytest_demo1.py、②类必须Test开头、③方法名必须test_开头)。
下边三个用例仅供测试html报告使用,假如正常输出报告,应该是2成功+1失败。
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,"断言失败"
此文件可以当作执行全部用例的入口,同时也可写入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() #可执行输出报告操作
最后在run.py文件执行run_main()函数后,以实时日期作为文件名的html测试报告便会自动生成了。
进入2022_04_06_20.html文件后会发现是html格式,因此我们可以点击右上角熟悉的浏览器进行查看,笔者选择了Edge浏览器。
下边就是正式的html测试报告,红方框内就是html定制化后的结果,是否合理了许多,通过,圆框内所展示的测试用例通过情况也完全符合预期结果。
本文不同于新手教程,可能需要大家具备部分测试框架基础,然后大家如果有疑问都可以评论提出,最后有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。