(一)@pytest.mark.XXX是怎么实现的?
玩过接口自动化的童鞋都用过pytest,基本都是用装饰器实现的,上几个文章我们讲了装饰器的使用原理,这次我们拓展一个新的知识点:@pytest.mark.XXX这个实现原理是什么?
import pytest
@pytest.mark.skip
def test():
pass
我们举个例子 :
@pytest.mark.skip 实际上就是使用pytest模块里面的mark这个对象.skip方法
@模块.对象.方法
(二)我们来自己实现一个这种形式的装饰器
(1)我们新建一个lemon.py文件,创建一个Mark类,里面写了skip函数,skip函数里面有一个嵌套函数wrapper。
(2)再建一个demo1_装饰器扩展.py文件, 创建一个test2方法,然后@lemon.mark.skip, 最后在下面调用test2()试试。
打印结果:
----skip----1
------test2------
----skip----2
下面上源码给大家自己去试一下
from py09_07day import lemon
class Mark:
def skip(self, func):
def wrapper(*args, **kwargs):
print("----skip----1")
res = func()
print("----skip----2")
return res
return wrapper
mark = Mark()
# @lemon.mark.skip ===> @lemon这个类.mark对象.方法
# @skip test2 = skip(test2)
@lemon.mark.skip
def test2():
print('------test2------')
test2()
# 打印结果
----skip----1
------test2------
----skip----2