1、装饰器以 @开头,在不修改原函数代码的前提,扩展函数功能。
固定语法:
@装饰器名字
def 函数():
函数内容
关键点:
@必须写在函数正上方 、
@和函数之间不能有空行、
不用调用,自动生效。
作用:给下面的函数加功能。
2、示例:
#1、先有一个装饰器 (系统自带or自己写) def my_decorator(func): def wrapper(): print("before") #额外功能 func() #执行原函数 print("after") #额外功能 return wrapper #2、使用装饰器 @my_decorator def say_hello(): print("hello") #3、调用函数 say_hello()
运行结果:
before
hello
after
3、最常用的装饰器语法
①夹具装饰器 (最常用)
@pytest.fixture def login(): print("登录")
② 跳过用例
@pytest.mark.skip def test_login(): assert 1==1
③标记用例
@pytest.mark.smoke def test_pay(): pass
一句话总结装饰器用法:
就是在函数头上戴一顶“功能帽子”,不加代码、不改动逻辑,自动增强功能!
4、测试最常用的场景
① 实现前置、后置操作
@pytest.fixture def 登录前置(): #前置 yield #后置
② 权限校验、登录判断
执行函数之前,先判断有没有登录、有没有权限
没登录 → 直接拦截,不执行功能
有登录 → 正常运行
③ 日志记录 【自动化常用】
自动给每一个函数打印:
开始时间
结束时间
运行结果
报错信息
不用每个用例手动写print
④ 异常捕获、错误重试【接口自动化常用】
接口偶尔超时、失败
用装饰器实现失败自动重试3次
不用改原来的接口代码
⑤ 计时统计
自动统计函数/用例运行耗时
用来排查:哪个接口慢、哪个用例卡顿
⑥ 缓存数据
重复调用同一个方法时,直接拿旧数据,不用重复请求
比如:反复获取验证码、反复查数据库、提高效率
⑦ pytest用例标记/控制执行
@pytest.mark.smoke #冒烟用例 @pytest.mark.skip #跳过用例 @pytest.mark.error #异常用例
通过装饰器给用例打标签,批量执行/跳过
⑧ 参数校验
执行函数前,检查参数是否合法
比如:手机号、账号格式不对,直接拦截
浙公网安备 33010602011771号