当前位置: 首页 > news >正文

XtestRunner一个比较好用好看的生成测试报告的工具

XtestRunner

XtestRunner 是一款基于 Python 的测试报告生成工具,专为 unittest 和 pytest 框架设计,支持生成美观、详细的 HTML 测试报告,同时具备日志记录、截图嵌入、失败重跑等实用功能。以下是关于如何使用 XtestRunner 生成测试报告的详细指南:

一、XtestRunner 安装

首先需要通过 pip 安装 XtestRunner:

pip install XtestRunner

二、核心功能与优势

  • 美观的 HTML 报告:支持自定义标题、描述、LOGO,报告包含用例统计、详细日志、截图等信息。
  • 多框架支持:兼容 unittest 和 pytest 测试框架。
  • 截图嵌入:失败用例可自动嵌入截图(需手动调用截图方法)。
  • 日志集成:自动记录测试过程中的日志,便于问题定位。
  • 失败重跑:支持失败用例重跑,提高报告准确性。
  • 邮件发送:可将生成的报告通过邮件发送给指定接收人。

三、使用方法(分框架示例)

1. 基于 unittest 框架

步骤如下:

  1. 编写 unittest 测试用例;
  2. 使用 XtestRunner 的 HTMLTestRunner 作为测试运行器;
  3. 运行用例并生成报告。

示例代码

import unittest

from XtestRunner import HTMLTestRunner

class TestDemo(unittest.TestCase):

    """测试用例示例"""

    def test_success(self):

        """成功的用例"""

        self.assertEqual(1 + 1, 2)

    

    def test_failure(self):

        """失败的用例"""

        self.assertEqual(1 + 1, 3)

    

    def test_error(self):

        """出错的用例"""

        raise ValueError("自定义错误")

if __name__ == '__main__':

    # 加载用例

    suite = unittest.TestLoader().loadTestsFromTestCase(TestDemo)

    

    # 生成报告

    with open('report.html', 'wb') as f:

        runner = HTMLTestRunner(

            stream=f,

            title="测试报告标题",

            description="报告描述:这是一个示例报告",

            tester="测试人员姓名"

        )

        runner.run(suite)

2. 基于 pytest 框架

需结合 pytest 的插件机制,通过 pytest.main() 调用 XtestRunner 生成报告。

示例代码

import pytest

from XtestRunner import pytest_runner

def test_success():

    """成功的用例"""

    assert 1 + 1 == 2

def test_failure():

    """失败的用例"""

    assert 1 + 1 == 3

def test_error():

    """出错的用例"""

    raise ValueError("自定义错误")

if __name__ == '__main__':

    pytest.main([

        __file__,

        '-s', '-v',  # 显示详细日志

        '--runner=HTMLTestRunner',  # 指定运行器

        '--title=Pytest测试报告',

        '--description=使用pytest框架生成的报告',

        '--tester=测试员',

        '--report=report_pytest.html'  # 报告路径

    ])

四、高级功能配置

1. 嵌入截图(失败用例)

在 Web 自动化测试中,可在断言失败时截图并嵌入报告,需配合 save_screenshot() 方法:

from XtestRunner import HTMLTestRunner

import unittest

from selenium import webdriver  # 以Selenium为例

class TestWeb(unittest.TestCase):

    def setUp(self):

        self.driver = webdriver.Chrome()

    

    def test_screenshot(self):

        self.driver.get("https://www.baidu.com")

        try:

            self.assertEqual(self.driver.title, "错误标题")  # 故意失败

        except AssertionError:

            # 截图并嵌入报告

            self.driver.save_screenshot("screenshot.png")

            self.addFailureScreenshot("screenshot.png")  # 关键方法

            raise  # 抛出异常,确保用例标记为失败

    

    def tearDown(self):

        self.driver.quit()

if __name__ == '__main__':

    suite = unittest.TestLoader().loadTestsFromTestCase(TestWeb)

    with open('web_report.html', 'wb') as f:

        HTMLTestRunner(stream=f, title="Web测试报告").run(suite)

2. 失败重跑

通过 rerun 参数配置失败重跑次数(仅支持 pytest):

pytest.main([

    __file__,

    '--runner=HTMLTestRunner',

    '--report=report_rerun.html',

    '--rerun=2'  # 失败重跑2次

])

3. 发送邮件报告

生成报告后,可通过 Email 类发送邮件:

from XtestRunner import Email

# 配置邮件

email = Email(

    smtp_server="smtp.qq.com",  # 邮件服务器(如QQ邮箱为smtp.qq.com)

    smtp_port=465,  # 端口(SSL加密通常为465)

    smtp_user="your_email@qq.com",  # 发件人邮箱

    smtp_password="your_auth_code",  # 授权码(非密码)

    receiver=["recipient@example.com"],  # 收件人列表

    title="测试报告邮件",  # 邮件标题

    content="请查收测试报告",  # 邮件内容

    file_path="report.html"  # 附件(报告路径)

)

email.send()  # 发送邮件

五、报告解读

生成的 HTML 报告包含以下核心部分:

  • 概览:用例总数、通过 / 失败 / 错误数、通过率、测试时长。
  • 详细结果:每个用例的状态、运行时间、日志(失败用例显示错误堆栈)。
  • 截图区:失败用例的截图(如有配置)。
  • 环境信息:Python 版本、测试框架版本等。

通过以上配置,XtestRunner 可快速生成清晰、专业的测试报告,助力测试结果的分析与展示。更多细节可参考 XtestRunner 官方文档。

http://www.dtcms.com/a/304014.html

相关文章:

  • AI Agent推动搜索引擎优化自动化进程
  • python-网络编程
  • 【刷题】东方博宜 1503-排序 容器排序
  • 【数据结构】真题 2016
  • 怎么理解使用MQ解决分布式事务 -- 以kafka为例
  • ABP VNext + GraphQL Federation:跨微服务联合 Schema 分层
  • Java 课程,每天解读一个简单Java之判断101-200之间有多少个素数,并输出所有素数。
  • 如何制定项目计划?核心要点
  • 枚举中间位置高级篇
  • Apache Ignite 的对等类加载(Peer Class Loading, P2P Class Loading)机制
  • Qt windows 全屏弹幕工具
  • 【Golang】Go语言指针
  • 鱼皮项目简易版 RPC 框架开发(六)----最后的绝唱
  • Qt|槽函数耗时操作阻塞主界面问题
  • go标准库log模块学习笔记
  • spring cloud sentinel 动态规则配置
  • css3之三维变换详说
  • Windows系统ffmpeg.dll丢失怎么办?从错误分析到永久修复的完整流程
  • FPGA实现SRIO高速接口与DSP交互,FPGA+DSP异构方案,提供3套工程源码和技术支持
  • 处理订单过期但支付成功的系统设计:平衡用户体验与业务规则
  • 设计模式:中介者模式 Mediator
  • Oracle发布MCP Server,自然语言交互说“人话”
  • Kubernetes高级调度01
  • 设计模式十三:代理模式(Proxy Pattern)
  • pygame 模拟放飞气球
  • hive专题面试总结
  • Python 日期时间格式化与解析的瑞士军刀:`strftime()` 与 `strptime()`
  • 三、Linux用户与权限管理详解
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各种食物的类型检测识别(C#代码UI界面版)
  • 学习嵌入式的第三十四天-数据结构-(2025.7.29)数据库