Python 数据驱动工具:DDT
背景
python 的unittest 没有自带数据驱动功能。
所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。
DDT是 “Data-Driven Tests”的缩写。
参考资料:http://ddt.readthedocs.io/en/latest/
使用方法
dd.ddt:
装饰类,也就是继承自TestCase的类。
ddt.data:
装饰测试方法。参数是一系列的值。
ddt.file_data:
装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型。
注意,如果文件以”.yml”或者”.yaml”结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理。
如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。
如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。
ddt.unpack:
传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。字典也可以这样处理。参见下面的示例2.
测试用例方法名生成规则
使用ddt后,会产生一个新的测试用例方法名:之前的测试用例方法名_ordinal_data
之前的测试用例方法名:即定义的测试用例方法名。比如def test_large(),这里就是test_large
ordinal:整数,从1开始递加。
data:如果传递过来的数据存在__name__属性,则这里就是该数据的__name__值。如果未定义__name__属性,ddt会尽量将传递过来的数据转化为python标识符,作为data显示。比如(3,2)就转化为3_2。需要注意的是,如果数据是字典,则这里就是字典的key。
使用示例
1. data直接放入数值
需要导入ddt包,然后再TestCase类上采用@ddt进行装饰,测试方法上装饰@data()。
data可以是数值,也可以是字符串。
import ddt
import unittest
@ddt.ddt
class TestCase(unittest.TestCase):
def setUp(self):
print('开始测试')
#数值
@ddt.data(1,2,3,4,5,6)
def test_case_04(self,value):
print("value1 is"+str(value))
#字符串
@ddt.data('login','17342049522')
def test_case_05(self,value):
print('value is'+value)
if __name__=="__main__": unittest.main()
结果:
开始测试
value1 is1
开始测试
value1 is2
开始测试
value1 is3
开始测试
value1 is4
开始测试
value1 is5
开始测试
value1 is6
开始测试
value islogin
开始测试
value is17342049522
Ran 8 tests in 0.014s
OK
可以看到上面只写了2个测试方法,但是最后run了8个测试用例。
这里测试方法后会被ddt加一个后缀,ddt会尝试吧测试数据转化为后缀附在测试方法后,组成一个新名字。

浙公网安备 33010602011771号