今天,接上上一篇的的内容,继续讲解单元测试,我们在用python代码通过函数的方法来写测试用例,确实可以,但是这些方法中,很多代码量是重复的,有没有简捷化的处理呢?有,ddt就是一个很好用的工具,那么什么是ddt呢?
ddt:英文全称为 data driver tsest 中文意思:数据驱动用例 我们在实际的工作中来运用,就是根据数据来生成测试用例,至于这个ddt怎么用,且听我慢慢道来,一学就会,很容易上手。
先看我昨天自己写的一个测试用例类,一个类里面写了10个方法,每个方法都代表着一个用例,但是,很多都是重复的,怎么办?
可以利用ddt来处理,不需要重复写这么多代码,只需要把数据放在外面,在方法里面调用就行
1、首先安装ddt
2、代码中导入ddt
import unittest import ddt from day_14.task_day13.register import register_check case_data = [ {"expected": {"code": 1, "msg": "注册成功"}, "data": {'username': 'python999', 'password1': '123456789', 'password2': '123456789'}}, {"expected": {"code": 0, "msg": "该账户已存在"}, "data": {'username': 'python31', 'password1': '123456', 'password2': '123456'}}, {"expected": {"code": 0, "msg": "两次密码不一致"}, "data": {'username': 'python111', 'password1': '12377', 'password2': '123456789'}} ] @ddt.ddt class TestRegister(unittest.TestCase): """注册的测试用例类""" @ddt.data(*case_data) def test_register(self, item): # 第一步:准备用例数据 expected = item["expected"] data = item["data"] # 第二步:传入参数 res = register_check(**data) # 拆包,字典拆包是两个*号,列表和元组拆包是一个*号 # 第三步:比对预期结果和实际结果(断言) self.assertEqual(expected, res) if __name__ == '__man__': unittest.main()
对以上代码,进行截图解析
关于那个case_data,它其实就是一个列表,用来装数据的列表,
运行后的结果截图:
那么有的同学会问,既然你前面提到了,那么如果要执行100条或者1000条用例,怎么办,也是case_data=[ ],里面写100个或者1000个?
可以用循环:
# @ddt.data(1, 2, 3, 4) # 传了4个参数,就生成4条用例
# li = list(range(1, 100)) # 生成99条用例 # @ddt.data(*li)
所以,ddt用起来很方便,就那么关键几步,所以,一学就会