python ddt实现数据驱动

青春壹個敷衍的年華 提交于 2019-12-10 17:51:27

ddt是第三方模块,需安装,pip install ddt,ddt包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,如元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据

import unittestfrom ddt import data, unpack, ddt@ddtclass MyTesting(unittest.TestCase):    def setUp(self):        print('this is setUp')    # @data(a,b),那么a和b各运行一次用例,下面的代码会打印出this is setUp,1,this is setUp,2,this is setUp,3    @data(1, 2, 3)    def test_1(self, value):        print(value)    # 如果没有@unpack,那么[a,b]当成一个参数传入用例运行,如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递    @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)    # test_compare的测试结果是fail的,由于没有加@unpack, 虽然还是会被理解成2组测试数据,    # 但是[2,3]作为一个整体被传给了a, 因为b就没有值传入了,    # 所以一执行后报了TypeError: test_compare() missing 1 required positional argument: 'b'    @data([2, 3], [4, 5])    def test_compare(self, a, b):        self.assertEqual(a, b)    def tearDown(self):        print('this is tearDown')# 这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值# 0 (静默模式)  1 (默认模式)  2 (详细模式):测试结果会显示每个测试用例的所有相关的信息if __name__ == '__main__':    unittest.main(verbosity=2)
@ddtclass MyTest(unittest.TestCase):    # @data()里的数据组可以为元组,list,字典    @data((8, 6), (4, 0), (15, 6))    @unpack    def test_tuples(self, first, second):        self.assertTrue(first > second)    @data([30, 29], [40, 30], [5, 3])    @unpack    def test_list(self, first, second):        self.assertTrue(first > second)    @data({'first': 1, 'second': 3, 'third': 5},          {'first': 4, 'second': 7, 'third': 8})    @unpack    def test_dicts(self, first, second, third):        self.assertTrue(first < second < third)if __name__ == '__main__':    unittest.main(verbosity=2)
import unittest, csvfrom ddt import ddt, data, unpackdef get_csv(filename):    rows = []    with open(filename, encoding='utf8') as f:        readers = csv.reader(f)        for row in readers:            rows.append(row)    return rows@ddtclass MyTest(unittest.TestCase):    # *get_csv('new.csv')是一个二维list,通过unpack分解成多个一维list    @data(*get_csv('new.csv'))    @unpack    def test_data_csv(self, v1, v2, v3):        print(v1)        print(v2)        print(v3)if __name__ == '__main__':    unittest.main(verbosity=2)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!