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)
来源:https://www.cnblogs.com/laosun0204/p/12018046.html