python自动化测试需要有装饰器吗?
为什么需要装饰器呢?场景:计算一个函数的执行时间。一种方法就是定义一个函数,用来专门计算函数的运行时间,然后运行时间计算完成之后再处理真正的业务代码,代码如下:但是这段代码的逻辑破坏了原有的代码逻辑,就是对所有func函数的调用都需要使用g...
为什么需要装饰器呢?
场景:计算一个函数的执行时间。一种方法就是定义一个函数,用来专门计算函数的运行时间,然后运行时间计算完成之后再处理真正的业务代码,代码如下:
但是这段代码的逻辑破坏了原有的代码逻辑,就是对所有func函数的调用都需要使用get_time(func)来实现。那么,有没有更好的展示方式呢?当然有,那就是装饰器。结合上述实例,编写装饰器:
这样,一个简单的完整的装饰器就实现了,可以看到,装饰器并没有影响函数的执行逻辑和调用。在Python中,可以使用"@"语法糖来精简装饰器的代码,将上例更改为:
3.6-2 带参数的装饰器
装饰器有很大的灵活性,它本身支持参数,例如在上述实例中,@get_time装饰器唯一的参数就是执行业务的函数,当然也可以在装饰器中添加参数,加以逻辑判断。上述实例中,myfunc()是没有参数的,那如果添加参数的话,装饰器该如何编写呢?
Python中,常见的类装饰器包括:@staticmathod、@classmethod和@property。
@staticmethod:类的静态方法,跟成员方法的区别是没有self参数,并且可以在类不进行实例化的情况下调用。
@classmethod:跟成员方法的区别是接收的第一个参数不是self,而是cls(当前类的具体类型)
@property:表示可以直接通过类实例直接访问的信息。
小结:
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple;
**kwargs是关键字参数,kwargs接收的是一个dict。
以及调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过kwargs传入:func({'a': 1, 'b': 2})。
使用*args和**kwargs是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
如有疑问,请留言告知,或者咨询柠檬班自动化测试培训平台:www.ceshiren.com官网客服哦
留言领取100G软件测试全面课程视频。