在调用原函数之前的额外操作
result = original_function(*args, **kwargs)
在调用原函数之后的额外操作
return result
return wrapper_function
在上述示例中,decorator_function是装饰器函数,它接受一个原函数original_function作为参数,并返回一个新的函数wrapper_function。wrapper_function内部可以执行一些在调用原函数之前或之后的额外操作。
- 接口自动化测试中的装饰器应用
接口自动化测试是一种常见的测试场景,我们可以利用装饰器来简化测试代码并提高测试效率。下面以一个示例来说明装饰器在接口自动化测试中的应用。
假设我们有一个接口测试类ApiTest,其中包含多个测试方法,每个方法对应一个接口的测试用例。在每个接口测试方法中,我们都需要进行一些公共操作,例如打印请求日志、鉴权、性能监控等。使用装饰器,我们可以将这些公共操作提取出来,封装成一个装饰器函数,然后在每个接口测试方法上应用该装饰器,实现代码复用和功能扩展。
下面是一个示例代码:
def log_decorator(api_func):
def wrapper(*args, **kwargs):
打印请求日志
print(f"Request: {api_func.name}()")
调用原函数
result = api_func(*args, **kwargs)
打印响应日志
print(f"Response: {api_func.name}() -> {result}")
return result
return wrapper
class ApiTest:
@log_decorator
def test_login(self, username, password):
接口测试代码
pass
@log_decorator
def test_create_user(self,email, password):
接口测试代码
@log_decorator
def test_get_user_info(self, user_id):
接口测试代码
pass
在上述示例中,我们定义了一个名为log\_decorator
的装饰器函数。该装饰器函数接受一个接口测试方法api\_func
作为参数,并返回一个新的函数wrapper
。在wrapper
函数内部,我们可以实现请求日志的打印和响应日志的打印,并调用原接口测试方法api\_func
。通过在每个接口测试方法上应用@log\_decorator
装饰器,我们可以实现请求日志和响应日志的自动打印。
现在,我们可以运行接口测试类ApiTest
中的方法,观察装饰器的效果。每次调用被装饰的接口测试方法时,会自动打印请求日志和响应日志,方便我们查看请求和响应的信息,提高调试和排查问题的效率。
- 装饰器的应用场景推荐
除了在接口自动化测试中,装饰器还有很多其他实际应用场景。以下是一些常见的推荐使用装饰器的场景:
-
认证和鉴权:在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数据库。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
:vip1024b (备注软件测试)**
[外链图片转存中…(img-Syww0oEX-1712909791489)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!