最新Python的装饰器详解:提升接口自动化测试效率,今天带你详细了解各组件原理

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取


在上述示例中,我们定义了一个名为`log\_decorator`的装饰器函数。该装饰器函数接受一个接口测试方法`api\_func`作为参数,并返回一个新的函数`wrapper`。在`wrapper`函数内部,我们可以实现请求日志的打印和响应日志的打印,并调用原接口测试方法`api\_func`。通过在每个接口测试方法上应用`@log\_decorator`装饰器,我们可以实现请求日志和响应日志的自动打印。


现在,我们可以运行接口测试类`ApiTest`中的方法,观察装饰器的效果。每次调用被装饰的接口测试方法时,会自动打印请求日志和响应日志,方便我们查看请求和响应的信息,提高调试和排查问题的效率。‍


3. 装饰器的应用场景推荐  
 除了在接口自动化测试中,装饰器还有很多其他实际应用场景。以下是一些常见的推荐使用装饰器的场景:


- 认证和鉴权:在Web应用中,可以使用装饰器进行用户认证和权限鉴权的校验,确保只有授权用户才能访问特定的功能或页面。


- 日志记录:可以使用装饰器实现日志的自动记录,例如请求日志、异常日志等,方便后续的排查和分析。


- 缓存:通过装饰器可以实现函数的结果缓存,提高函数的执行效率,避免重复计算。


- 性能监控:可以使用装饰器对函数的执行时间、内存占用等进行监控和统计,用于性能分析和优化。


- 事务处理:在数据库操作中,可以使用装饰器实现事务的自动提交和回滚,保证数据的一致性和完整性。


以上只是一些常见的场景,实际上,装饰器的应用非常灵活,可以根据具体需求进行扩展和定制。‍


总结  
 本文详细介绍了Python装饰器的概念、用法和实际应用场景。在接口自动化测试中,装饰器可以帮助我们简化代码,实现功能的复用和扩展,提高测试效率。除了接口自动化测试,装饰器在其他领域也有广泛的应用。希望本文对你理解和应用Python装饰器有所帮助。


如果你对这个项目感兴趣,你可以在你的项目中尝试使用装饰器来提升接口自动化测试的效率和可维护性。以下是一个完整的示例代码,演示了如何使用装饰器实现接口请求日志记录和数据存储的功能:



import requests
import json
import pymysql
from functools import wraps

装饰器函数:记录接口请求日志

def log_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 打印请求信息
print(f"请求URL: {func.name}“)
print(f"请求参数: {kwargs}”)
# 调用原函数
response = func(*args, **kwargs)
# 打印响应信息
print(f"响应结果: {response}")
return response
return wrapper

装饰器函数:保存接口请求数据到MySQL数据库

def save_data_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 调用原函数
response = func(*args, **kwargs)
# 保存数据到MySQL数据库
save_data_to_mysql(response)
return response
return wrapper

保存数据到MySQL数据库

def save_data_to_mysql(data):
connection = pymysql.connect(
host=‘localhost’,
user=‘root’,
password=‘password’,
database=‘mock_data’
)
cursor = connection.cursor()
# 创建表
create_table_sql = “”"
CREATE TABLE IF NOT EXISTS api_data (
id INT AUTO_INCREMENT PRIMARY KEY,
url VARCHAR(255) NOT NULL,
response TEXT
)
“”"
cursor.execute(create_table_sql)
# 插入数据
insert_sql = “INSERT INTO api_data (url, response) VALUES (%s, %s)”
cursor.execute(insert_sql, (data[‘url’], json.dumps(data[‘response’])))
connection.commit()
cursor.close()
connection.close()

接口请求函数:示例

@log_decorator
@save_data_decorator
def get_user_info(user_id):
url = f"https://api.example.com/users/{user_id}"
response = requests.get(url)
return {
‘url’: url,
‘response’: response.json()
}

测试接口调用

get_user_info(1)
get_user_info(2)


在上述示例代码中,我们定义了两个装饰器函数:log\_decorator和save\_data\_decorator。log\_decorator用于记录接口请求日志,save\_data\_decorator用于将接口请求数据保存到MySQL数据库。


然后,我们定义了一个接口请求函数get\_user\_info,并在该函数上应用了两个装饰器。通过装饰器的使用,每次调用get\_user\_info函数时,都会自动打印请求信息和响应结果,并将响应数据保存到MySQL数据库中。


你可以根据自己的实际需求,扩展和定制这些装饰器,添加更多的功能,例如接口鉴权、性能监控等。通过装饰器的灵活使用,可以大大提升接口自动化测试的效率和可维护性。


下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!  
![](https://img-blog.csdnimg.cn/3d7f99a217a04674814aebc15d8ebea5.png)


## **软件测试面试小程序**


被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!


**涵盖以下这些面试题板块:**



> 


![img](https://img-blog.csdnimg.cn/img_convert/3c7d7b29162d59abd03b83b6bec59631.png)
![img](https://img-blog.csdnimg.cn/img_convert/6913b428e9fb0b59dce707b55f0e64ab.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

t/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值