python ddt数据驱动

一:数据驱动ddt

数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成。

ddt 是第三方模块,需安装:

 pip install ddt

二:DDT包含类的装饰器ddt和方法装饰器data

通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

@ddt 类装饰器,用来标记当前类使用ddt数据驱动

@data 函数装饰器,用来给函数传递数据

@unpack 函数装饰器,用来对传递的数据进行解包,解列表、元组、字典

@file_data 函数装饰器,用来直接读取yaml,json格式的文件数据 读取获取的数据是字典列表

三:案例

@data(a,b)

那么a和b各运行一次用例

@data([a,d],[c,d])

如果没有@unpack,那么[a,b]当成一个参数传入用例运行

如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递 

  • 案例一:

import unittest
from ddt import ddt, data, unpack


@ddt
class MyTesting(unittest.TestCase):

    @data([1, 2, 3])
    def test_1(self, value):
        print(f'test_1:value={value}')

    @data(4,5,6)
    def test_2(self, a):
        print(f'test_2:a={a}')

    @data([3, 2, 1], [5, 3, 2], [10, 4, 6])
    @unpack
    def test_minus(self, a, b, expected):
        actual = int(a) - int(b)
        expected = int(expected)
        self.assertEqual(actual, expected)

    @data([2, 3], [4, 5])
    def test_compare(self, a):
        print(f'test_compare:a={a}')




if __name__ == '__main__':
    unittest.main(verbosity=2)

执行结果:

  •  案例二:

import unittest
from ddt import ddt, file_data


@ddt
class MyTesting(unittest.TestCase):


    @file_data('testdata.yaml')
    def test_yaml(self,**kwargs):
        print(f'读取的yaml数据:{kwargs}')

if __name__ == '__main__':
    unittest.main(verbosity=2)

执行结果:

 

 

posted @ 2022-05-05 15:01  浩浩学习  阅读(166)  评论(0编辑  收藏  举报