千锋教育-做有情怀、有良心、有品质的职业教育机构

Allure 测试报告:3步美化你的测试结果,报告可读性提升较高

来源:千锋教育
发布时间:2026-05-10 06:12:00

千锋教育品牌logo

01 为什么你的测试报告没人看?

测试报告是测试团队的“脸面”。

但99%的测试报告,要么是纯文本的日志堆砌,要么是毫无美感的Excel表格。

开发不看,产品不看,老板更不看。

你辛辛苦苦跑完1000个用例,结果就是没人愿意打开那个文件。

报告没人看,测试等于白做。

问题出在哪?

数据没有可视化,结论没有重点。

一个合格的测试报告,应该具备3个特征:

  • ►一目了然:通过率、失败率、趋势,3秒看懂
  • ►可交互:点击失败用例,直接看到错误截图和日志
  • ►可追溯:每个用例的每一步操作、参数、截图,完整记录

Allure 就是来解决这个问题的。

Allure 是一个开源的测试报告框架,支持 Java、Python、JavaScript、Ruby 等主流语言。

它能把你的测试结果——从枯燥的文本——转化成精美的HTML报告。

报告里包含:测试套件、用例详情、步骤截图、通过率趋势、失败原因分析……

而且,集成只需要3步。

02 3步集成Allure,报告即刻升级

1安装Allure命令行工具

Allure 需要一个命令行工具来生成报告。

安装方式很简单:

macOS

brew install allure

Windows (使用scoop)

scoop install allure

或者从官网下载zip包,解压后配置环境变量

text

验证安装是否成功:

allure --version

输出:2.24.0

text

<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">2</span><span style="font-size:17px;font-weight:700;color:#1565C0;">在测试框架中集成Allure适配器</span></div><div style="padding:16px 20px;"><p>以Python的pytest为例。</p>
<p>先安装依赖:</p>
<div style="margin:16px 0;border-radius:8px;overflow:hidden;border:1px solid #E0E0E0;"><div style="background:#263238;color:#B0BEC5;padding:6px 16px;font-size:12px;font-family:Consolas,monospace;"><span style="text-transform:uppercase;letter-spacing:1px;">bash</span></div><pre style="background:#1E272E;color:#E0E0E0;padding:16px 20px;margin:0;overflow-x:auto;font-size:14px;line-height:1.7;font-family:Consolas,"Courier New",monospace;"><code>pip install allure-pytest</code></pre></div>
<p>然后在测试代码中添加Allure注解:</p>
<div style="margin:16px 0;border-radius:8px;overflow:hidden;border:1px solid #E0E0E0;"><div style="background:#263238;color:#B0BEC5;padding:6px 16px;font-size:12px;font-family:Consolas,monospace;"><span style="text-transform:uppercase;letter-spacing:1px;">python</span></div><pre style="background:#1E272E;color:#E0E0E0;padding:16px 20px;margin:0;overflow-x:auto;font-size:14px;line-height:1.7;font-family:Consolas,"Courier New",monospace;"><code>import allure
import pytest

@allure.feature("用户登录")
class TestLogin:

    @allure.story("登录成功")
    @allure.title("使用正确用户名和密码登录")
    @allure.severity(allure.severity_level.CRITICAL)
    def test_login_success(self):
        with allure.step("输入用户名"):
            print("输入admin")
        with allure.step("输入密码"):
            print("输入123456")
        with allure.step("点击登录按钮"):
            print("登录成功")
        assert True

    @allure.story("登录失败")
    @allure.title("使用错误密码登录")
    @allure.severity(allure.severity_level.NORMAL)
    def test_login_fail(self):
        with allure.step("输入用户名"):
            print("输入admin")
        with allure.step("输入错误密码"):
            print("输入wrong_password")
        with allure.step("点击登录按钮"):
            print("登录失败")
        assert False</code></pre></div>
<p>运行测试并生成Allure结果文件:</p>
<div style="margin:16px 0;border-radius:8px;overflow:hidden;border:1px solid #E0E0E0;"><div style="background:#263238;color:#B0BEC5;padding:6px 16px;font-size:12px;font-family:Consolas,monospace;"><span style="text-transform:uppercase;letter-spacing:1px;">bash</span></div><pre style="background:#1E272E;color:#E0E0E0;padding:16px 20px;margin:0;overflow-x:auto;font-size:14px;line-height:1.7;font-family:Consolas,"Courier New",monospace;"><code>pytest --alluredir=./allure-results</code></pre></div>
<h3 id="第3步生成并查看报告" style="color:#1976D2;margin-top:24px;">第3步:生成并查看报告</h3>
<p>运行完测试后,执行:</p>
<div style="margin:16px 0;border-radius:8px;overflow:hidden;border:1px solid #E0E0E0;"><div style="background:#263238;color:#B0BEC5;padding:6px 16px;font-size:12px;font-family:Consolas,monospace;"><span style="text-transform:uppercase;letter-spacing:1px;">bash</span></div><pre style="background:#1E272E;color:#E0E0E0;padding:16px 20px;margin:0;overflow-x:auto;font-size:14px;line-height:1.7;font-family:Consolas,"Courier New",monospace;"><code>allure serve ./allure-results</code></pre></div>
<p>浏览器会自动打开,展示一份完整的测试报告。</p>
<p>> 3行代码,让你的测试报告从“石器时代”进入“信息时代”。</p></div></div>
## 03 Allure报告的5大核心功能

<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">1. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">仪表盘:全局一览</span></div><div style="padding:16px 20px;"><p>打开报告,第一眼就是仪表盘。</p>
<p>包含:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>测试用例总数</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>通过/失败/跳过数量</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>执行时间</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>通过率趋势图</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>失败原因分布图</li>
</ul>
<p>所有数据,3秒内读懂。</p></div></div>
<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">2. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">测试套件:用例组织</span></div><div style="padding:16px 20px;"><p>Allure支持用 <code style="background:#F3E5F5;color:#6A1B9A;padding:1px 6px;border-radius:3px;font-size:0.9em;font-family:Consolas,monospace;">@allure.feature</code> 和 <code style="background:#F3E5F5;color:#6A1B9A;padding:1px 6px;border-radius:3px;font-size:0.9em;font-family:Consolas,monospace;">@allure.story</code> 对用例进行分类。</p>
<p>比如:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>功能模块:登录、注册、搜索</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>用户故事:正常流程、异常场景</li>
</ul>
<p>点击任何一个套件,直接看到该模块的所有用例状态。</p></div></div>
<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">3. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">用例详情:步骤级可视化</span></div><div style="padding:16px 20px;"><p>点击一个失败用例,你能看到:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>每一步操作(step)</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>每一步的输入/输出</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>失败时的错误堆栈</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>附带的截图(如果有)</li>
</ul>
<p>> 失败用例,不再需要“猜”原因。</p></div></div>
<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">4. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">附件:截图、日志、参数</span></div><div style="padding:16px 20px;"><p>Allure支持为每个用例添加附件:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>截图:<code style="background:#F3E5F5;color:#6A1B9A;padding:1px 6px;border-radius:3px;font-size:0.9em;font-family:Consolas,monospace;">allure.attach.file("screenshot.png")</code></li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>日志:<code style="background:#F3E5F5;color:#6A1B9A;padding:1px 6px;border-radius:3px;font-size:0.9em;font-family:Consolas,monospace;">allure.attach("日志内容", "log.txt")</code></li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>参数:<code style="background:#F3E5F5;color:#6A1B9A;padding:1px 6px;border-radius:3px;font-size:0.9em;font-family:Consolas,monospace;">allure.attach("参数: username=admin", "params.txt")</code></li>
</ul>
<p>代码示例:</p>
<div style="margin:16px 0;border-radius:8px;overflow:hidden;border:1px solid #E0E0E0;"><div style="background:#263238;color:#B0BEC5;padding:6px 16px;font-size:12px;font-family:Consolas,monospace;"><span style="text-transform:uppercase;letter-spacing:1px;">python</span></div><pre style="background:#1E272E;color:#E0E0E0;padding:16px 20px;margin:0;overflow-x:auto;font-size:14px;line-height:1.7;font-family:Consolas,"Courier New",monospace;"><code>@allure.step("截图当前页面")
def take_screenshot():
    allure.attach(driver.get_screenshot_as_png(), name="页面截图", 
                  attachment_type=allure.attachment_type.PNG)</code></pre></div></div></div>
<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">5. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">趋势分析:历史数据</span></div><div style="padding:16px 20px;"><p>Allure支持多个测试运行结果的对比。</p>
<p>执行:</p>
<div style="margin:16px 0;border-radius:8px;overflow:hidden;border:1px solid #E0E0E0;"><div style="background:#263238;color:#B0BEC5;padding:6px 16px;font-size:12px;font-family:Consolas,monospace;"><span style="text-transform:uppercase;letter-spacing:1px;">bash</span></div><pre style="background:#1E272E;color:#E0E0E0;padding:16px 20px;margin:0;overflow-x:auto;font-size:14px;line-height:1.7;font-family:Consolas,"Courier New",monospace;"><code>allure generate ./allure-results --clean -o ./allure-report</code></pre></div>
<p>生成的 <code style="background:#F3E5F5;color:#6A1B9A;padding:1px 6px;border-radius:3px;font-size:0.9em;font-family:Consolas,monospace;">./allure-report</code> 文件夹内,包含历史趋势图。</p>
<p>你可以看到:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>通过率是上升还是下降</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>失败用例是增加还是减少</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>执行时间是变长还是变短</li>
</ul>
<p>这些数据,直接指导测试策略的调整。</p></div></div>
## 04 高级技巧:让报告更专业

### 技巧1:动态标题

有时候,用例标题需要包含动态参数。  
Allure支持:

@allure.title("用户 {username} 登录测试")

def test_user_login(username):

pass

text

执行时,`{username}` 会被替换为实际值。

### 技巧2:严重级别标记

用 `@allure.severity` 标记用例重要性:  
- BLOCKER:阻塞性缺陷  
- CRITICAL:关键功能  
- NORMAL:正常用例  
- MINOR:次要功能  
- TRIVIAL:微小问题  

报告里可以按严重级别筛选,优先关注CRITICAL和BLOCKER的失败。

### 技巧3:自定义环境信息

在 `allure-results` 目录下创建 `environment.properties` 文件:

Browser=Chrome 120

OS=macOS 14

TestEnv=Staging

想系统学习软件测试技术干货?

千锋教育软件测试技术干货课程,零基础入门,企业级项目实战,高薪就业,一站式搞定!

了解课程详情
声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

学习资源站

  • 免费全套视频教程
  • 企业实战项目源码
  • 大厂笔试真题题库
  • 行业前瞻发展趋势

相关推荐

  • Allure 测试报告:3步美化你的测试结果,报告可读性提升较高
  • 面试官问“测试一个水杯”,较高的人答错——测试用例设计方法在面试中的真实打法
  • 你的测试代码还在“裸奔”?一个分支策略让团队效率提升较高
  • 30秒搭建测试环境,效率提升较高:Docker让环境管理不再折磨测试人
  • 你的测试代码还在“裸奔”?一个分支策略让团队效率提升较高
  • 接口测试实战教程(Postman版):从多个级接口测试