Pytest的数据驱动DDT

embedded/2025/3/22 11:49:04/

1、ddt的语法:
@pytest.mark.parametrize(“case”, case_all) 是个装饰器,里面两个数据:
case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变
量;
cace注意要加引号,虽然是个变量 但是要加引号
后面的用例方法里的参数case都是必须要要跟这个装饰器
里的case名字一致。
运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。

"""
1、ddt数据驱动的语法:
- @pytest.mark.parametrize("case", case_all) 是个装饰器,里面两个数据: case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变量;
- cace注意要加引号,虽然是个变量 但是要加引号
- 后面的用例方法/函数里的参数case都是必须要要跟这个装饰器里的case名字一致。运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。2、ddt的2种实现形式:
第一种写法:函数形式用例 的数据驱动:- 写在函数上面,针对当前函数实现数据驱动。第二种: 类形式测试用例的数据驱动:-写在方法上面,只针对当前方法实现数据驱动。-写在类上面也可以,会给类下面每个方法都进行数据驱动。
"""
# 登录的流程函数-开发代码
import pytestdef login(username, passwd):"""登录的函数"""if username != "xxxn":return "用户名错误"if passwd != "xxx":return "密码错误"return "登录成功"#功能模块的测试用例数据
case_all = [{"case_id": 1, "name": "lemon", "pwd": "1234567", "expect": "登录成功"},{"case_id": 2, "name": "lemon1", "pwd": "123456", "expect": "用户名错误"},{"case_id": 3, "name": "lemon", "pwd": "1234", "expect": "密码错误"}]def test_login0():for case in case_all:case_id = case["case_id"]username = case["name"]password = case["pwd"]expect_result = case["expect"]actual_result = login(username, password)assert actual_result == expect_resultprint(f"执行了第{case_id}条用例")
# # pytest数据驱动,执行多条用例,输出不同结果
# # 第一种写法:函数形式用例 的数据驱动: - 写在函数上面,针对当前函数实现数据驱动。
@pytest.mark.parametrize("case", case_all)  # 将cases_all里每个成员依次传递给case这个变量;
def test_login(case):  # 再把这个case变量值传递给pytest用例函数,名字跟"case"一致。case_id = case["case_id"]username = case["name"]password = case["pwd"]expect_result = case["expect"]actual_result = login(username, password)assert actual_result == expect_resultprint(f"执行了第{case_id}条用例")# 第二种: 类形式测试用例的数据驱动:
# @pytest.mark.parametrize("case", case_all)
# class TestLogin:
#     @pytest.mark.parametrize("case", case_all)
#     def test_login01(self, case):
#         case_id = case["case_id"]
#         username = case["name"]
#         password = case["pwd"]
#         expect_result = case["expect"]
#         actual_result = login(username, password)
#         assert actual_result == expect_result
#         print(f"执行了第{case_id}条用例")
#
#     @pytest.mark.parametrize("case", case_all)
#     def test_login02(self, case):
#         case_id = case["case_id"]
#         username = case["name"]
#         password = case["pwd"]
#         expect_result = case["expect"]
#         actual_result = login(username, password)
#         assert actual_result == expect_result
#         print(f"执行了第{case_id}条用例")

http://www.ppmy.cn/embedded/174680.html

相关文章

Java学习笔记-XXH3哈希算法

XXH3是由Yann Collet设计的非加密哈希算法,属于XXHash系列的最新变种,专注于极速性能与低碰撞率,适用于对计算效率要求极高的场景。 极速性能 在RAM速度限制下运行,小数据(如 1-128 字节)处理可达纳秒级&…

验证码设计与前端安全:实现方式、挑战与未来发展趋势深度分析

验证码(CAPTCHA)是一种用于区分人类用户和自动化程序(如机器人)的技术,广泛应用于登录、注册、表单提交等场景。然而,验证码的设计和实现不仅关乎用户体验,还涉及到前端安全问题。 1. 验证码的…

机器学习之KL散度推导

机器学习之KL散度推导 预备知识 熵、交叉熵、条件熵 熵 (Entropy) 这一词最初来源于热力学。1948年,克劳德爱尔伍德香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy)、信息熵 (information entropy)。 对于具体熵的定义和用法推荐…

Python第六章07:元组的定义和操作

# tuple元组的定义和操作# tuple元组定义用小括号:(1,2,3,4,5),可以是不同类型元素 # 给变量定义元组时,写括号不写tuple: a (1,2,3,4,5) # 变量 () 变量 tuple() 空元组变量 # tuple…

《双指针算法指南:LeetCode 经典题解(C++实现)》

《双指针算法指南:LeetCode 经典题解(C实现)》 —— 从快慢指针到对撞指针,刷题效率提升 200%! 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 对撞指针: ⼀般⽤于顺…

31天Python入门——第5天:循环那些事儿

你好,我是安然无虞。 文章目录 1. while循环1.1 while循环的嵌套1.2 补充学习:print函数 2. for循环2.1 range函数2.2 for循环2.3 continue和break以及return2.4 for循环的嵌套 3. 补充学习3.1 enumerate函数3.2 zip函数3.3 不要在遍历列表的过程中删除元素 循环 是…

Linux信号的诞生与归宿:内核如何管理信号的生成、阻塞和递达?

个人主页:敲上瘾-CSDN博客 个人专栏:Linux学习、游戏、数据结构、c语言基础、c学习、算法 目录 一、认识信号 二、信号的产生 1.键盘输入 2.系统调用 3.系统指令 4.硬件异常 5.软件条件 三、信号的保存 1.block 2.pending 3.handler 四、信号…

【解析 ECharts 图表样式继承与自定义】

解析 ECharts 图表样式继承与自定义 本文将详细介绍 ECharts 的样式继承机制,从其原理、演进到实际应用场景,并结合实际开发经验分享一些实战技巧,帮助开发者在构建数据可视化页面时实现更统一、灵活的样式管理与高效开发。 一、背景与来龙…