Python之DDT数据驱动测试
1、安装命令
cmd输入pip install ddt
2、DDT引用
DDT包含类的装饰器ddt(对应testcase子类)和两个方法装饰器data,unpack(直接输入测试数据,对应需要成倍增加的测试),用不同的测试数据运行一个测试用例,从而使它看起来像多个测试用例。
@data:包含的参数数量与要提供给测试的值的数量相同。
@file_data:将从JSON或YAML文件加载测试数据。
通常,数据中的每个值都将作为单个参数传递给测试方法。如果这些值是元组,则必须在测试中解包它们。或者,您可以使用一个附加的装饰器unpack,它将自动将元组和列表解包为多个参数,并将字典解包为多个关键字参数。
3、使用数据驱动框架的意义
- 代码复用率高。同一测试逻辑编写一次,可以被多条测试数据复用,提高了测试代码的复用率,同时可以提高测试脚本的编写效率。
- 异常排查效率高。测试框架依据测试数据,每条数据生成一条测试用例,用例执行过程相互隔离,在其中一条失败的情况下,不会影响其他的测试用例。
- 代码的可维护性高。清晰的测试框架,利于其他测试工程师阅读,提高了代码的可维护性。
4、示例
import unittest
import ddt
list = [{"name": "chen", "age": "25"}, {"name": "xiao", "age": 26}]
@ddt.ddt # 在class类前使用
class MyTesting(unittest.TestCase):
def setUp(self):
print("this is setUp")
@ddt.data(1, 2, [2, 3]) #
def test_one(self, a):
print(a)
@ddt.data([5, 5], [3, 4], [5, 6])
@ddt.unpack # 拆开,非整体,列表的两个参数分别传给a和b
def test_compare(self, a, b):
print(a, b)
# self.assertEqual(a, b)
@ddt.data(*list) # 用*引用
@ddt.unpack # 拆开,非整体
def test_two(self, name, age): # 参数必须和字典key相同
print(name, age)
def tearDown(self):
print('this is tearDown')
if __name__ == '__main__':
unittest.main(verbosity=2)
运行结果:
注意:测试用例的执行顺序是按照测试用例test_xxx中xxx的首字母ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。