1、pytest-html 安装
pytest-html
是一个 pytest 插件,用于生成 HTML 格式的测试报告。它可以将 pytest 运行的测试结果以 HTML 文件的形式输出,使测试报告更加直观易读
当前环境: python版本为:Python 3.9.11
下载 pytest-html
pip3 install pytest-html
2、在当前目录下生成测试报告
pytest --html=report.html
3、在命令行输出
if __name__ == '__main__':
pytest.main(["-s", "-v", "test_05.py","--html=report.html"])
4、打开测试报告
鼠标点击控制台下方链接
测试报告如下:
5、配置一个新的测试报告
使用 pytest-html
的 CSS 格式是为了提高生成的 HTML 测试报告的可读性和美观性。CSS(级联样式表)是一种用来表示HTML或XML文档的样式的语言,它允许你控制文档的外观,比如颜色、字体、布局等。当 pytest-html
生成 HTML 报告时,它包含一定的默认样式来使报告更加易读和吸引人。这些样式定义了如何显示测试结果的不同部分,例如:
- 成功、失败和跳过的测试 使用不同的颜色高亮,使用户能够一目了然地看到测试结果。
- 详细的测试步骤和错误信息 以清晰、易于阅读的格式呈现,帮助开发人员快速定位问题。
- 测试报告的整体布局,包括分隔线、边距和对齐方式,都旨在提高报告的可读性和专业度。
css文件如下:
文件名:report.cssbody { font-size: 16px; } h1 { text-align: center; color: #2084D9; font-size: 30px; } h2 { font-size: 24px; color: #2084D9; } a { color: #466AFF; } span { font-size: 20px; } #environment td { padding: 10px; } #results-table { font-size: 16px; } #results-table-head th{ font-size: 20px; background-color: #2084D9; color: #FFFFFF; } td { color: #000000; } #environment tbody tr td:nth-child(1){ background-color: #2084D9; color: #FFFFFF; font-weight:bold; font-size: 20px }
复制到tests目录下
-
把"--css=report.css", "--self-contained-html", "--capture=sys" 加入命令行
运行后,报告样式改变,查看报告如下:
6、在conftest.py增加一个函数,修改报告标题
def pytest_html_report_title(report):
report.title = "自动化测试报告"
测试报告-标题如下:
7、在conftest.py增加一个函数,增加 测试人
下载 py
pip install py
from py.xml import html def pytest_html_results_summary(prefix, summary, postfix): prefix.extend([html.p("测试人:tester")])
8、在conftest.py增加一个函数,增加Description 和 Time表格
def pytest_html_results_table_header(cells): """ 处理结果表的表头 """ # 往表格增加一列Description,并且给Description列增加排序 # 往表格增加一列Time,并且给Time列增加排序 cells.insert(1, html.th("执行时间", class_="sortable time", col="time")) cells.insert(2, html.th("用例描述", class_="sortable desc", col="desc")) # 移除表格最后一列 cells.pop()
测试报告如下:
9、在conftest.py增加一个函数,展示测试用例函数名和时间
def pytest_html_results_table_row(report, cells):
"""
处理结果表的行
"""
# 往列 Description插入每行的值
cells.insert(1, html.th(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), class_="col-time"))
cells.insert(2, html.th(report.description))
# 往列 Time 插入每行的值
cells.pop()
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
report.description = str(item.function.__doc__)
测试报告如下
10、在conftest.py增加一个函数,让状态为Passed的用例加上注释
def pytest_html_results_table_html(report, data):
if report.passed:
del data[:]
data.append("这条用例测试通过!")
测试报告如下
11、根据自身情况去掉标题栏
在conftest.py增加以下函数
@pytest.hookimpl(optionalhook=True)
def pytest_metadata(metadata):
metadata.pop("Platform", None)
metadata.pop("Packages", None)
metadata.pop("JAVA_HOME", None)
metadata.pop("Plugins", None)
12、配置标题栏的菜单名和值,在conftest.py增加下面2个函数
def pytest_configure(config): config.stash[metadata_key]["开始时间"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S") @pytest.hookimpl(tryfirst=True) def pytest_sessionfinish(session, exitstatus): session.config.stash[metadata_key]["项目名称"] = "测试项目" session.config.stash[metadata_key]["测试环境"] = "test" session.config.stash[metadata_key]["结束时间"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S") 测试报告如下:
13、conftest.py 整个文件
#!/user/bin/env python
# -*- coding:utf-8 -*-
import pytest
from py.xml import html
from datetime import datetime
from pytest_metadata.plugin import metadata_key
def pytest_html_report_title(report):
report.title = "自动化测试报告"
def pytest_html_results_summary(prefix):
prefix.extend([html.p("测试人:tester")])
def pytest_html_results_table_header(cells):
"""
处理结果表的表头
"""
# 往表格增加一列Description,并且给Description列增加排序
# 往表格增加一列Time,并且给Time列增加排序
cells.insert(1, html.th("执行时间", class_="sortable time", col="time"))
cells.insert(2, html.th("用例描述", class_="sortable desc", col="desc"))
# 移除表格最后一列
cells.pop()
def pytest_html_results_table_row(report, cells):
"""
处理结果表的行
"""
# 往列 Description插入每行的值
cells.insert(1, html.th(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), class_="col-time"))
cells.insert(2, html.th(report.description))
# 往列 Time 插入每行的值
cells.pop()
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
report.description = str(item.function.__doc__)
def pytest_html_results_table_html(report, data):
if report.passed:
del data[:]
data.append("这条用例测试通过!")
@pytest.hookimpl(optionalhook=True)
def pytest_metadata(metadata):
metadata.pop("Platform", None)
metadata.pop("Packages", None)
metadata.pop("JAVA_HOME", None)
metadata.pop("Plugins", None)
def pytest_configure(config):
config.stash[metadata_key]["开始时间"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@pytest.hookimpl(tryfirst=True)
def pytest_sessionfinish(session, exitstatus):
session.config.stash[metadata_key]["项目名称"] = "测试项目"
session.config.stash[metadata_key]["测试环境"] = "test"
session.config.stash[metadata_key]["结束时间"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")