DDT的使用
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据)
只有yaml和yml结尾的文件以yaml形式上传,其他情况下默认为json
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有unpack,那么[a,b]当成一个参数传入用例运行
如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递
用法总结
1、@ddt用装饰测试用例类,放在测试用例类定义上面
2、@data用来测试用例,放在测试用例上
3、@data括号里的参数用逗号分割,@data(1,2,3),被装饰的用例执行3次
4、@data括号里的参数如果不是直接传,而是通过变量传的话,变量前需要加*分割变量
test_data = (1,2,3) @data(*test_data)不然被装饰的用例只会执行一次
5、@upack解压,当测试用例一次传入参数需要用unpack,
test_data = ((1,2,3),(2,3,4))
@data(*test_data) #*号按逗号分割参数,分割几个参数代表执行测试用例执行几次
@unpack #测试用例需要传入3个参数需要将分割后的参数解压
6#元祖或者列表中每个元素是测试用例一次传入参数,
若有一条测试用例有多个参数,则需要对每个参数进行unpack,
列表或者元素可以是元祖、列表、字典
__author__ = 'Administrator'
import unittest
from ddt import ddt,data,unpack,file_data
testData = (1,2,3)
testData1 = [{"name":"yangyang","age":18},{"name":"chunchun","age":19}]
@ddt#ddt类装饰器放在需要装饰的类前面
class testClass(unittest.TestCase):
def setUp(self):
print("测试开始了")
#1、data装饰器直接传值
@data(1,2)#data函数装饰器放在需要装饰的函数前面,类似位置参数
def test_case_1(self,a):
print("测试用例1输出值",a)
#2、data装饰器直接传值
@data([1,2],[3,4])#data函数装饰器放在需要装饰的函数前面,
def test_case_2(self,a):
print("测试用例2输出值",a)
#3、data装饰器直接传值
@data([1,2],[3,4])#data函数装饰器放在需要装饰的函数前面
@unpack
def test_case_3(self,a,b):
print("测试用例3输出值",a,b)
#4、data装饰器变量传值,变量前面加*号,位置参数格式化
@data(*testData)#data函数装饰器放在需要装饰的函数前面,
def test_case_4(self,a):
print("测试用例4输出值",a)
#4、data装饰器变量传值,变量前面加*号,位置参数格式化
@data(*testData1)#data函数装饰器放在需要装饰的函数前面,
@unpack
def test_case_5(self,name,age): #类似关键字参数
print("测试用例5输出值",name,age)
def tearDown(self):
print("测试结束了")
if __name__ == "__main__":
unittest.main()
__author__ = 'Ad__author__ = 'Administrator'import unittestfrom ddt import ddt,data,unpack,file_data
testData = (1,2,3)testData1 = [{"name":"yangyang","age":18},{"name":"chunchun","age":19}]
@ddt#ddt类装饰器放在需要装饰的类前面class testClass(unittest.TestCase): def setUp(self): print("测试开始了") #1、data装饰器直接传值 @data(1,2)#data函数装饰器放在需要装饰的函数前面,类似位置参数 def test_case_1(self,a): print("测试用例1输出值",a)
#2、data装饰器直接传值 @data([1,2],[3,4])#data函数装饰器放在需要装饰的函数前面, def test_case_2(self,a): print("测试用例2输出值",a)
#3、data装饰器直接传值 @data([1,2],[3,4])#data函数装饰器放在需要装饰的函数前面 @unpack def test_case_3(self,a,b): print("测试用例3输出值",a,b)
#4、data装饰器变量传值,变量前面加*号,位置参数格式化 @data(*testData)#data函数装饰器放在需要装饰的函数前面, def test_case_4(self,a): print("测试用例4输出值",a)
#4、data装饰器变量传值,变量前面加*号,位置参数格式化 @data(*testData1)#data函数装饰器放在需要装饰的函数前面, @unpack def test_case_5(self,name,age): #类似关键字参数 print("测试用例5输出值",name,age) def tearDown(self): print("测试结束了")
if __name__ == "__main__": unittest.main()ministrator'import unittestfrom ddt import ddt,data,unpack,file_data
testData = (1,2,3)testData1 = [{"name":"yangyang","age":18},{"name":"chunchun","age":19}]
@ddt#ddt类装饰器放在需要装饰的类前面class testClass(unittest.TestCase): def setUp(self): print("测试开始了") #1、data装饰器直接传值 @data(1,2)#data函数装饰器放在需要装饰的函数前面,类似位置参数 def test_case_1(self,a): print("测试用例1输出值",a)
#2、data装饰器直接传值 @data([1,2],[3,4])#data函数装饰器放在需要装饰的函数前面, def test_case_2(self,a): print("测试用例2输出值",a)
#3、data装饰器直接传值 @data([1,2],[3,4])#data函数装饰器放在需要装饰的函数前面 @unpack def test_case_3(self,a,b): print("测试用例3输出值",a,b)
#4、data装饰器变量传值,变量前面加*号,位置参数格式化 @data(*testData)#data函数装饰器放在需要装饰的函数前面, def test_case_4(self,a): print("测试用例4输出值",a)
#4、data装饰器变量传值,变量前面加*号,位置参数格式化 @data(*testData1)#data函数装饰器放在需要装饰的函数前面, @unpack def test_case_5(self,name,age): #类似关键字参数 print("测试用例5输出值",name,age) def tearDown(self): print("测试结束了")
if __name__ == "__main__": unittest.main()