import unittest from ddt import ddt,data,unpack test_data = [[1,2],[3,4]] @ddt #装饰类 class TestMethod(unittest.TestCase): @data(test_data) #装饰方法 def test_print(self,a): print(a)
返回结果为:
Ran 1 test in 0.001s OK [[1, 2], [3, 4]]
ddt 是第三方模块,需安装, pip install ddt
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@data(a,b)
那么a和b各运行一次用例
传入的数据参数前加上*号,则是拆分,最多只能加一个*,多个*号无用
import unittest from ddt import ddt,data,unpack test_data = [[1,2],[3,4]] @ddt class TestMethod(unittest.TestCase): @data(*test_data) def test_print(self,a): print(a)
返回结果:
[1, 2] [3, 4] Ran 2 tests in 0.000s OK
unpack是对拆分的每个元素以逗号进行再次拆分,方法的动态传参的个数要相对应
import unittest from ddt import ddt,data,unpack test_data = [[1,2],[3,4]] @ddt class TestMethod(unittest.TestCase): @data(*test_data) @unpack def test_print(self,a,b): print(a) print(b)
返回结果:
Ran 2 tests in 0.002s OK 1 2 3 4
如果unpack要拆分的元素是列表,且列表内的元素个数不一致,如下:
import unittest from ddt import ddt,data,unpack test_data = [[1,2],[3,4,5]] @ddt class TestMethod(unittest.TestCase): @data(*test_data) @unpack def test_print(self,a,b,c=None): print(a) print(b) print(c)
返回结果:
1 2 None 3 4 5 Ran 2 tests in 0.001s OK
如果unpack拆分是字典,方法的动态参数必须是字典的key,否则会报错
import unittest from ddt import ddt,data,unpack test_data = [{"no":1,"name":"lili"}, {"no":2,"name":"godan"}] @ddt class TestMethod(unittest.TestCase): @data(*test_data) @unpack def test_print(self,no,name): print(no) print(name)
返回结果:
Ran 2 tests in 0.001s OK 1 lili 2 godan 进程已结束,退出代码 0