使用Python Decorator实现数据驱动测试
2016-05-26 10:15
357 查看
大家都知道,数据驱动是在编写自动化测试框架时一种常用的设计方法。本文笔者根据自己开发自动化测试框架的经验来谈一谈Python中的数据驱动实现。
每一个需要数据驱动的测试用例,都要重写类似的循环;
写业务测试代码的同时,还需要关心语法逻辑
测试代码中,只需要关心具体的业务逻辑。
本个装饰器的例子并不复杂,『编译』阶段,装饰器会根据CSV文件的行数重写test方法,从而达到数据驱动的目的。
数据驱动的本质
所谓数据驱动,是指一段测试代码的执行次数,由相关数据的多少决定,也就是数据『驱使』代码的执行。举个栗子,一个接口需要测试100种输入,返回结果经过decode之后和预期结果进行比较。一般情况下,大家想到的办法就是循环读取这100种输入和预期结果,然后进行断言。其实,这已经实现了最基本的数据驱动模式。循环的问题
虽然循环能在一定程度上能够解决数据驱动的问题,但是确定缺点也比较明显:每一个需要数据驱动的测试用例,都要重写类似的循环;
写业务测试代码的同时,还需要关心语法逻辑
装饰器设计模式
关于装饰器的介绍文章已经有很多了,在这里就不多做介绍,没有这方面基础的请移步Python装饰器学习Python装饰器实现数据驱动
先给出一段调用示例代码@WebApiBaseTestCase.d_drive_data() def test_negative_total_fee(self, money, code, msg, comment): r = self.bcw.gen_prepay_order_business(money) r_code = r['result']['error']['code'] r_msg = r['result']['error']['message'] self.assertEqual(code, r_code) self.assertEqual(msg, r_msg)
测试代码中,只需要关心具体的业务逻辑。
装饰器源码
def d_drive_data(msg='', level='test'): def _call(f): @functools.wraps(f) def __call(instance, *args, **kwargs): csv_file = instance._get_csv_file(level) print_log('CSV file is here: ' + csv_file) cdf = CsvParser(csv_file) init_data = cdf.get_iterator() # 循环逻辑在这里 for data in init_data: return_ = f(instance, **data) return return_ return __call return _call
本个装饰器的例子并不复杂,『编译』阶段,装饰器会根据CSV文件的行数重写test方法,从而达到数据驱动的目的。
相关文章推荐
- Android之使用Http协议实现文件上传功能
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例