快速生成清晰可视化的报告

Posted by comeyke on 07-15,2023

导语

我们日常测试中经常需要将测试结果/报告予以公示/推送,而一份清晰且可读性强的测试报告可以让人更快速的了解整个测试结果。在自动化测试过程中,能够快速生成清晰、全面、可视化的测试报告 (如 HTML 报告),无疑也是一项可观的效率提升。

目前主流的生成测试报告的第三方库(如:HTMLTestRunner、Allure 等)使用起来都各有利弊。本文介绍基于 unittestreport 框架快速生成清晰可视化的 HTML 测试报告方法,该框架同时兼顾 unittest 和 pytest 框架,支持多种报告风格样式切换,具备实用、美观、共享方便等特性。

unittestreport 简介

unittestreport 是基于 unittest 开发的的一个开源的功能扩展库。最初只是计划开发一个 unittest 生成 html 测试报告的模块,所以起名叫做 unittestreport。
unittestreport 在版本迭代中提供了越来越丰富的功能,目前已支持 HTML 报告生成/数据驱动/失败重运行/多线程并发/测试结果推送等功能。
使用过程中,可以直接通过 pip 安装 unittestreport:
unittest 框架:pip install unittestreport
pytest 框架:pip install pytest-testreport

try it

unittestreport 中封装了一个 TestRunner 类,用来代替 unittest 中的 TextTestRunner 执行测试用例,执行完测试用例之后会自动生成 HTML 测试报告。
用例执行过程遵循: 加载测试用例->创建测试程序->运行用例->生成报告过程。最简单的调用过程如下:
image-1697249895216
TestRunner 类创建测试报告时,可以指定参数自定义报告内容

  • suite:测试套件,测试用例集
  • filename:测试报告文件名称,缺省值:report.html
  • report_dir:测试报告存放路径,缺省值:./reports
  • tester:测试人员名称息,缺省值:测试员
  • desc:测试报告描述,缺省值:xx 项目测试生成的报告
  • title:测试报告标题,缺省值:测试报告
  • templates:生成测试报告的模板类型,缺省值:1,取值范围:[1,2,3]
    image-1697249809670
    unittestrepor 中通过指定不同的 templates 取值来设置测试报告模板,用以支持不同风格的测试报告样式:
  • 模板 1(templates =1)报告样式
  • image-1697248723655
  • 模板 2(templates =2)报告截图
    image-1697248861570
    模板统计的历史数据保存在 reports 目录下的 history.json 文件中,在获取报告数据方法 TestRunner.get_reports() 中通过调用方法_handle_history_data() 提取出历史数据:
    image-1697249588944
  • 模板 3(templates =3)报告截图
    该模板即为 BeautifulReport 报告样式
    image-1697249705964

高频功能

unittestreport 在数次版本迭代中逐步丰富了 unittest 框架原生不具备的但测试中经常需要或用到的功能(如:数据驱动、并行测试、结果推送等)。

数据驱动

数据驱动的目的是将测试数据和用例逻辑进行分离,提高代码重用率及用例的维护。
unittestreport.dataDriver 模块使用 ddt 进行数据驱动,支持 list/json/yaml 三种方式生成测试用例。
在实际使用过程中,需要通过@ddt装饰测试用例类对象,并在具体的用例方法中引用@list_data/@json_data/@yaml_data 进行驱动:
image-1697291958608

多线程运行&失败重跑

unittestreport 重新封装了 TestRunner 类,使用传参调用 TestRunner.run() 方法实现多线程运行和失败重跑机制

  • thread_count:指定运行用例时开启的线程数量
  • count:指定用例失败重跑次数
  • interval:指定每次重跑的时间间隔,秒
    image-1697247513827
    需要注意的是,unittestreport 中多线程并发执行时,为解决用例执行的顺序问题,默认以测试类为单位开启线程执行,即:
  • 同一个测试类中的用例,在执行的过程中执行的先后顺序能够得到保证
  • 不同的测试类在执行的过程中是一个并发执行状态,执行的先后顺序是不确定的

邮件推送

unittestreport 框架基于 SMTP 协议实现邮件发送,通过 TestRunner 类 send_email() 方法,执行完测试用例调用即可推送报告
image-1697248574052
image-1697248628298

结束语

本文基于 unittestreport 框架介绍了如何快速生成清晰可视化的 HTML 测试报告方法。