python ddt数据驱动
一:数据驱动ddt
数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成。
ddt 是第三方模块,需安装:
pip install ddt
二:DDT包含类的装饰器ddt和方法装饰器data
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@ddt 类装饰器,用来标记当前类使用ddt数据驱动
@data 函数装饰器,用来给函数传递数据
@unpack 函数装饰器,用来对传递的数据进行解包,解列表、元组、字典
@file_data 函数装饰器,用来直接读取yaml,json格式的文件数据 读取获取的数据是字典列表
三:案例
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有@unpack,那么[a,b]当成一个参数传入用例运行
如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
-
案例一:
import unittest from ddt import ddt, data, unpack @ddt class MyTesting(unittest.TestCase): @data([1, 2, 3]) def test_1(self, value): print(f'test_1:value={value}') @data(4,5,6) def test_2(self, a): print(f'test_2:a={a}') @data([3, 2, 1], [5, 3, 2], [10, 4, 6]) @unpack def test_minus(self, a, b, expected): actual = int(a) - int(b) expected = int(expected) self.assertEqual(actual, expected) @data([2, 3], [4, 5]) def test_compare(self, a): print(f'test_compare:a={a}') if __name__ == '__main__': unittest.main(verbosity=2)
执行结果:
-
案例二:
import unittest from ddt import ddt, file_data @ddt class MyTesting(unittest.TestCase): @file_data('testdata.yaml') def test_yaml(self,**kwargs): print(f'读取的yaml数据:{kwargs}') if __name__ == '__main__': unittest.main(verbosity=2)
执行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!