9. Python 接口测试脚本怎么写
Python 接口测试脚本是测试开发面试中最容易落地的问题。面试官通常想知道你是否真的写过接口自动化,而不是只会说 requests、pytest、断言。一个完整的接口测试脚本至少应该包含:准备请求地址、请求方法、请求头、请求参数,发送请求,解析响应,断言状态码和业务结果,必要时提取 Token 或关联参数,并记录日志或报告。
测试工程师写接口脚本,重点不是代码多复杂,而是结构清晰、断言有效、数据可维护、异常可定位。不要只写一个 requests.post 就结束,也不要只断言 HTTP 200。真正的接口测试要验证业务结果。
一、接口测试脚本基本流程
通用流程:
准备数据 -> 发送请求 -> 获取响应 -> 解析响应 -> 断言结果 -> 清理数据
具体包括:
- base_url;
- path;
- method;
- headers;
- params 或 json;
- timeout;
- response;
- status_code;
- response.json;
- assert;
- 日志和报告。
二、使用 requests 发送 GET 请求
import requests
url = "https://api.example.com/api/products"
params = {"page": 1, "size": 10}
response = requests.get(url, params=params, timeout=5)
assert response.status_code == 200
result = response.json()
assert result["code"] == 0
GET 请求参数一般放在 params 中。
三、发送 POST JSON 请求
import requests
url = "https://api.example.com/api/login"
payload = {
"username": "tester",
"password": "123456"
}
response = requests.post(url, json=payload, timeout=5)
assert response.status_code == 200
result = response.json()
assert result["code"] == 0
使用 json=payload 时,requests 会自动设置 JSON 请求体。
四、请求头怎么处理
登录后接口通常需要 Token。
headers = {
"Authorization": "Bearer mock_token",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
自动化中通常先调登录接口获取 Token,再传给后续接口。
五、提取 Token
login_result = login_response.json()
token = login_result["data"]["token"]
headers = {"Authorization": f"Bearer {token}"}
提取字段前最好断言字段存在,避免 KeyError 不清晰。
六、接口关联怎么做
接口之间经常有关联,比如创建订单后查询订单。
create_result = create_response.json()
order_id = create_result["data"]["order_id"]
query_url = f"https://api.example.com/api/orders/{order_id}"
query_response = requests.get(query_url, headers=headers)
接口关联是自动化测试的核心能力之一。
七、断言应该断什么
不要只断言 HTTP 200。
建议断言:
- HTTP 状态码;
- 业务 code;
- message;
- data 关键字段;
- 数据库结果;
- 响应时间;
- Header;
- 业务状态流转。
例如:
assert response.status_code == 200
assert result["code"] == 0
assert result["data"]["status"] == "paid"
八、异常处理和超时
接口请求要设置 timeout,避免脚本一直卡住。
try:
response = requests.get(url, timeout=5)
except requests.exceptions.Timeout:
raise AssertionError("接口请求超时")
异常信息要带上 URL 和参数,方便定位。
九、封装请求方法
不要每个用例重复写 requests。
def send_request(method, url, headers=None, params=None, json=None):
response = requests.request(
method=method,
url=url,
headers=headers,
params=params,
json=json,
timeout=5
)
return response
用例中:
response = send_request("GET", url, headers=headers, params=params)
十、结合 Pytest
def test_login_success():
response = requests.post(
"https://api.example.com/api/login",
json={"username": "tester", "password": "123456"},
timeout=5
)
result = response.json()
assert response.status_code == 200
assert result["code"] == 0
实际项目会把 URL、数据、请求封装、断言拆分到不同模块。
十一、常见错误
1. 不设置 timeout
接口异常时脚本可能长时间卡住。
2. 只断言状态码
HTTP 200 不代表业务成功。
3. Token 写死
Token 过期后脚本失败,应该动态登录获取。
4. 数据写死
测试数据不可维护,建议数据驱动。
5. 不记录请求和响应
失败时无法定位。
十二、面试回答模板
如果面试官问“Python 接口测试脚本怎么写”,可以这样回答:
我一般用 requests 发送接口请求,用 pytest 组织用例。脚本流程是准备 base_url、path、method、headers 和请求参数,发送请求后获取 response,先断言 HTTP 状态码,再解析 JSON 断言业务 code、message 和 data 关键字段。如果接口需要登录,我会先调用登录接口提取 Token,放到 Authorization Header 中;如果接口有关联,比如创建订单后查询订单,会从创建接口响应中提取 order_id 给后续接口使用。项目中会封装统一请求方法、日志、断言和数据读取,并设置 timeout 和异常处理。
十三、练习清单
- 用 requests 写 GET;
- 用 requests 写 POST JSON;
- 添加请求头;
- 登录提取 Token;
- 创建订单后查询订单;
- 断言状态码;
- 断言业务 code;
- 封装 send_request;
- 添加 timeout;
- 准备接口脚本面试回答。
接口测试脚本的核心是请求、响应、断言和关联。写得清楚、断言有效、失败可定位,比堆很多代码更重要。
配套刷题:

