首页 前端知识 pytest-html插件配置生成新的HTML测试报告

pytest-html插件配置生成新的HTML测试报告

2024-03-15 10:03:13 前端知识 前端哥 758 472 我要收藏

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.css
    body {
        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")



转载请注明出处或者链接地址:https://www.qianduange.cn//article/3812.html
标签
mysqlpytest
评论
会员中心 联系我 留言建议 回顶部
复制成功!