ddt 是第三方模块,需安装, pip install ddt
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@data(a,b)
a和b各运行一次用例,该方法会调用2次
@data([a,d],[c,d])
如果没有@unpack,那么[a,b]当成一个参数传入用例运行
如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
1、首先安装ddt
$>pip install ddt
由于已经安装过了,所以提示为下面的,可以忽略
2、安装完毕之后,可以配合unittest来实操一下,具体看例子。
import ddt import unittest ## 定义任意的参数,list,dict,str,tuple等等 t_list = [1,2] t_dict = {"a":"a","b":"b"} t_str = 'test_string' t_tuple = (1,2) @ddt.ddt class Test(unittest.TestCase): def setUp(self): print('start') ##这个仅有一个参数,将t_list赋值给data,打印 @ddt.data(t_list) def test_a(self,data): print(data) ## 这个有多个参数传入时,有一个函数接受 @ddt.data(t_list,t_dict,t_str,t_tuple) def test_b(self,data): print(data) ## 这个有多个参数传入,有多个函数接收 @ddt.data(t_list,t_dict,t_str,t_tuple) def test_c(self,a,b,c,d): print(a) print(b) print(c) print(d) if __name__ == '__main__': unittest.main()
结果如下:
由上可以看出,第一个,第二个函数执行没有问题,第三个函数执行报错了。可以得出如下
---可以传入多个类型的参数,可以接受多个类型
---可以同时传入多个类型的参数,分别传入,每个参数都会执行一次测试函数,作为一个整体传给测试函数。
3、那么如果我们单个传入参数的内容有很多,需要分解一下来执行呢?这个时候就要用到unpack了,如下
import ddt import unittest ## 定义任意的参数,list,dict,str,tuple等等 t_dict = {"a":'a',"b":"b","c":"c"} @ddt.ddt class Test(unittest.TestCase): def setUp(self): print('start') ##这里加了unpack,分别给传入对应参数 @ddt.data(t_dict) @ddt.unpack def test_a(self,a,b,c): print(a) print(b) print(c) ##这里没有加unpack,分别对应参数 @ddt.data(t_dict) def test_b(self,a,b,c): print(a) print(b) print(c) if __name__ == '__main__': unittest.main()
结果如下:
由上,我们可以得到,unpack的用法