pytest结合allure
Allure
- 一、文档
- 二、指令
- 三、装饰器
- 3.1 @allure.step装饰器
- 3.2 @allure.description装饰器
- 3.3 @allure.title装饰器
- 3.4 @allure.link、@allure.issue 和 @allure.testcase装饰器
- 3.5 @allure.epic、@allure.feature 和 @allure.story装饰器
- 3.6 @allure.severity装饰器
一、文档
allure文档
二、指令
1、运行测试并生成 allure 数据
pytest --alluredir=./allure_results
2、生成并打开报告
allure serve ./allure_results
三、装饰器
3.1 @allure.step装饰器
将函数或方法标记为测试步骤,并在 Allure 报告中展示步骤层级。
直接在测试方法或函数上添加 @allure.step 装饰器,并可自定义步骤名称,支持使用{}占位符。
import allure@allure.step("打开应用首页")
def open_homepage():print("-----------open--------------")pass# 使用 {} 占位符将变量嵌入步骤名称,参数自动填充。
@allure.step("输入用户名和密码: {username},{password}")
def input_username(username, password):print(f"-----------{username}--------------")pass# 步骤可以嵌套,形成清晰的逻辑层级
def test_login():open_homepage()input_username("test_user","1234")
conftest.py与@allure.step结合,显示单独的“前置/后置”树,用于配置初始化和销毁。
conftest.py:
import pytest
import allure@allure.step("step in conftest.py for setup")
def conftest_test():pass@allure.step("step in conftest.py for teardown")
def conftest_test_of_teardown():pass@pytest.fixture(autouse=True)
def fixture_with_conftest_test():conftest_test()yieldconftest_test_of_teardown()
运行结果:

3.2 @allure.description装饰器
为测试用例添加详细描述
1、@allure.description提供描述字符串
2、@allure.description_html添加html格式的描述
3、仅从测试方法的文档字符串获取描述
import pytest
import alluredef test_unicode_in_description():"""unicode描述使用不同的国家语言helloこんにちは你好伙计"""assert 42 == int(6 * 7)@pytest.mark.parametrize("username", ["user1", "user2"])
@allure.description("测试不同用户名的登录兼容性:username={username}")
def test_login_compatibility(username):pass@allure.description_html("""
<h1>添加html格式的描述</h1>
""")
def test_description_html():pass@allure.description("动态描述,可替换开始的描述")
def test_login_change():passallure.dynamic.description("测试用例执行完了,更改描述")

3.3 @allure.title装饰器
使测试标题更具可读性,标题支持占位符并支持动态替换
import pytest
import allure@allure.title("@allure.title使测试标题更具可读性,标题支持占位符并支持动态替换")
def test_with_a_title():assert 2 + 2 == 4@pytest.mark.parametrize("param1,param2,expected", [(1, 1, 2), (1, 3, 5)])
@allure.title("标题包含动态参数:{param1},{param2}")
def test_with_parametrize_title(param1, param2, expected):assert param1 + param2 == expected@allure.title("动态描述,可替换开始的描述")
def test_title_update():passallure.dynamic.title("测试用例执行完了,更改标题")
运行结果:

3.4 @allure.link、@allure.issue 和 @allure.testcase装饰器
用于在Allure报告中添加可点击的链接,提升测试报告的可追溯性。其中@allure.link表示通用资源链接,@allure.issue关联问题追踪系统(Bug/任务),@allure.testcase关联测试用例管理系统
@allure.link("https://github.com/youngyangyang04/leetcode-master", name="项目仓库")
def test_example_for_link():pass@allure.issue("PROJECT-123", "登录失败问题")
def test_login_for_issue():# 假设配置了issue链接模板:https://jira.company.com/browse/{issue}# 报告中将自动生成完整链接。pass@allure.testcase("TC-456", "登录功能验证")
def test_login_for_testcase():# 假设配置了testcase链接模板:https://testrail.company.com/index.php?/cases/view/{testcase}pass
运行结果:

3.5 @allure.epic、@allure.feature 和 @allure.story装饰器
Epic、Feature、Story通常用于行为驱动开发(BDD)中的分层结构。Epic是最大的范围,通常对应大的业务目标;Feature是Epic下面的功能模块;Story则是更小的用户故事或功能点。Tag可能更灵活,用于标记测试的其他属性,比如优先级、模块等。
| 注解 | 层级定位 | 典型用途 |
|---|---|---|
| @allure.epic | 最高层级,表示宏观业务目标或大型项目模块。 | 描述系统级别的业务需求或长期目标。 |
| @allure.feature | 中间层级,属于某个epic下的功能模块。 | 描述一个独立的功能模块或子系统。 |
| @allure.story | 最细层级,属于某个feature下的具体用户故事或功能点。 | 描述具体的用户场景或需求点(通常对应敏捷开发中的User Story)。 |
| @allure.tag | 独立标签,无固定层级,灵活标记任意属性。 | 补充标记测试的附加属性(如优先级、测试类型、模块等)。 |
import allure@allure.epic("电商平台")
@allure.feature("订单管理")
@allure.story("用户取消订单")
@allure.tag("smoke", "high-priority")
def test_order_cancellation():pass@allure.feature("feature_1")
def test_example_for_feature():pass@allure.story("story_1")
def test_example_for_story():pass@allure.feature("feature_2")
@allure.story("story_1")
def test_example_mix_feature_and_story():pass@allure.feature("feature_2")
@allure.story("story_2")
def test_example_mix_feature_and_story_2():pass
可以使用如下命令行选项指定不同的测试集(可有多个,以逗号分隔)
--allure-epics xx1,xx2
--allure-features xx1,xx2
--allure-stories xx1,xx2
如:
pytest --alluredir=./allure_results --allure-epics "电商平台"
pytest --alluredir=./allure_results --allure-stories story_1,story_2
pytest --alluredir=./allure_results --allure-features feature_2 --allure-stories story_2 #--allure-features 与 --allure-stories 是“或”关系,满足其一即被执行

3.6 @allure.severity装饰器
用于按严重性级别标记测试用例级别
import allure@allure.severity(allure.severity_level.BLOCKER)
def test_example_for_severity():pass@allure.severity(allure.severity_level.CRITICAL)
def test_example_for_severity():pass
其中severity_level的枚举值如下:
class Severity(str, Enum):BLOCKER = 'blocker'CRITICAL = 'critical'NORMAL = 'normal'MINOR = 'minor'TRIVIAL = 'trivial'
可以使用如下命令行选项指定不同的测试集(可有多个,以逗号分隔)
--allure-severities blocker,critical
注意:这个级别的关系是"或"

相关文章:
pytest结合allure
Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…...
【渗透测试】基于时间的盲注(Time-Based Blind SQL Injection)
发生ERROR日志告警 查看系统日志如下: java.lang.IllegalArgumentException: Illegal character in query at index 203: https://api.weixin.qq.com/sns/jscode2session?access_token90_Vap5zo5UTJS4jbuvneMkyS1LHwHAgrofaX8bnIfW8EHXA71IRZwsqzJam9bo1m3zRcSrb…...
Gateway:网关路由与登录鉴权
在微服务架构中,用户登录和身份校验的处理方式确实与单体应用有所不同。在单体架构中,一旦用户通过身份验证,其会话信息可以在整个应用范围内共享,所有模块都能访问到用户信息。然而,在微服务架构下,每个服…...
本地部署DeepSeek R1大数据模型知识库
DeepSeek-V3 的综合能力 DeepSeek-V3 在推理速度上相较历史模型有了大幅提升。在目前大模型主流榜单中,DeepSeek-V3 在开源模型中位列榜首,与世界上最先进OpenAI 闭源模型不分伯仲。 1、下载Ollama运行大数据库 Ollama支持 Llama 3.3, DeepSeek-R1, Phi-…...
使用 Python 开发的简单招聘信息采集系统
以下是一个使用 Python 开发的简单招聘信息采集系统,它包含用户登录、招聘信息收集和前后端交互的基本功能。我们将使用 Flask 作为后端框架,HTML 作为前端页面。 项目结构 recruitment_system/ ├── app.py ├── templates/ │ ├── login.html │ ├── index…...
【jstack查询线程信息】1.对比下arthas的thread 和jvm指令
1)jps拿到进程号 2)jstack <pid> > <xxx.txt> // jstack作用:分析线程信息,死循环,死锁 jstack 23647 > 23647.txt Found 1 deadlock 3)对比:arthas查看线程信息 [arthas68751]$ thread -n 10 "MainWorker" Id69 cpuUsage72.29% deltaTime156ms …...
苦瓜书盘官网,免费pdf/mobi电子书下载网站
苦瓜书盘(kgbook)是一个专注于提供6英寸PDF和MOBI格式电子书的免费下载平台,专为电子阅读器用户设计。该平台为用户提供了丰富的电子书资源,涵盖文学、历史、科学、技术等多个领域,旨在打造一个全面的电子书资源库。用…...
【AI】AI开源IDE:CLine源码分析报告
1. 源码位置: CLine 是一个开源的 VSCode 插件,其完整源码托管在 GitHub 的 cline/cline 仓库中。这个仓库包含 CLine 的核心逻辑(TypeScript 编写),包括与 LLM 的对话控制、工具调用接口,以及 VSCode 插件…...
Nacos学习笔记-占位符读取其他命名空间内容
Nacos当前命名空间下的配置文件需要跨命名空间读取其他配置文件的内容。可以先通过Nacos提供的API接口获取配置文件内容,然后解析数据将其放入环境的PropertySource中。 相关依赖包 <!-- Nacos依赖包 --> <dependency><groupId>com.alibaba.clo…...
HarmonyOS 音频录制与播放模块
HarmonyOS 音频录制与播放模块 1.模块功能概览 麦克风权限动态检测与申请音频录制功能(支持参数配置)音频波形实时可视化(暂时未完善,先凑合看,后续会完善)录音文件播放功能 2.权限检测流程 1.代码实现…...
小白学Agent技术[4](Agent设计模式)
文章目录 Agent设计模式Zero shotFew shot应用场景 技术特性对比ReAct模式ReAct模式简介ReAct模式举例ReAct模式实现 Plan and Solve模式实现原理 Reason without Observation模式LLMCompiler模式实现原理 Basic ReflectionBasic Reflection原理 Reflexion 模式Reflexion 模式原…...
Google参数逆向 谷歌搜索
背景 从2025年1月15日开始,Google强制用户开启JavaScript才能使用Google搜索功能。 由于此前业务需要调用Google搜索功能去寻找目标资源进行下载,Google的改版导致整条产线全部瘫痪,急需解决方案。 业务每日需要Google搜索数百万次 临时解决方…...
OneM2M:全球性的物联网标准-可应用于物联网中
OneM2M 是一个全球性的物联网(IoT)标准,旨在为物联网设备和服务提供统一的框架和接口,以实现设备之间的互操作性、数据共享和服务集成。OneM2M 由多个国际标准化组织(如 ETSI、TIA、TTC、ARIB 等)共同制定,目标是解决物联网领域的碎片化问题,提供一个通用的标准,支持跨…...
MySQL环境搭建和基本操作
前言 MySQL是现在最为流行的数据库,而且是开源的,任何人都可以在Internet下载,进行安装。 MySQL环境搭建 一、软件包安装 MySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典MySQLAB公司…...
【GIT】non-fast-forward错误
遇到 non-fast-forward 错误时,通常是因为远程仓库有本地尚未包含的提交(如远程仓库初始化时自动生成的 README.md 等文件)。以下是分步解决方案: 1. 拉取远程更改并合并历史 git pull origin master --allow-unrelated-historie…...
深入了解Linux —— 调试程序
前言 我们已经学习了linux下许多的工具,vim、gcc、make/makefile等; 已经能够在linux写代码,并且进行编译运行,让程序在linux下跑起来。 但是,如果我们在写代码的时候遇见了错误;但是我们并不知道错误在哪&…...
JVM - 3.垃圾回收
1.垃圾收集的经典问题 1.哪些内存需要回收2.什么时候回收3.如何回收1.你知道哪几种垃圾回收器,各自的优缺点,重点讲一下cms和g12.JVM GC算法有哪些,目前的JDK版本采用什么回收算法3.G1回收器的回收过程 1.Java中垃圾的定义(Garbag…...
vs code 设置字体颜色
修改setting.json文件 {"remote.SSH.remotePlatform": {"ubuntu": "linux"},// "workbench.colorTheme": "One Dark Pro",// "editor.semanticTokenColorCustomizations": {// },"editor.semanticTokenColo…...
MoonSharp 文档一
目录 1.Getting Started(入门手册) 步骤1:在 IDE 中引入 MoonSharp 步骤2:引入命名空间 步骤3:调用脚本 步骤4:运行代码 2.Keeping a Script around(保留一个脚本) 步骤1:复现前教程所有操作 步骤2:改为创建Script对象 步骤3:访问全局环境 步骤4:直接调用…...
Unity3D 图形渲染(Graphics Rendering)详解
前言 Unity3D 是一款广泛使用的游戏引擎,其图形渲染系统是开发者创建高质量视觉效果的核心。本文将深入探讨 Unity3D 的图形渲染管线、渲染技术、以及如何通过代码实现自定义渲染效果。 对惹,这里有一个游戏开发交流小组,大家可以点击进来一…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
