我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/9. Python 接口测试脚本怎么写

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 和异常处理。

十三、练习清单

  1. 用 requests 写 GET;
  2. 用 requests 写 POST JSON;
  3. 添加请求头;
  4. 登录提取 Token;
  5. 创建订单后查询订单;
  6. 断言状态码;
  7. 断言业务 code;
  8. 封装 send_request;
  9. 添加 timeout;
  10. 准备接口脚本面试回答。

接口测试脚本的核心是请求、响应、断言和关联。写得清楚、断言有效、失败可定位,比堆很多代码更重要。

配套刷题: