数据驱动 --ddt

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

 

posted @ 2020-04-15 09:36  反着来就对了  阅读(234)  评论(1)    收藏  举报