pytest生成简单自定义测试结果的html报告

目录
  • 简介
  • 生成报告
    • 生成报告效果如下
  • 修改报告
    • 修改 Environment
    • 修改 Results
    • 生成效果报告
  • 后记

简介

pytest-HTML 是一个插件,pytest 用于生成测试结果的 HTML 报告。

生成报告

先简单写个例子生成报告看看。

生成报告效果如下

此次主要是针对 Environment 和 Results 两部分进行修改配置,让列表部分展示的数据更清晰,增加和删减列数据。

修改报告

这里先介绍下 conftest.py 文件,主要作用如下:

  • 1 .存放你的 fixture 函数
  • 2.在里面写自己的本地插件

比如公共用例前置和后置部分,数据清理都可以放在该文件里执行。

修改 Environment

主要分为增加配置或删除配置:

def pytest_configure(config):
    # 添加配置
    config._metadata["项目名称"] = "测试报告"
    # 删除配置
    config._metadata.pop("JAVA_HOME")
    config._metadata.pop("Plugins")
    config._metadata.pop("Packages")
    config._metadata.pop("Platform")

修改 Results

从上面生成的报告列表中,看到主要分为下面几列数据:Result、Test、Links、Duration。这里面的数据其实可以看出都没有包含我们的测试数据,无法直观看出输入、输出结果。
做如下优化:

  • 1.删除 Test、Links 列
  • 2.增加几列分别展示参数化中的内容,如用例编号、输入、输出
  • 3.修改用例执行结果 show details 中内容,自定义展示内容

基于上述需求,要在报告中添加我们自己的测试数据展示,故需要添加一个全局变量在一个 case 执行过程中进行记录供调用。

创建全局变量:

# 定义一个全局变量,用于存储内容
global_data = {}
@pytest.fixture(scope="function")
def set_global_data():
    """
    设置全局变量,用于关联参数
    :return:
    """
    def _set_global_data(key, value):
        global_data[key] = value
    yield _set_global_data
    global_data.clear()

修改我们的用例函数,将测试数据加入到全局变量中。

@user2ize("data", case_list)
def test_case(data, set_global_data):
    set_global_data("id", data.get("id"))
    set_global_data("method", data.get("method"))
    set_global_data("case_input", data.get("case_input"))
    set_global_data("case_output", data.get("case_output"))
    try:
        assert data.get("case_input") == data.get("case_output")
    except AssertionError:
        set_global_data("error_step", "断言失败")
        raise

conftest.py 文件中增加和删除列。

@user3hook
def pytest_html_results_table_header(cells):
    """ 更改表头信息
    :param cells:
    :return:
    """
    cells.insert(1, html.th('用例ID', class_="sortable", col="id"))
    cells.insert(2, html.th('方法', class_="sortable", col="method"))
    cells.insert(3, html.th('输入', class_="sortable", col="case_input"))
    cells.insert(4, html.th('输出', class_="sortable", col="case_output"))
    cells.pop(-1)  # 删除link
    cells.pop(-2)  # 删除Test
@user4hook
def pytest_html_results_table_row(cells):
    """更改表中数据信息"""
    cells.insert(1, html.td(global_data.get("id")))
    cells.insert(2, html.td(global_data.get("method")))
    cells.insert(3, html.td(global_data.get("case_input")))
    cells.insert(4, html.td(global_data.get("case_output")))
    cells.pop(-1)  # 删除link
    cells.pop(-2)  # 删除Test

conftest.py 文件中修改执行结果 show details 内容。

@user5hook
def pytest_html_results_table_html(report, data):
    if report.failed:
        del data[:]
        data.append(html.span(f"失败步骤:{global_data.get('error_step')}\n输出结果:{global_data.get('case_output')}",
                              class_='fail log'))
    elif report.passed:
        del data[:]
        data.append(html.div(f"输出结果:{global_data.get('case_output')}", class_='success log'))

生成效果报告

可以看到现在生成的报告内容就可以清晰看到测试数据,和我们的用例数据关联上了。

后记

当前只是简单的对报告展示的数据进行了更改,感兴趣可以查看官方文档学习

https://docs.pytest.org/en/latest/reference/reference.html#hooks

以上就是pytest生成简单自定义测试结果html报告的详细内容,更多关于pytest生成自定义测试html的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解用Pytest+Allure生成漂亮的HTML图形化测试报告

    对于软件测试工作来说,测试报告是非常重要的工作产出.一个漂亮.清晰.格式规范.内容完整的测试报告,既能最大化我们的测试工作产出,又能够减少开发人员和测试人员的沟通成本. 本篇文章将介绍如何使用开源的测试报告生成框架Allure生成规范.格式统一.美观的测试报告. 通过这篇文章的介绍,你将能够: 将Allure与Pytest测试框架相结合: 如何定制化测试报告内容 执行测试之后,生成Allure格式的测试报告. 如何与Jenkins集成. 将测试环境信息展示到测试报告中. 1.Allure测试报告

  • Python 测试框架unittest和pytest的优劣

    一.Unittest Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架. Unittest支持自动化测试,测试用例的初始化.关闭和测试用例的聚合等功能,它有一个很重要的特性:它是通过类(class)的方式,将测试用例组织在一起. 示例: 运行结果 注:unittest有一个关联模块unittest2,但unittest2仅适用于Pytho

  • 自动化测试Pytest单元测试框架的基本介绍

    目录 一.Pytest概念 二.Pytest特点 三.Pytest安装 安装pytest命令: 查看pytest版本: 安装生成测试结果的HTML报告pytest-html 四.Pycharm配置Pytest pycharm依次选择 配置用例脚本运行模式. 菜单栏 配置项目路径 五.Pytest用例运行规则 六. Pytest简单使用 一.Pytest概念 Pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架

  • Pytest单元测试框架生成HTML测试报告及优化的步骤

    目录 一.安装插件 IDE中安装 命令行安装 二.生成html报告 三.使用小技巧 指定路径 报告独立 四.报告优化 一.安装插件 要生成html类型的报告,需要使用pytest-html插件,可以在IDE中安装,也可以在命令行中安装.插件安装 的位置涉及到不同项目的使用,这里不再详述,想了解的可自行查询. IDE中安装 在File>Settings>Project>Project Interpreter界面,点击“ + ”搜索pytest-html即可进行安装. 命令行安装 建议先在命

  • pytest生成简单自定义测试结果的html报告

    目录 简介 生成报告 生成报告效果如下 修改报告 修改 Environment 修改 Results 生成效果报告 后记 简介 pytest-HTML 是一个插件,pytest 用于生成测试结果的 HTML 报告. 生成报告 先简单写个例子生成报告看看. 生成报告效果如下 此次主要是针对 Environment 和 Results 两部分进行修改配置,让列表部分展示的数据更清晰,增加和删减列数据. 修改报告 这里先介绍下 conftest.py 文件,主要作用如下: 1 .存放你的 fixtur

  • 基于PHP生成简单的验证码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: for($i=0;$i<5;$i++){ $rand .= dechex(rand(1,15)); // 随机数16进制 1-F 生成5个 } $im = imagecreatetruecolor(100,30); // 验证码的大小(画板) $bg = imagecolorallocate($im, 0,0,0); // 背景颜色 for($i<0;$i<100;$i++){ $color_dian = imagecolorallo

  • jQuery简单自定义图片轮播插件及用法示例

    本文实例讲述了jQuery简单自定义图片轮播插件及用法.分享给大家供大家参考,具体如下: 经常使用别人的插件,现在自己写一个,纪念一下. jQuery.banner.js: /* * banner 0.1 * 使用banner 实现图片定时切换 鼠标经过停止动画 * 鼠标离开,继续动画 */ ;(function($){ $.fn.banner =function(options){ //各种属性和参数 var defaults ={ picWidth:"1000", picHeigh

  • JavaScript生成简单等差数列

    题目很简单,最简单的办法就是使用for循环 let arr = [] for (let i = 0; i < b - a + 1; i++) { arr.push(i + a) } return arr 进阶 之后再想起来时感觉之前的方法有点愚蠢,遂又想出这些方法 数组空位 join()和toString()会将空位视为undefined(字符串形式): // 拼接 > 分割 > map Array(b - a + 1).join(' ').split(' ').map((e, i) =

  • 使用form-create动态生成vue自定义组件和嵌套表单组件

    使用form-create动态生成vue自定义组件和嵌套表单组件 [github]| [说明文档] maker.create 通过建立一个虚拟 DOM的方式生成自定义组件 生成 Maker let rule = [ formCreate.maker.create('i-button').props({ type:'primary', field:'btn' loading:true }) ] $f = formCreate.create(rule); 上面的代码是通过maker生成器动态生成一个

  • python+opencv3生成一个自定义纯色图教程

    一. 图像在计算机中存储为矩阵.矩阵上一个点表示一个像素.若矩阵由一系列0-255的整数值组成,则表现为灰度图.便于理解,以下贴出代码: import cv2 import numpy as np img = np.ones((3,3),dtype=np.uint8)#random.random()方法后面不能加数据类型 #img = np.random.random((3,3)) #生成随机数都是小数无法转化颜色,无法调用cv2.cvtColor函数 img[0,0]=100 img[0,1]

  • JS实现简单打字测试

    本文实例为大家分享了JS实现简单打字测试的具体代码,供大家参考,具体内容如下 需求:实现以下的功能 1.有三个小方块,分别用来当前输入的错误数量.打字的时间和当前的正确率. 2.下方是用来显示测试句子的容器. 3.最后是输入框 具体思路: 点击输入文本区域时,开始测试,会根据用户输入来统计当前的错误数和正确率,时间会减少.当输完整段句子时,会自动更新下一段句子.当时间为0时,游戏结束,文本框不能再输入,然后会统计打字速度. 具体代码如下: Html部分 <!DOCTYPE html> <

  • Android简单自定义音乐波动特效图

    本文实例为大家分享了Android简单自定义音乐波动特效图的具体代码,供大家参考,具体内容如下 最终效果: 思路:就是绘制一个不断变化高度的矩形或者是宽虚线 1.自定义属性: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="musicPlayViewAttr"> <!--指针颜色--> <a

  • python3+telnetlib实现简单自动测试示例详解

    目录 1 telnetlib介绍 1.1 简介 1.2 库常用函数及使用 1.2.1 建立连接 1.2.2 发送命令 1.2.3 读取返回数据 1.2.4 关闭连接 1.3 使用示例 2 自动测试 1 telnetlib介绍 1.1 简介 官方介绍文档:telnetlib – Telnet 客户端 - Python 3.9.6 文档 telnetlib 模块提供一个实现Telnet协议的类 Telnet. 1.2 库常用函数及使用 1.2.1 建立连接 建立连接有两种方式:1.实例化函数的时候,

  • Pytest执行unittest TestSuite(测试套件)的实现方法

    前言 TestSuite一直是unittest的灵活与精髓之处,在繁多的测试用例中,可以任意挑选和组合各种用例集,比如smoke用例集.level1用例集.webtest用例集.bug回归用例集等等,当然这些TestSuite需要我们提前定义好,并把用例加载进去.Pytest采取的是完全不同的用例组织和运行方式.用例的运行主要基于名称匹配:组织则基于用例目录,用例命名格式及用例mark标签, 这种方式省去了麻烦的提前定义TestSuite及加载用例的过程,执行时通过路径/用例名格式/不同的标签组

随机推荐