26.ddt

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()

你可能感兴趣的