DDT与pytest.mark.parametrize参数化区别
参数化表达式: ddt表达式
@pytest.mark.parametrize(“参数名”, 列表数据) @ddt.ddt
def(参数名): class xxx(unittest.TestCase): #一定要继承unitest.TestCase
执行体 @ddt.data(*LD.wrong_datas) #列表要解包
列表[“”] …… def test_login_failed_by_wrongData(self, case): #参数接收列表中的一条数据 参数名随意
执行体
列表[“”] ……
一、DDT解析参数
ddt 是第三方模块,需安装, pip install ddt
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有@unpack,那么[a,b]当成一个参数传入用例运行
如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
1、测试参数如下:
login_data=[{"para":{"mobilephone":"18777770000","pwd":"123456"},"method":"get","msg":"登录成功"},
{"para": {"mobilephone":"18777770000","pwd":"000000"},"method":"get","msg":"用户名或密码错误"},
{"para": {"mobilephone":" ","pwd":"123456"},"method":"get","msg":"手机号不能为空"}]
2、测试用例使用DDT解析参数:
from ddt import ddt,data
#装饰测试类
@ddt
class TestHttpRequest(unittest.TestCase):
#装饰测试用例
@data(*login_data)
def test_login_1(self,data):
res=HttpRequest(data['url'],data['param']).http_request(data['method'])
print("测试结果:{0}".format(res.json()))
执行3条用例
标记函数参数化(测试用例方法前加测试数据):@pytest.mark.parametrize("a,b,expected", testdata)
语法:
ep1 传入单个参数
@pytest.mark.parametrize('参数名',lists)
ep2 传入两个参数
('参数1','参数2',[(参数1_data[0],参数2_data[0]),(参数1_data[1],参数2_data[1])]
传三个或者更多也是这样传。list的每个元素都是一个元祖,元祖里的每个元素和按参数顺序一一对应。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具