背景介绍:
DDT全程为Data Driver Test数据驱动测试,是由测试数据驱动测试用例的执行,加入ddt框架,能够实现用例的重复执行以及代码的重复使用,减小工做量。数据代码分离为主流设计思路,在常见的测试体系中能够使用xml文件、excel文件、json文件来管理测试数据,经过代码自动读取,来驱动用例的执行,ddt测试框架基于这种设计思路上,实现了方便使用,简单易懂的效果json
DDT由几个关键部分组成:
1.装饰类
2.普通装饰器
3.参数拆分框架
在导入ddt框架后,能够使用装饰类ddt,来装饰自定义的测试用例,被ddt装饰的类能够直接使用ddt测试框架
装饰器ddt.data,使用data装饰unittest中的测试方法,该方法能够读取到data中设定的测试数据,来驱动用例的执行ide
unpack的使用,当test_*()方法须要传入多个参数时,须要经过列表或者元组来设定参数,则须要经过unpack方法来解析参数,例如:函数
info = [(1, 2), (3, 4)] @data(*info) @unpack # 下边用例会执行两次 def test_add(self, num1, num2): logger.info(num1 + num2)
下边是个人unnitest结合ddt,进行数据驱动的代码实现,其中
1.myexcel模块是我调用openpyxl模块封装实现的excel基础操做类,博客连接:http://www.javashuo.com/article/p-fnwwbnwx-nu.html
2.myddt是我基于ddt源码进行修改适配后的文件,后续分享
3.myloggin是我基于loggin模块进行封装实现的日志信息输出类,后续分享测试
import unittest # from ddt import ddt, data from myddt import ddt, data,unpack from myunnitest import Register from mylogging.mylogger import logger from myexcel.handle_excel import Handle import os @ddt class RegisterTest(unittest.TestCase): #1.读取测试数据 cur_path = os.path.dirname(__file__) case_path = os.path.join(os.path.dirname(cur_path), "resource\\login_case.xlsx") logger.info(case_path) handle = Handle(case_path, "Sheet1") cases = handle.get_all_caseinfo() print(cases) @classmethod def setUpClass(cls): pass @classmethod def tearDownClass(cls): pass def setUp(self): pass def tearDown(self): pass """解包""" @data(*cases) def test_reister_success(self, case): re = Register.register(case["username"], case["passwd1"], case["passwd2"]) logger.info(re) # 接口返回json,excel里读取出来的数据是字符串格式,因此须要 eval函数将两个数据转化一致 self.assertEqual(re, eval(case["expected"]), "error 参数有误") info = [(1, 2), (3, 4)] @data(*info) @unpack # 下边用例会执行两次 def test_add(self, num1, num2): logger.info(num1 + num2) if __name__ == '__main__': unittest.main()