接口测试-工作心得记录十二(装饰器的使用)

这个装饰器的功能写完有一阵子了,有个提测任务(也是在斗米最后的上线任务了)就一直没写博客,今天放假没什么事简单写一下。接口有这样一种测试场景就是有些接口(尤其是主流程接口)可能想要动态的增加测试用能(比如说接口响应时间,日志功能等等),这样就需要使用装饰器来修饰case,既灵活又不需要修改case代码,方便好用,这也是我想写这篇博客的原因。

装饰器功能强大,我目前就只会使用最简单的形式,也是看了别的博客,后面我会把博客链接粘出来,写的很好大家可以参考一下。装饰器本质上就是闭包的使用,闭包就是函数的引用,我理解闭包就是把要装饰的函数引用过来但是不运行,完成必要的功能在运行要装饰的函数,这样就完成了函数的动态功能扩展。举个例子,如图:

接口测试-工作心得记录十二(装饰器的使用)


这个就是一个最简单的装饰器,参数func就是函数名称的引用,在外层return 中引用了内函数wrap,ps:引用表示知道函数的名称但是没有运行,加上()才是运行函数。在内函数wrap中增加了获取时间->运行func()函数->计算运行时间并打印出来。运行效果如下:

接口测试-工作心得记录十二(装饰器的使用)


使用@语法糖来修饰被装饰的函数,最后运行结果:

接口测试-工作心得记录十二(装饰器的使用)


这就是最简单的装饰器使用,但是这个装饰器time_count_demo()有二个问题第一个就是如果被装饰的func函数有参数就会报错,另一个就是如果func有返回值,就会丢掉了,如图:

接口测试-工作心得记录十二(装饰器的使用)


下面就是装饰一个有参数func()函数,和运行结果:

接口测试-工作心得记录十二(装饰器的使用)

接口测试-工作心得记录十二(装饰器的使用)


运行就会报错说没有参数,这样就延伸出一个通用的装饰器模板如下:

接口测试-工作心得记录十二(装饰器的使用)


这里面在内函数wrap()中增加了通用参数*args 表示列表,**kwargs表示字典类型参数,解决了通用参数的问题。第二个返回temp_result表示func()运行的返回结果,如果没有返回结果就是none,这个就是通用的装饰器写法,下面是运行结果如图:

接口测试-工作心得记录十二(装饰器的使用)

接口测试-工作心得记录十二(装饰器的使用)


当然装饰器还有其他更复杂的功能后面我用到在写,大概就这些,增加接口测试的扩展性。

参考博客如下:http://www.cnblogs.com/Lin-Yi/p/7306235.html