python requests 自动化框架 封装请求
时间: 2023-05-15 11:03:23 浏览: 154
Python requests 是一个方便好用的 HTTP 请求库,它可以进行 HTTP 请求的发送、响应处理等操作。可以利用 requests 完成自动化的 API 接口测试,其中自动化框架可以封装请求,避免重复的代码编写,提高测试效率。
在封装请求中,我们可以把请求的 URL、请求头、请求体、请求方式、接口响应等信息都封装进一个方法中。通过参数化来控制请求过程中的一些变量,如请求参数、请求数据等等,从而实现自动化的接口测试。此外,还可以将结果存储到数据库或者文件中。
在封装请求中,我们还可以利用 Python 面向对象的特性,对 requests 库进行进一步封装,将 HTTP 的请求方法进行抽象封装,然后通过实现细节的不同,实现不同的接口测试。
总之,借助 Python requests 自动化框架,我们可以自动化完成 API 接口的请求、参数修改、响应处理、结果验证等操作,从而实现高效、稳定的接口测试。同时,这也为开发人员提供了更多的接口测试思路,以及更多的自动化接口测试方向。
相关问题
python接口自动化分层封装
Python接口自动化分层封装是指将接口自动化测试的代码按照不同的功能和层级进行封装,以提高代码的可维护性和复用性。下面是一个常见的分层封装结构:
1. 接口层:负责与接口进行交互,发送请求并获取响应。可以使用第三方库,如requests或http.client等来实现HTTP请求。
2. 数据层:负责处理接口返回的数据,将数据解析为可读取的格式,如JSON或XML。可以使用内置的json或xml.etree.ElementTree等库来实现数据解析。
3. 业务层:根据接口的具体业务逻辑,进行数据处理、参数拼装等操作。这一层可以根据实际需求进行拓展,例如进行数据加工、校验等操作。
4. 测试层:编写测试用例,调用业务层提供的方法对接口进行测试。可以使用一些测试框架,如unittest或pytest等来组织和执行测试用例。
5. 报告层:生成测试报告,记录接口测试结果和相关信息。可以使用第三方库,如HTMLTestRunner或allure等来生成漂亮的测试报告。
通过将接口自动化测试代码按照以上分层进行封装,可以使代码结构更加清晰,提高代码的可读性和可维护性。同时,也方便在不同的层级上进行单元测试和集成测试,提高测试效率和准确性。
python接口自动化框架搭建
### 构建 Python API 自动化测试框架
#### 使用的技术栈
为了实现接口自动化,可以采用 `python` 结合多个库来完成这一目标。具体来说,会用到 `unittest` 进行单元测试编写,`request` 发起 HTTP 请求,`openpyxl` 处理 Excel 文件中的测试数据,`myddt` 支持参数化测试案例,以及 `pymysql` 实现数据库操作[^1]。
#### 总体架构设计
整个框架的设计围绕着模块化展开,确保各个部分职责分明又相互协作。主要分为以下几个方面:
- **环境准备**:包括但不限于创建虚拟环境、安装依赖项等前置工作。
- **配置管理**:定义全局变量或常量用于存储项目路径、API URL 前缀等信息。
- **工具类封装**:针对特定功能如日志记录、邮件通知等功能进行抽象并提供统一接口。
- **核心业务逻辑层**:
- 测试结果收集与报告生成
- **扩展支持**:考虑未来可能增加的需求,比如与其他系统的集成或是新的特性引入。
#### 示例代码片段展示
以下是基于上述描述的一个简化版例子,展示了如何利用这些组件来进行一次完整的 API 调用测试流程。
```python
import unittest
from ddt import data, unpack, ddt
import requests
import pymysql
from openpyxl import load_workbook
@ddt
class TestApi(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.conn = pymysql.connect(host='localhost', user='root', password='', db='')
@data(('get_user_info', 'POST', '/api/user/info'), ('create_order', 'GET', '/api/order/create'))
@unpack
def test_api(self, name, method, url_path):
wb = load_workbook('cases.xlsx')
sheet = wb.active
row_data = next(sheet.iter_rows(min_row=2, max_col=3))
params = {cell.value for cell in row_data}
response = getattr(requests, method.lower())(f"http://example.com{url_path}", json=params)
cursor = self.conn.cursor()
sql_query = "SELECT * FROM users WHERE id=%s"
cursor.execute(sql_query, (params['id'], ))
result = cursor.fetchone()
expected_result = {"status": True} # Assume this is the expectation from excel file.
actual_result = {'status': bool(result)}
assertEqual(expected_result, actual_result)
if __name__ == '__main__':
unittest.main()
```
此段代码实现了对两个不同 API 的调用,并通过连接 MySQL 数据库获取预期的结果来进行比较校验[^5]。
阅读全文