当前位置: 首页 > news >正文

(二)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

查看测试报告展示效果:

image

从报告中可以看到,我们事先通过@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

查看测试报告展示效果:

image

从上面的结果中可以看到:

  • @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

查看测试报告展示效果:

image

从上面的执行结果中可以看到,@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分别表示两个集合&#xff0c;其元素递增排列。 请设计算法求出A与B的交集&#xff0c;并存放于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 本题详解&#xff1a;回溯算法 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丢失的有哪些解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将详细介绍5个解决msvcp140.dl…...

数字图像处理(冈萨雷斯)学习笔记

目录 一.机器视觉和计算机视觉二.图像处理基础1.什么是图像2.如何访问图像 三.图像仿射变换四.灰度变换 一.机器视觉和计算机视觉 机器视觉(Machine Vision,MV)和计算机视觉(Computer Vision&#xff0c;CV)的区别和联系&#xff1a; 机器视觉更注重广义图像信号(激光&#xff…...

MES系统管理范围及标准

一、计划管理 1.1计划分为:月度计划>周计划>日计划; 1.2MES系统一般都会直接精确到日计划(生产工单及生产指令); 1.3MES系统日计划分为三阶排产方式: 1.3.1日计划直接排到车间,由车间自行安排任务; 1.3.2日计划排到产线或设备,对应的班组长按照计划直接生产; 1.…...

vscode运行dlv报错超时

描述 点击F5运行dlv调试go代码时报错&#xff1a;couldnt start dlv dap: connection timeout 解决方式 在网上搜索这个报错&#xff0c;据说是dlv的配置问题&#xff0c;修改配置后还是不行。有人说是dlv和go的版本不匹配&#xff0c;就朝这个方向试试 go版本改为1.19之后…...

【Leetcode合集】1. 两数之和

1. 两数之和 1. 两数之和 代码仓库地址&#xff1a; https://github.com/slience-me/Leetcode 个人博客 &#xff1a;https://slienceme.xyz 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并…...

使用Java解决快手滑块验证码

分析页面结构&#xff1a; 使用浏览器开发者工具分析快手滑块验证码页面的HTML和JavaScript结构&#xff0c;找到滑块验证的相关元素和事件。 模拟滑块滑动&#xff1a; 使用Java的Selenium库或其他网络爬虫工具&#xff0c;模拟用户在滑块上的操作。你需要模拟鼠标点击、拖动…...

瑞吉外卖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 女…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...