ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Allure2测试报告从零到实战:pytest集成与报告生成指南

Allure2测试报告从零到实战:pytest集成与报告生成指南 开了很多次测试报告的需求最后我发现 Allure2 几乎是绕不开的那一个。以前跑完一轮 pytest我一般是把终端输出截图丢群里或者用 pytest-html 生成一个表格式页面问题在于用例一多终端就刷屏报告一放久了没人愿意回看。后来试着把 Allure2 接入测试流程一份基础报告从开始到能看其实不到二十分钟。这篇文章直接把我的安装过程和踩坑记录整理出来重点讲清楚环境版本、目录路径、结果文件和报告文件这两层概念适合刚接触自动化测试、准备给团队搭一套报告体系的同学直接抄作业。1. 为什么放着 pytest-html 不用非要上 Allure21.1 传统报告的几个痛点如果你只是跑几个接口用例pytest 自带的-v输出确实够用用例名一行行列出来绿点红点清清楚楚。可一旦用例上了三位数终端输出很快就失去可读性——早上九点跑的用例下午四点半要复盘总不能还去翻滚动日志吧pytest-html 这类插件能解决一部分问题它把用例结果渲染成一个网页至少比终端好分享。但它的短板也很明显报告里只有用例名、耗时、状态没有模块和功能的层级结构失败原因不会自动分类没法看这一次和上一次比是变好还是变差如果用例里有截图或接口日志基本要靠自己拼 HTML。对个人调试够用对团队复盘说不上一份资产。1.2 Allure2 真正解决的是什么Allure2 解决的其实是测试结果的结构化问题。它不直接负责跑用例而是把测试框架产出的结果收集起来再渲染成一套多维度网页报告。你在 pytest 里加一个插件运行完产生一批 JSON 文件然后用 Allure 命令行把这些 JSON 文件生成 HTML 报告。报告里有总览统计、失败分类、功能模块视图、用例步骤、历史趋势、附件日志甚至能标出每一条用例的优先级。它跟语言关系不大pytest 能用、Java 的 TestNG/JUnit 能用、JMeter 也能用所以很多团队的接口自动化、UI 自动化最后都会收敛到这套报告体系上。提示如果想先快速体验不用一上来就把 Allure 的所有装饰器都研究明白。先装好工具跑通最基础的报告生成链路再逐步加特性和步骤描述这是最快的上手路径。2. 安装 Allure2 之前先确认三样东西2.1 JDK最容易忽略的前置环境Allure2 的命令行工具是用 Java 写的启动时需要一个可用的 Java 运行时官方要求 JDK 8 及以上。很多人在安装 Allure2这一步卡住并不是命令敲错而是机器上压根没装 Java运行allure --version直接报java: command not found然后一脸懵。检查方法很简单终端里跑java -version如果提示找不到java那就先装 JDK。以 Windows 为例建议直接装 JDK 11 或 17注意记住安装路径。装完之后配置环境变量新建JAVA_HOME值为 JDK 安装目录比如C:\Program Files\Java\jdk-17在系统变量Path中追加%JAVA_HOME%\bin重新打开一个终端执行java -version看到版本号就算通过macOS 上如果装了 Homebrewbrew install openjdk17也可以Linux 则可以用发行版的包管理工具安装 openjdk。2.2 Python 和 pytest虚拟环境一定要建Allure2 本身不依赖 Python但如果你和我一样用 pytest 做自动化那就要装allure-pytest插件。这里我强烈建议先建一个虚拟环境不要直接往系统 Python 里堆包python -m venv .venv source .venv/bin/activate # Windows 下执行 .venv\Scripts\activate虚拟环境的好处不用多讲项目依赖隔离以后换机器、换项目不会出现这个环境里跑得好好的另一个环境导入报错的情况。Python 版本建议 3.8 以上太老的版本对新版插件兼容性是个隐患。2.3 终端重新打开一次比啥都管用安装过程中所有环境变量都是写入当前用户或系统级别的修改完 PATH 后旧终端窗口里的环境变量不会自动刷新。很多人配好了 Java、配好了 Allure 的 PATH回到原来的窗口继续敲命令结果还是提示找不到其实换成新开的终端就好了。这个细节不值钱但真的能省五分钟排查时间。3. Allure2 命令行工具安装Windows、macOS、Linux 三种玩法3.1 获取安装包Allure2 的安装包托管在 GitHub 的 Releases 页面里文件名一般是allure-2.x.x.zip或.tgz格式。下载的时候认准官方 release不要在第三方博客里随便拿一个压缩包一来版本可能比较旧二来国内不少下载站会在包里塞点别的东西。3.2 Windows 手动安装步骤Windows 没有包管理器手动配置最直接。我把路径统一放在D:\tools下下载allure-2.x.x.zip后解压得到D:\tools\allure-2.24.0打开系统环境变量编辑界面在Path里新增一条D:\tools\allure-2.24.0\bin重新打开终端执行allure --version如果看到类似2.24.0的版本号说明安装成功。这里有个小建议解压目录最好不要带空格和中文比如不要放在C:\Program Files (x86)\我的工具\allure下否则部分脚本在拼接路径时容易出莫名其妙的 bug。3.3 macOS 安装一条命令搞定macOS 上如果有 Homebrew安装 Allure 是所有平台里最省事的brew install allure安装完直接allure --version验证。如果 brew 源比较慢可以考虑换国内镜像源这个属于 Homebrew 本身的优化话题这里不展开。3.4 Linux 安装解压到指定目录Linux 服务器一般没有图形环境手动解压到/opt是常见做法wget https://github.com/allure-framework/allure2/releases/download/2.24.0/allure-2.24.0.tgz tar -zxvf allure-2.24.0.tgz -C /opt/ ln -s /opt/allure-2.24.0/bin/allure /usr/local/bin/allure用ln -s建立软链接后allure命令全局可用。后续如果要升级版本把新版本解压到/opt再重新链接即可。3.5 验证安装时一个容易混淆的点allure --version显示的是命令行工具的版本pip show allure-pytest显示的才是 pytest 插件的版本。这两个版本没有强绑定但建议都保持较新状态。某些老版本插件配合新命令行工具可能出现用例数据解析异常的情况。4. 接入 pytest让用例变成 Allure 能看懂的 JSON4.1 安装 allure-pytest 插件在虚拟环境已经激活的前提下pip install allure-pytest装完后可以确认一下版本pip show allure-pytest这里有个常见误区有人会把allure-pytest和allurePython 包搞混。实际上 pytest 要用的插件名是allure-pytest另一个同名包用途不同不用重复安装。4.2 写一个带结构的示例用例安装只是开始真正影响报告质量的是用例编写习惯。先看一段最基础的例子import allure import pytest allure.feature(登录模块) class TestLogin: allure.story(正常场景) allure.title(输入正确账号密码可以登录成功) def test_login_success(self): with allure.step(打开登录页面): pass with allure.step(输入账号和密码): pass with allure.step(点击登录): assert 1 1 2 allure.story(异常场景) allure.title(输入错误密码会报错) def test_login_wrong_password(self): with pytest.raises(AssertionError): assert 2 2 5先不纠结业务逻辑重点看几个装饰器的作用allure.feature对应报告里的功能模块一般放类名上allure.story对应功能下的用户场景allure.title用例标题会直接显示在报告里with allure.step()把步骤记录进报告比只有一句断言更直观很多人跑完报告发现页面很空通常就是因为用例没有加feature和storyAllure 只能拿函数名当标题报告层级感出不来。4.3 运行测试产生 results 目录执行命令pytest test_login.py --alluredirallure-results运行结束后项目目录下会出现一个allure-results文件夹里面是一堆 JSON 文件和附件。这些就是原始测试结果一个用例对应若干条*-result.json执行阶段还会生成*-container.json。这些文件你不要去手动改它们是 Allure 报告的数据源。注意allure-results目录建议加入.gitignore。这是中间产物每次运行都会覆盖提交到代码仓库只会制造冲突。5. 生成基础测试报告从 JSON 到网页的完整流程5.1 先理解结果文件和报告文件是两回事Allure2 的工作流程分成两步这是新手最容易绕晕的地方测试框架生成结果文件allure-results下的 JSONAllure 命令行把结果文件渲染成网页报告allure-report目录下的 HTML、CSS、JSallure serve和allure generate的区别就在于一个直接启动临时 HTTP 服务给你看另一个在磁盘上落一份静态报告。前者适合自己调试后者适合保存和发布。5.2 现场预览allure serve跑完用例后执行allure serve allure-resultsAllure 会在本机起一个临时服务自动打开浏览器。因为服务进程停在终端里关掉终端报告就没了所以它不适合作为最终交付物只是快速确认结果数据能不能正常渲染。5.3 生成静态报告allure generate如果要把报告保存下来、发给别人、或者挂到服务器上用 generate 命令allure generate allure-results -o allure-report --clean参数说明-o allure-report指定输出目录--clean生成前清空旧报告避免残留上一次的数据第一次跑可以不加--clean但后面反复生成时必须加。我第一次没加结果报告里出现了已经删掉的旧用例排查了半天才发现是缓存没清。生成完成后进入allure-report目录用浏览器打开index.html就能看报告。如果直接双击打开出现空白页或样式丢失那很正常——Allure 报告的 HTML 依赖里面的 JS 和 CSS 资源用本地文件协议打开会被浏览器拦截解决办法是起一个本地静态服务cd allure-report python -m http.server 8080 # 浏览器访问 http://localhost:80805.4 一套完整的命令流程把上面几步串起来日常操作就是pytest test_login.py --alluredirallure-results allure generate allure-results -o allure-report --clean allure open allure-report # 或手动起 http.server这里allure open是 Allure2 自带的一个快速打开方式某些版本可能没有这个子命令如果没有就手动起静态服务。5.5 报告生成不出来先查三件事遇到ERROR或者报告是空白的我一般按顺序排查allure-results目录里有没有 JSON 文件——没有的话说明 pytest 没装上插件检查pip show allure-pytestallure --version能不能正常执行——不能的话是 PATH 没配好输出目录是否被占用——Windows 下如果allure-report里的文件被别的程序打开generate 会报权限错误6. 基础报告的正确读法Overview、Categories、Suites 等板块6.1 Overview总览页打开报告默认停留在 Overview。顶部是执行的起止时间、总用例数、通过/失败/中断用例数、整体耗时、严重级别分布。这些卡片统计的是结果文件里的直接数据不会骗人所以日常汇报时这一页截图基本就够了。下方还有一个Environment区域默认显示时区、软件版本等信息你可以通过配置文件自定义。不过这是进阶话题第一次跑通报告不用管。6.2 Categories缺陷自动分类Categories 是 Allure 比较有特色的板块它会把失败用例按原因归成几类比如断言失败测试中断产品缺陷。默认分类比较简单如果想要更细的规则可以在结果目录里放一个categories.json自定义。比如给网络超时类错误单独开一个分类方便后续统计稳定性问题。6.3 Suites按套件看用例Suites 对应测试代码中的类或文件。这个视图适合开发人员对照代码看哪个类下面的用例挂了点进去能看到失败断言、日志、步骤和附件。如果一个类里面用例很多还可以按执行状态过滤。6.4 Graphs趋势和分布Graphs 里有几个图表比较实用的是用例执行时长和失败趋势。不过要说明的是首次生成报告时历史趋势是空的——因为还没有历史数据文件。这部分我会在下一章详细讲因为它是一个很容易被忽略但非常实用的功能。6.5 Behaviors 和 TimelineBehaviors 是让你按用户行为/需求来审视用例覆盖情况的视图前提是你在用例上写了feature和story装饰器。Timeline 则展示用例执行的先后时序适合排查并行执行时的资源冲突。基础报告阶段先看 Overview、Categories、Suites 就够应付日常需求。下面用表格总结一下各板块的主要用途板块适合谁看主要回答的问题Overview项目负责人这轮测试整体通过率多少耗时多久Categories测试负责人失败都是什么类型有没有共性问题Suites开发/测试哪些用例失败具体断言和日志是什么Graphs所有人通过率趋势是否稳定执行时间有没有变长Behaviors产品/测试设计各功能场景覆盖得全不全7. 安装和生成报告过程中最常踩的几个坑7.1 PATH 配好了还是提示命令找不到这个场景我见过太多次环境变量界面里明明加上了bin目录终端里跑allure --version还是提示找不到。原因几乎都是终端没有重新打开或者打开了但还是缓存了旧环境变量。另外Windows 下如果改的是用户变量而不是系统变量也要确认当前终端进程是用哪个用户身份启动的。7.2 中文乱码Windows 控制台和服务器的编码问题用例名是中文报告里显示乱码或问号这个坑大概率出在 Windows 上。原因不在于 Allure而在于测试进程输出的编码不是 UTF-8。解决办法有两步第一种在运行 pytest 前设置环境变量set PYTHONIOENCODINGutf-8第二种在pytest.ini或pyproject.toml里确认编码配置。如果用例文件里写了中文还顺便检查文件本身的编码是不是 UTF-8最好在 IDE 右下角看编码格式而不是靠系统自动识别。7.3 History 历史趋势不显示很多人翻遍报告找不到趋势图原因很简单Allure 的长期趋势需要你把上一次报告的history目录合并进本次结果。它是这么运行的生成报告时Allure 会把allure-results/history下的历史数据读出来写进新报告如果这个目录从来没有存在过那 Graphs 里的历史曲线自然就是空白。解决办法是在脚本里加两步# 如果存在上一次生成的报告把 history 目录复制到本次结果目录 if [ -d allure-report/history ]; then cp -r allure-report/history allure-results/history fi pytest --alluredirallure-results allure generate allure-results -o allure-report --clean这样每次跑完历史趋势就会往上叠加跑个三五轮之后报告里就能看到通过率和执行趋势的曲线。7.4 插件版本和工具版本不匹配allure-pytest插件和allure2命令行工具虽然是分开的两个项目但大多数情况下保持两者都更新就不会有问题。如果遇到用例执行成功、结果文件也生成了但allure generate报解析错误很大概率是新版命令行工具读了旧格式的 JSON 文件或者反过来。处理方式就是把插件升到最新把命令行工具也升到最新然后清理掉旧结果目录重新跑。7.5 Java 版本过低导致的启动失败如果你还在用 JDK 6 或 7那 Allure 基本跑不起来启动时会直接抛出不兼容的错误。JDK 8 是底线但新版本官方其实更推荐 JDK 11 及以上。装多个 JDK 的机器上记得检查终端的JAVA_HOME到底指向哪个版本很多人全局配了 JDK 17但项目里临时把 JDK 8 加到 PATH 前面结果 Allure 启动报错就是这个原因。8. 把报告变成团队能用起来的东西简单的发布思路8.1 一个最简的团队共享方案基础报告生成以后在allure-report目录下起一个静态文件服务局域网里的同事就能访问cd allure-report python -m http.server 8080想让同事访问时不用带端口也可以在服务器上用 nginx 指向这个目录或者直接把allure-report目录拷贝到一台内网 web 服务器上。这个方法不需要额外部署服务端适合测试环境是内网、访问人数不多的团队。8.2 把跑测试 出报告固化成一条命令我先贴一段我常用的 shell 脚本每天增量回归时直接执行#!/bin/bash set -e # 清理旧的临时结果 rm -rf allure-results # 若存在历史报告则带入历史趋势 if [ -d allure-report/history ]; then mkdir -p allure-results cp -r allure-report/history allure-results/history fi # 执行测试并生成报告 pytest tests --alluredirallure-results -m smoke allure generate allure-results -o allure-report --clean echo 报告已生成: $(pwd)/allure-report/index.html核心思路很简单每次先做清理再带入上次的 history 目录然后跑测试、生成报告。脚本化之后新人接手也不需要理解每一步命令的含义直接跑脚本就行。8.3 后续还能往哪个方向扩展如果你后面想把这份报告接到 CI 流水线里思路是让 CI 上的测试任务执行上面的脚本然后把allure-report目录作为产物保存或者用allure相关的发布插件把报告传到测试管理平台。Jenkins 和 GitLab CI 都有现成的插件不再需要自己造轮子。最后再分享一个小经验Allure2 这套工具链本身不复杂真正决定报告价值的是用例有没有带足够的结构信息。先花二十分钟把安装和环境跑通再花半小时给用例加上feature、story、title、step这些装饰器一份能让人愿意打开看、能用于复盘和汇报的测试报告就出来了。别一上来追求那些炫酷的插件和复杂的自定义配置能让团队每天都愿意看一眼的报告才是好报告。
返回列表