安装: pip install ddt
测试:import ddt
DDT是 “Data-Driven Tests”的缩写
DDT: 包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(获取测试数据)
ddt.ddt:装饰类,也就是继承自TestCase的类
ddt.data:装饰测试方法。参数是一系列的值
ddt.file_data:装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型
ddt.unpack:传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上
先看不适用ddt的例子
# coding:utf-8from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitimport unittest data = [ {'sum_a': 2, 'sum_b': 3, 'result': 5}, {'sum_a': 2, 'sum_b': 3, 'result': 6}, {'sum_a': 5, 'sum_b': 10, 'result': 4} ]def sum(a, b): return a + bclass TestDDT(unittest.TestCase): @classmethod def setUpClass(cls): cls.data = data print '验证a+b,a-b结果' def test_01(self): self.assertTrue(sum(self.data[0]['sum_a'], self.data[0]['sum_b']) == self.data[0]['result']) def test_02(self): self.assertTrue(sum(self.data[1]['sum_a'], self.data[1]['sum_b']) == self.data[1]['result']) def test_03(self): self.assertTrue(sum(self.data[2]['sum_a'], self.data[2]['sum_b']) == self.data[2]['result']) def test_04(self): for i in self.data: self.assertEqual(sum(i['sum_a'], i['sum_b']), i['result']) @classmethod def tearDownClass(cls): print '验证结束'if __name__ == '__main__': unittest.main()
使用之后:
使用之后,代码一方面简洁了很多,在一个测试方法中执行多条测试用例,和图1的test_04相比,如果断言异常也会继续执行(因为是不同的case)
结果(unittest.main(verbosity=2)执行):
使用方法:
首先在Class上添加装饰器@ddt.ddt,其次在调用的方法上引入测试数据data('数据')
新建一个文件 test_data.json
{ "list_num": [ 10, 12, 15 , 23 ], "tuple_num": [ 15, 12, 50 ], "str_num": "welcome"}
引用
结果:
注: 对json格式不太熟悉,不知道元祖为什么不行