Python Requests 模块
在自动化测试领域,接口测试作为系统不同模块间的交互验证至关重要。今天我们聚焦如何使用 Python 中的 requests 模块来实现接口自动化测试。下面我介绍一下 requests 的常用方法、数据传输方式以及应对实际项目中的常见问题。
一、什么是 Requests 模块?
Section titled “一、什么是 Requests 模块?”requests 是 Python 中广泛使用的库,用于简化 HTTP 请求的发送和响应处理。无论是调用 API、下载文件,还是处理复杂的会话管理,requests 都能提供人性化的解决方案。
1. 安装 Requests 模块
Section titled “1. 安装 Requests 模块”如果尚未安装 requests,可以通过以下命令快速安装:
pip install requests二、基础使用方法
Section titled “二、基础使用方法”1. 发送 POST 请求
Section titled “1. 发送 POST 请求”在接口测试中,POST 请求经常用于发送数据。假设我们测试一个登录接口,需要传递用户名和密码作为请求参数。
import requests
# 设置请求的 URL 和参数url = 'http://127.0.0.1:8787/login'headers = {'Content-Type': 'application/x-www-form-urlencoded'}data = {'username': 'testuser', 'password': 'testpass'}
# 发起 POST 请求response = requests.post(url, headers=headers, data=data)
# 查看响应状态码和内容print(response.status_code) # 200 表示请求成功print(response.text) # 返回服务器响应的文本内容2. GET 请求与参数传递
Section titled “2. GET 请求与参数传递”GET 请求常用于获取服务器资源,如获取商品列表。我们可以传递查询参数,服务器根据参数返回特定的数据。
url = 'http://127.0.0.1:8787/products'params = {'category': 'electronics'}
response = requests.get(url, params=params)
# 输出返回的 JSON 数据print(response.json())三、POST 与 GET 请求的区别
Section titled “三、POST 与 GET 请求的区别”在实际项目中,选择 POST 还是 GET 取决于数据传递的需求:
- GET 请求:用于从服务器获取数据,查询参数通过 URL 传递,适用于获取资源。
- POST 请求:用于提交数据到服务器,参数在请求体中,适用于数据提交或修改。
四、数据传递格式
Section titled “四、数据传递格式”1. 表单提交与 JSON 数据
Section titled “1. 表单提交与 JSON 数据”POST 请求的数据传输方式主要有两种:表单数据 和 JSON 数据。
- 表单提交:
data = {'username': 'testuser', 'password': 'testpass'}response = requests.post(url, data=data)- JSON 提交:
json_data = {'username': 'testuser', 'password': 'testpass'}response = requests.post(url, json=json_data)不同的接口通常有特定的数据格式要求,测试时需依据接口文档确定数据传输方式。
五、会话管理与持久性连接
Section titled “五、会话管理与持久性连接”在一些需要多次请求的场景下,使用会话对象 Session 可以管理持久性连接,避免重复登录等繁琐操作。尤其是涉及用户登录、会话保持的场景,Session 的使用至关重要。
# 创建会话对象session = requests.Session()
# 使用会话对象进行登录login_url = 'http://127.0.0.1:8787/login'session.post(login_url, data={'username': 'testuser', 'password': 'testpass'})
# 登录后,访问受保护的资源protected_url = 'http://127.0.0.1:8787/protected'response = session.get(protected_url)
print(response.text)六、处理响应结果
Section titled “六、处理响应结果”在自动化测试中,我们不仅关心接口的响应状态码,还需要处理接口返回的数据格式。requests 支持多种返回格式:
- 文本类型:
print(response.text) # 返回文本格式的响应- JSON 类型:
print(response.json()) # 解析 JSON 响应- 二进制内容:
print(response.content) # 获取二进制内容,如图片或文件此外,当遇到编码问题时,可以使用 response.encoding 或通过手动解码方式来处理。
七、应对 HTTPS 证书验证
Section titled “七、应对 HTTPS 证书验证”在测试 HTTPS 接口时,可能会遇到证书验证错误,尤其是在开发环境中。可以通过以下方式禁用证书验证:
response = requests.get(url, verify=False)八、错误处理与异常捕获
Section titled “八、错误处理与异常捕获”requests 提供了强大的异常处理机制,在测试过程中可以捕获网络错误或超时问题:
try: response = requests.get(url, timeout=5) response.raise_for_status() # 检查请求是否成功except requests.exceptions.HTTPError as http_err: print(f'HTTP error occurred: {http_err}')except requests.exceptions.RequestException as err: print(f'Other error occurred: {err}')