接口测试中 requests
工具的使用总结
1️⃣ 安装与基础介绍
requests
是 Python 中使用最广泛的 HTTP 请求库之一,其设计简单优雅,特别适合接口测试与接口自动化脚本编写。
安装方式:
pip install requests
导入模块:
import requests
2️⃣ 常用请求方法
requests
支持常见的 HTTP 动作,包括 GET
、POST
、PUT
、DELETE
等。以下是基本用法:
# GET 请求
res = requests.get(url, params=params, headers=headers)
# POST 请求(发送表单)
res = requests.post(url, data=data)
# POST 请求(发送 JSON)
res = requests.post(url, json=json_data)
# PUT 请求
res = requests.put(url, data=data)
# DELETE 请求
res = requests.delete(url)
参数说明:
url
:请求地址;params
:GET 请求的 URL 参数;data
:以表单形式传递的请求体;json
:以 JSON 格式传递的请求体;headers
:请求头信息。
3️⃣ 常用参数说明
✅ URL 参数(params
)
以字典形式传递,requests 会自动拼接到 URL 上:
params = {'key': 'value'}
res = requests.get('http://httpbin.org/get', params=params)
✅ 请求头(headers
)
自定义 User-Agent、Token 等字段:
headers = {'User-Agent': 'my-test', 'Authorization': 'Bearer token'}
res = requests.get(url, headers=headers)
✅ 请求体
(1)表单形式:
data = {'username': 'admin', 'password': '123456'}
res = requests.post(url, data=data)
(2)JSON 格式:
json_data = {'username': 'admin', 'password': '123456'}
res = requests.post(url, json=json_data)
使用 json
参数自动设置 Content-Type: application/json
。
4️⃣ 响应内容获取方式
res.text # 返回字符串格式的响应内容
res.json() # 以 JSON 格式解析响应内容(前提是响应为 JSON)
res.content # 获取字节数据(适用于图片、文件下载)
res.status_code # HTTP 状态码
res.headers # 返回响应头信息
可用 res.encoding = 'utf-8'
显式指定字符编码,防止乱码。
5️⃣ 超时、代理和 SSL 证书验证
✅ 设置请求超时时间:
res = requests.get(url, timeout=10)
单位为秒;请求超过指定时间未响应将抛出异常。
✅ 设置代理:
proxies = {
'http': 'http://127.0.0.1:8888',
'https': 'http://127.0.0.1:8888'
}
res = requests.get(url, proxies=proxies)
✅ 忽略 HTTPS 证书验证:
res = requests.get(url, verify=False)
注意:测试环境可使用,正式环境需开启验证以确保安全性。
6️⃣ Cookie 与 Session 管理
✅ 自动携带 Cookie:
s = requests.Session()
s.get(url) # 第一次请求,获取并存储 Cookie
s.get(url2) # 自动附带 Cookie 请求第二个接口
适用于登录态保持、跨接口调用的场景。
✅ 手动设置 Cookie:
cookies = {'sessionid': '123abc'}
res = requests.get(url, cookies=cookies)
7️⃣ 文件上传与下载
✅ 上传文件:
files = {'file': open('test.txt', 'rb')}
res = requests.post(url, files=files)
✅ 下载文件:
res = requests.get(url)
with open('download.png', 'wb') as f:
f.write(res.content)
8️⃣ 异常处理
使用 try...except
可防止程序因请求异常而中断:
try:
res = requests.get(url, timeout=5)
res.raise_for_status() # 状态码异常会抛出异常
except requests.exceptions.RequestException as e:
print(f'请求异常:{e}')
9️⃣ 封装一个通用请求方法(推荐)
为了提高代码复用性,可将请求过程封装为函数:
def send_request(method, url, params=None, data=None, json=None, headers=None, cookies=None, files=None):
method = method.upper()
if method == 'GET':
return requests.get(url, params=params, headers=headers, cookies=cookies)
elif method == 'POST':
return requests.post(url, data=data, json=json, headers=headers, cookies=cookies, files=files)
elif method == 'PUT':
return requests.put(url, data=data, headers=headers, cookies=cookies)
elif method == 'DELETE':
return requests.delete(url, params=params, headers=headers, cookies=cookies)
else:
raise ValueError(f"不支持的请求方法: {method}")
1️⃣0️⃣ 建议与扩展说明
requests
适合用于功能测试、接口联调、接口自动化等场景;- 结合
pytest
、unittest
可实现完整接口测试框架; - 抓包工具如 Fiddler 或 Charles 可配合调试请求过程;
- 若需模拟高并发压测,可进一步学习
locust
、JMeter
等工具; - 推荐集成到自动化平台中,提升测试效率。