pytest中集成allure打造更好的自动化测试报告

一、环境准备:安装 Allure 工具包

Allure 需要独立的命令行工具才能生成报告。请按照以下步骤下载并配置:

  1. 下载 Allure 命令行工具

    访问 Maven 仓库选择对应版本(本文以 2.27.0 为例):
    repo.maven.apache.org/maven2/io/q...

    下载 allure-commandline-2.27.0.zip 文件。

  2. 解压并配置环境变量

    将压缩包解压到本地目录(例如 D:\allure-2.27.0),然后将 bin 文件夹的路径(如 D:\allure-2.27.0\bin)添加到系统的 PATH 环境变量中。

    安装步骤可参考:CSDN 详细教程

  3. 验证安装

    打开命令行,输入 allure --version,若显示版本号则安装成功。


二、安装 Pytest Allure 插件

Pytest 需要通过 allure-pytest 插件将测试结果输出为 Allure 能识别的格式。执行以下命令安装:

bash

复制代码
pip install allure-pytest

三、在测试用例中使用 Allure 注解

Allure 提供了丰富的注解,帮助你在报告中生成结构化的描述。以下是一些常用注解的示例:

python

python 复制代码
import allure

@allure.feature("用户管理模块")        # 功能模块
@allure.story("获取用户列表接口")       # 子功能/场景
@allure.title("测试用例1:正常获取列表") # 用例标题
@allure.description("执行参数:page=1, size=10")  # 用例描述
def test_get_user_list():
    # 测试代码
    pass

提示 :更多注解(如 @allure.severity@allure.issue@allure.link 等)可查阅官方文档,按需使用。


四、运行测试并生成 Allure 原始数据

在运行 Pytest 时,通过 --alluredir 参数指定存放 Allure 原始结果文件的目录:

bash

ini 复制代码
pytest --alluredir=./allure-results

执行后,当前目录下会生成 allure-results 文件夹,里面包含 .json 等格式的原始数据。


五、生成并查看 HTML 报告

1. 生成 HTML 报告

使用 Allure 命令行工具将原始数据转换为最终的 HTML 报告:

bash

bash 复制代码
allure generate ./allure-results -o ./allure-report --clean
  • ./allure-results:原始数据目录
  • -o ./allure-report:指定输出报告的目录
  • --clean:若报告目录已存在,先清空

2. 查看报告

生成的 HTML 报告是静态文件,但不能直接双击打开(会出现跨域等问题)。需要用 Allure 自带的 HTTP 服务器启动服务:

bash

arduino 复制代码
allure open ./allure-report

执行后会启动一个本地 Web 服务(默认地址 http://localhost:xxxx),自动在浏览器中打开报告页面。


六、常见问题:断言失败为何被标记为 Broken?

在实际使用中,可能会遇到一个困扰:原本应该是 Failed (断言失败)的用例,在 Allure 报告中却被标记为 Broken (通常是代码执行异常)。这是因为 Allure 默认将 未捕获的异常 视为 Broken,而将 断言失败 视为 Failed。如果你在封装断言时自定义了异常类,且没有继承自 AssertionError,Allure 就无法识别为断言失败。

问题重现

假设你有一个自定义的断言类 assertions.py

python

python 复制代码
class CustomAssertionError(Exception):
    """自定义断言异常,但未继承 AssertionError"""
    pass

在测试中使用该异常抛出断言失败,Allure 会将其归类为 Broken。

解决方案

让自定义断言异常继承 AssertionError,这样 Allure 就能正确识别为 Failed:

python

python 复制代码
class CustomAssertionError(AssertionError):
    """自定义断言异常,继承内置 AssertionError,用于区分断言失败和其他错误"""
    pass

然后在断言失败时抛出该异常:

python

python 复制代码
if actual != expected:
    raise CustomAssertionError(f"期望值 {expected},实际值 {actual}")

修改后重新运行测试,Allure 报告中就会正确显示为 Failed 了。


七、集成 YAML 测试数据(可选)

如果你使用 YAML 文件管理测试数据(例如测试用例、参数化数据),可以结合 pytest-yaml 插件或自定义 fixture 读取 YAML,再与 Allure 注解配合。例如:

python

python 复制代码
import allure
import yaml

@allure.feature("用户管理")
@allure.story("批量创建用户")
@allure.title("从 YAML 文件读取测试数据")
def test_create_users_from_yaml():
    with open("test_data/users.yaml", encoding="utf-8") as f:
        data = yaml.safe_load(f)
    # 循环执行测试...

这样既能保持数据与代码分离,又能利用 Allure 生成清晰的报告。


总结

通过以上步骤,你已经成功搭建了 Pytest + Allure 的自动化测试报告体系。从环境配置、注解使用、报告生成到常见问题排查,每一步都经过实践验证。现在,你可以轻松生成美观的测试报告,并让团队一目了然地看到测试结果。如果遇到其他问题,欢迎留言交流! 部分内容来自网络,进行过新增和修改。

相关推荐
软件测试同学4 小时前
软件测试术语分享: 验收测试驱动开发 | Acceptance Test Driven Development
测试
用户962377954483 天前
VulnHub DC-1 靶机渗透测试笔记
笔记·测试
数据组小组4 天前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
Apifox5 天前
【测试套件】当用户说“我只想跑 P0 用例”时,我们到底在说什么
单元测试·测试·ab测试
阁老7 天前
pytest测试框架:如何确保登录模块先执行并共享登录状态
测试
_志哥_8 天前
Superpowers 技术指南:让 AI 编程助手拥有超能力
人工智能·ai编程·测试
FliPPeDround11 天前
浏览器扩展 E2E 测试的救星:vitest-environment-web-ext 让你告别繁琐配置
e2e·浏览器·测试
Apifox11 天前
Apifox 2 月更新|MCP Client 调试体验优化、测试套件持续升级、支持公用测试数据、测试报告优化
前端·后端·测试
infiniteWei11 天前
Skills、MCP、Agent 的边界与商业化定位(附项目筛选表)
人工智能·aigc·测试