使用Python Decorator实现数据驱动测试

大家都知道,数据驱动是在编写自动化测试框架时一种常用的设计方法。本文笔者根据自己开发自动化测试框架的经验来谈一谈Python中的数据驱动实现。

数据驱动的本质

所谓数据驱动,是指一段测试代码的执行次数,由相关数据的多少决定,也就是数据『驱使』代码的执行。举个栗子,一个接口需要测试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方法,从而达到数据驱动的目的。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值