--
:
--
:
--
第五阶段:接口测试实战
最后更新于:
第五阶段:接口测试实战
一、环境准备
1.1 安装requests库
1pip install requests1.2 检查安装
1pip list | findstr requests
2# requests 2.28.2二、接口测试基础
2.1 HTTP请求方法
| 方法 | 说明 | 常用场景 |
|---|---|---|
| GET | 获取资源 | 查询列表、查询详情 |
| POST | 创建资源 | 添加数据、提交表单 |
| PUT | 更新资源 | 更新完整资源 |
| PATCH | 更新资源 | 更新部分资源 |
| DELETE | 删除资源 | 删除数据 |
2.2 常用请求参数
| 参数 | 说明 | 示例 |
|---|---|---|
url | 请求地址 | https://api.example.com/users |
params | URL查询参数 | {"page": 1, "size": 10} |
headers | 请求头 | {"Content-Type": "application/json"} |
json | JSON请求体 | {"name": "test", "email": "test@example.com"} |
data | 表单请求体 | {"name": "test", "email": "test@example.com"} |
timeout | 请求超时时间 | 10(秒) |
2.3 响应对象属性
| 属性 | 说明 | 示例 |
|---|---|---|
status_code | HTTP状态码 | 200、404、500 |
headers | 响应头 | response.headers["Content-Type"] |
json() | JSON响应体 | response.json() |
text | 文本响应体 | response.text |
content | 二进制响应体 | response.content |
三、接口测试框架设计
3.1 项目结构
1tests/
2├── api/
3│ ├── conftest.py # API测试专用fixture
4│ ├── test_users.py # 用户接口测试
5│ └── test_orders.py # 订单接口测试
6└── conftest.py # 全局fixture3.2 全局fixture
1# tests/conftest.py
2import pytest
3import requests
4
5@pytest.fixture(scope="session")
6def api_client():
7 session = requests.Session()
8 session.base_url = "http://127.0.0.1:8000"
9 yield session
10 session.close()3.3 测试数据准备
1# tests/api/conftest.py
2import pytest
3
4@pytest.fixture
5def test_user(api_client):
6 user_data = {
7 "name": "测试用户",
8 "email": "test@example.com",
9 "vip": False
10 }
11 response = api_client.post(f"{api_client.base_url}/users", json=user_data)
12 user = response.json()
13 yield user
14 api_client.delete(f"{api_client.base_url}/users/{user['id']}")四、接口测试用例设计
4.1 正向用例
1def test_create_user_success(api_client):
2 user_data = {
3 "name": "新用户",
4 "email": "newuser@example.com",
5 "vip": False
6 }
7 response = api_client.post(f"{api_client.base_url}/users", json=user_data)
8 assert response.status_code == 201
9 created_user = response.json()
10 assert created_user["name"] == "新用户"
11 assert created_user["email"] == "newuser@example.com"4.2 反向用例
1def test_create_user_without_email(api_client):
2 user_data = {"name": "无邮箱用户"}
3 response = api_client.post(f"{api_client.base_url}/users", json=user_data)
4 assert response.status_code == 4224.3 参数化测试
1@pytest.mark.parametrize("user_data", [
2 {"name": "新用户1", "email": "newuser1@example.com", "vip": False},
3 {"name": "新用户2", "email": "newuser2@example.com", "vip": True},
4])
5def test_create_user_success(api_client, user_data):
6 response = api_client.post(f"{api_client.base_url}/users", json=user_data)
7 assert response.status_code == 201
8 created_user = response.json()
9 assert created_user["name"] == user_data["name"]五、配置管理
5.1 使用pytest-base-url
1pip install pytest-base-url5.2 配置文件
1# pytest.ini
2[pytest]
3addopts = --base-url=http://127.0.0.1:80005.3 动态获取配置
1@pytest.fixture(scope="session")
2def api_client(request):
3 base_url = request.config.getoption("--base-url") or "http://127.0.0.1:8000"
4 session = requests.Session()
5 session.base_url = base_url
6 yield session
7 session.close()六、示例代码
6.1 用户接口测试
1# tests/api/test_users.py
2import pytest
3
4class TestUserAPI:
5 def test_get_users(self, api_client):
6 response = api_client.get(f"{api_client.base_url}/users")
7 assert response.status_code == 200
8 assert isinstance(response.json(), list)
9
10 def test_get_user_success(self, api_client):
11 response = api_client.get(f"{api_client.base_url}/users/1")
12 assert response.status_code == 200
13 user = response.json()
14 assert user["id"] == "1"
15 assert user["name"] == "张三"
16
17 def test_get_user_not_found(self, api_client):
18 response = api_client.get(f"{api_client.base_url}/users/999")
19 assert response.status_code == 404
20 assert "用户不存在" in response.json()["detail"]
21
22 def test_update_user_success(self, api_client, test_user):
23 update_data = {"name": "更新后的用户", "vip": True}
24 response = api_client.put(f"{api_client.base_url}/users/{test_user['id']}", json=update_data)
25 assert response.status_code == 200
26 updated_user = response.json()
27 assert updated_user["name"] == "更新后的用户"6.2 订单接口测试
1# tests/api/test_orders.py
2import pytest
3
4class TestOrderAPI:
5 def test_create_order_success(self, api_client):
6 order_data = {
7 "user_id": "1",
8 "items": [{"name": "商品1", "price": 100}, {"name": "商品2", "price": 200}]
9 }
10 response = api_client.post(f"{api_client.base_url}/orders", json=order_data)
11 assert response.status_code == 201
12 order = response.json()
13 assert order["user_id"] == "1"
14 assert order["total"] == 300
15 assert order["status"] == "pending"
16
17 def test_create_order_user_not_found(self, api_client):
18 order_data = {"user_id": "999", "items": [{"name": "商品1", "price": 100}]}
19 response = api_client.post(f"{api_client.base_url}/orders", json=order_data)
20 assert response.status_code == 404
21 assert "用户不存在" in response.json()["detail"]七、易错点与注意事项
7.1 常见错误
- URL拼接错误:忘记在base_url后加斜杠
- 请求方法错误:用GET代替POST
- 请求体格式错误:应该用
json=参数而不是data= - 响应解析错误:响应不是JSON格式时调用
response.json()会报错 - 测试数据污染:没有正确清理测试数据
7.2 最佳实践
- 使用
requests.Session()复用连接 - 统一管理base_url
- 使用fixture准备和清理测试数据
- 断言状态码和响应体
- 添加详细的断言消息
八、小结
本阶段学习了接口测试实战,包括:
- requests库的使用
- HTTP请求方法和参数
- 接口测试框架设计
- 正向和反向用例设计
- 参数化测试
- 配置管理
📡
👤
作者:
阿海
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
阿海 Blog!
- 01JMeter界面详解 2026-07-11
- 02性能测试学习路线 2026-07-11
- 03JMeter线程组配置详解 2026-07-11