一.数据驱动测试框架DDT的使用
背景介绍: DDT全程为Data Driver Test数据驱动测试,是由测试数据驱动测试用例的执行,加入ddt框架,可以实现用例的重复执行以及代码的重复使用,减少工作量。数据代码分离为主流设计思路,在常见的测试体系中可以使用xml文件、excel文件、json文件来管理测试数据,通过代码自动读取,来驱动用例的执行,ddt测试框架基于这种设计思路上,实现了方便使用,简单易懂的效果
二.使用方法
DDT由几个关键部分组成: 1.装饰类 2.普通装饰器 3.参数拆分
在导入ddt框架后,可以使用装饰类ddt,来装饰自定义的测试用例,被ddt装饰的类可以直接使用ddt测试框架 装饰器ddt.data,使用data装饰unittest中的测试方法,该方法可以读取到data中设定的测试数据,来驱动用例的执行
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基础操作类,博客链接:https://blog.51cto.com/10808695/2542382 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()
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did167171