(二)pytest自动化测试框架之添加测试用例步骤(@allure.step())
前言
在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。
allure提供的装饰器@allure.step()是allure测试报告框架非常有用的功能,它能帮助我们在测试用例中对测试步骤进行详细的描述。
@allure.step的使用例子:
实现一个购物的场景:1.登录;2.浏览商品;3.将商品加入到购物车中;4.下单;5.支付订单;
# file_name: test_allure_step.pyimport pytest
import allure@allure.step
def login():"""执行登录逻辑:return:"""print("执行登录逻辑")@allure.step
def scan_good():"""执行浏览商品逻辑:return:"""print("执行浏览商品逻辑")@allure.step
def add_good_to_shopping_car():"""将商品添加到购物车:return:"""print("将商品添加到购物车")@allure.step
def generator_order():"""生成订单:return:"""print("生成订单")@allure.step
def pay():"""支付订单:return:"""print("支付订单")def test_buy_good():"""测试购买商品:步骤1:登录步骤2:浏览商品步骤3:将商品加入到购物车中步骤4:下单步骤5:支付:return:"""login()scan_good()add_good_to_shopping_car()generator_order()pay()with allure.step("断言"):assert 1if __name__ == '__main__':pytest.main(['-s', 'test_allure_step.py'])
执行命令:
> pytest test_allure_step.py --alluredir=./report/result_data> allure serve ./report/result_data
查看测试报告展示效果:

从报告中可以看到,我们事先通过@allure.step()定义好的步骤都展示在测试用例test_buy_good()下了。
@allure.step支持嵌套,step中调用step
# file_name: steps.pyimport allure@allure.step
def passing_step_02():print("执行步骤02")pass
测试用例:
# file_name: test_allure_step_nested.pyimport pytest
import allurefrom .steps import passing_step_02 # 从外部模块中导入@allure.step
def passing_step_01():print("执行步骤01")pass@allure.step
def step_with_nested_steps():"""这个步骤中调用nested_step():return:"""nested_step()@allure.step
def nested_step_with_arguments(arg1, arg2):pass@allure.step
def nested_step():"""这个步骤中调用nested_step_with_arguments(),并且传递参数:return:"""nested_step_with_arguments(1, 'abc')def test_with_imported_step():"""测试@allure.step()支持调用从外部模块导入的step:return:"""passing_step_01()passing_step_02()def test_with_nested_steps():"""测试@allure.step()支持嵌套调用step:return:"""passing_step_01()step_with_nested_steps()passing_step_02()if __name__ == '__main__':pytest.main(['-s', 'test_allure_step_nested.py'])
执行命令:
pytest test_allure_step_nested.py --alluredir=./report/result_dataallure serve ./report/result_data
查看测试报告展示效果:

从上面的结果中可以看到:
- @step可以先保存到其他模块中,在测试用例中需要用到的时候导入就可以了;
- @step也支持在一个step中嵌套调用其他的step;嵌套的形式在测试报告中以树形展示出来了;
@allure.step支持添加描述且通过占位符传递参数
# file_name: test_allure_step_with_placeholder.pyimport pytest
import allure@allure.step('这是一个带描述语的step,并且通过占位符传递参数:positional = "{0}",keyword = "{key}"')
def step_title_with_placeholder(arg1, key=None):passdef test_step_with_placeholder():step_title_with_placeholder(1, key="something")step_title_with_placeholder(2)step_title_with_placeholder(3, key="anything")if __name__ == '__main__':pytest.main(['-s', 'test_allure_step_with_placeholder.py'])
执行命令:
pytest test_allure_step_with_placeholder.py --alluredir=./report/result_dataallure serve ./report/result_data
查看测试报告展示效果:

从上面的执行结果中可以看到,@allure.step()是支持输入描述的,并且支持通过占位符向描述中传递参数。
在conftest.py文件中定义@allure.step
conftest.py文件:
# file_name: conftest.pyimport pytest
import allure@pytest.fixture()
def fixture_with_conftest_step():conftest_step()@allure.step("这是一个在conftest.py文件中的step")
def conftest_step():pass
测试用例:
# file_name: test_allure_step_in_fixture_from_conftest.pyimport pytest
import allure@allure.step
def passed_step():passdef test_with_step_in_fixture_from_conftest(fixture_with_conftest_step):passed_step()if __name__ == '__main__':pytest.main(['-s', 'test_allure_step_in_fixture_from_conftest.py'])
执行命令:
pytest test_allure_step_in_fixture_from_conftest.py --alluredir=./report/result_dataallure serve ./report/result_data
查看测试报告展示效果:

从运行结果中可以看到,在fixture中定义的step会在setup和teardown单独以树形结构展示出来。
这可能是B站最详细的pytest自动化测试框架教程,整整100小时,全程实战!!!
相关文章:
(二)pytest自动化测试框架之添加测试用例步骤(@allure.step())
前言 在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。 allure提供的装饰器allure.step()是allure测试报告框架非常有用的功能&am…...
【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏2(附项目源码)
文章目录 先看看最终效果前言生成走廊生成房间修复死胡同增加走廊宽度获取走廊位置信息集合方法一方法二 源码完结 先看看最终效果 前言 上期已经实现了房间的生成,本期紧跟着上期内容,生成走廊并结合上期内容生成连通的房间。 生成走廊 修改Procedur…...
潮玩宇宙大逃杀游戏开发源码说明
潮玩宇宙大逃杀游戏是一款简单而刺激的游戏。玩家在倒计时结束前从8个房间中选择一个房间并投入宝石。倒计时结束后,系统会自动生成一个敌人,然后随机挑选一个房间并清除这个房间内的人。其余7个房间内的玩家就可以按照投入比例获得被清除掉玩家的宝石。…...
UE5 操作WebSocket
插件:https://www.unrealengine.com/marketplace/zh-CN/product/websocket-client 参考:http://dascad.net/html/websocket/bp_index.html 1. 安装Plugings 2.测试websocket服务器 http://www.websocket-test.com/ 3.连接服务器 如果在Level BP里使用&a…...
Linux文件
目录 一、基本概念 二、研究进程和被打开文件的关系 (一)w方式 (二)a方式 三、认识系统接口,操作文件 (一)认识文件描述符 (二)举例 (三)…...
素短语的定义
素短语,是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。 最左素短语是句型中最左边的素短语。...
【华为OD题库-033】经典屏保-java
题目 DVD机在视频输出时,为了保护电视显像管,在待机状态会显示"屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹:请根据如下要求,实现屏保Logo坐标的计算算法 1、屏幕是一个800 * 600像素的矩形&…...
clang+llvm多进程gdb调试
clangllvm多进程gdb调试 前言1. 命令行gdb2. 父进程调试3. 子进程调试4. 返回父进程 前言 在学习新增llvm的优化pass时,需要跟踪clang及llvm的调用栈。然而llvm通过posix_spawn()创建了新进程,这使得gdb调试必须有一定的技巧了。 1. 命令行gdb 以下命…...
PHP反序列化简单使用
注:比较简陋,仅供参考。 编写PHP代码,实现反序列化的时候魔法函数自动调用计算器 PHP反序列化 serialize(); 将对象序列化成字符串 unserialize(); 将字符串反序列化回对象 创建类 class Stu{ public $name; public $age; public $sex; publi…...
专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享
专业课140总分420东南大学920专业综合考研,信息学院通信专业考研分享 我是三月开始系统考研备战,寒假先看的高数全书,奈何在家效率极其低下,才草草看了前三四章。回校后学习的比较认真,每天大概保持10个小时左右&…...
数据结构与算法编程题11
已知两个链表A和B分别表示两个集合,其元素递增排列。 请设计算法求出A与B的交集,并存放于A链表中。 a: 1, 2, 2, 4, 5, 7, 8, 9, 10 b: 1, 2, 3, 6, 7, 8 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #defin…...
【LeetCode刷题】--40.组合总和II
40.组合总和II 本题详解:回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…...
mysql面试内容点
left join和inner join的区别 1.返回不同 innerjoin只返回两个表中联结字段相等的行。left join返回包括左表中的所有记录和右表中联结字段相等的记录。 2.数量不同 inner join的数量小于等于左表和右表中的记录数量。left join的数量以左表中的记录数量相同。 3.记录属性不同…...
msvcp140.dll是什么?msvcp140.dll丢失的有哪些解决方法
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将详细介绍5个解决msvcp140.dl…...
数字图像处理(冈萨雷斯)学习笔记
目录 一.机器视觉和计算机视觉二.图像处理基础1.什么是图像2.如何访问图像 三.图像仿射变换四.灰度变换 一.机器视觉和计算机视觉 机器视觉(Machine Vision,MV)和计算机视觉(Computer Vision,CV)的区别和联系: 机器视觉更注重广义图像信号(激光ÿ…...
MES系统管理范围及标准
一、计划管理 1.1计划分为:月度计划>周计划>日计划; 1.2MES系统一般都会直接精确到日计划(生产工单及生产指令); 1.3MES系统日计划分为三阶排产方式: 1.3.1日计划直接排到车间,由车间自行安排任务; 1.3.2日计划排到产线或设备,对应的班组长按照计划直接生产; 1.…...
vscode运行dlv报错超时
描述 点击F5运行dlv调试go代码时报错:couldnt start dlv dap: connection timeout 解决方式 在网上搜索这个报错,据说是dlv的配置问题,修改配置后还是不行。有人说是dlv和go的版本不匹配,就朝这个方向试试 go版本改为1.19之后…...
【Leetcode合集】1. 两数之和
1. 两数之和 1. 两数之和 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并…...
使用Java解决快手滑块验证码
分析页面结构: 使用浏览器开发者工具分析快手滑块验证码页面的HTML和JavaScript结构,找到滑块验证的相关元素和事件。 模拟滑块滑动: 使用Java的Selenium库或其他网络爬虫工具,模拟用户在滑块上的操作。你需要模拟鼠标点击、拖动…...
瑞吉外卖Day06
1.用户地址 1.1实体类 /*** 地址簿*/ Data public class AddressBook implements Serializable {private static final long serialVersionUID 1L;private Long id;//用户idprivate Long userId;//收货人private String consignee;//手机号private String phone;//性别 0 女…...
Reward Forcing:实时视频生成的高效蒸馏方法
1. 项目概述Reward Forcing是一种针对实时流式视频生成任务提出的新型蒸馏方法。在视频生成领域,传统的生成对抗网络(GAN)和扩散模型虽然能产生高质量结果,但存在计算成本高、延迟大的问题,难以满足实时交互场景的需求。Reward Forcing通过引…...
从零搭建万卡级训练平台:Python分布式训练基础设施建设白皮书(含Kubernetes+Slurm+RDMA完整拓扑图)
更多请点击: https://intelliparadigm.com 第一章:Python分布式训练基础设施全景概览 现代深度学习模型规模持续扩大,单机训练已难以满足算力与内存需求。Python生态构建了一套分层协同的分布式训练基础设施,涵盖通信后端、任务调…...
避坑指南:YOLOv8搭配DeepOCSORT做多目标跟踪,为什么你的ReID效果差?聊聊权重选择与调参实战
YOLOv8与DeepOCSORT多目标跟踪实战:ReID模型选择与参数调优深度解析 在计算机视觉领域,多目标跟踪(MOT)技术一直是研究热点,而YOLOv8作为当前最先进的检测器之一,结合DeepOCSORT跟踪算法,能够实现高效的实时跟踪。但在…...
3步掌握Bili2text:B站视频转文字终极指南,让学习效率翻倍!
3步掌握Bili2text:B站视频转文字终极指南,让学习效率翻倍! 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 在信息爆炸的时…...
Magicoder代码大模型:OSS-Instruct数据合成与本地部署实战
1. 项目概述:当代码生成遇上“开源魔法” 如果你最近在关注代码大模型(Code LLM)的进展,大概率已经听说过 Magicoder 这个名字。这个由伊利诺伊大学厄巴纳-香槟分校(UIUC)团队开源的项目,在 Hu…...
利用10xcursor规则集与Playwright Stealth绕过浏览器自动化检测
1. 项目概述与核心价值最近在折腾浏览器自动化,特别是处理那些需要模拟真实用户点击、输入行为的场景时,遇到了一个挺有意思的“拦路虎”:验证码和反机器人检测。很多网站,尤其是电商、社交媒体平台,会部署复杂的检测机…...
从哨兵2号到国产高分六号,Python遥感解译全栈工作流:环境配置→辐射定标→大气校正→NDVI/NDWI提取→随机森林分类→精度验证,一步不漏
更多请点击: https://intelliparadigm.com 第一章:Python遥感解译全栈工作流概述 Python 已成为遥感影像解译领域事实上的核心编程语言,其丰富的生态(如 rasterio、GDAL、scikit-learn、torchgeo 和 earthengine-api)…...
LinkSwift:一款基于JavaScript的网盘文件下载地址获取工具
LinkSwift:一款基于JavaScript的网盘文件下载地址获取工具 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...
自动驾驶轨迹预测避坑指南:为什么你的模型对路口转向不敏感?聊聊HiVT的旋转不变性设计
自动驾驶轨迹预测避坑指南:HiVT如何用旋转不变性解决路口转向难题 环岛中央,一辆测试车正以30公里时速平稳行驶。工程师们紧盯着屏幕上的预测轨迹曲线——突然,当车辆开始左转时,模型输出的未来路径像被无形力量拉扯般偏离真实轨迹…...
2026届毕业生推荐的五大AI科研神器横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 降低人工智能生成内容里头机械刻板的那种痕迹,得从多个维度进行系统优化。首先&a…...
