一. 数据驱动测试框架 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.bubuko.com/infodetail-3683914.html