接口测试
1. 接口测试基本概念
1.1 什么是接口?
接口:不同的系统之间相互连接的部分,是一个传递数据的通道。
1.2 什么是接口测试?
接口测试:检查数据的交换、传递和控制管理过程。
1.3 接口测试的使用场景
针对前后端分离的产品(基本上市面上的绝大部分产品)。
2. HTTP请求结构
2.1 请求(Request)
- 请求行:method url protocol
- 请求方法:GET、POST、PUT、DELETE、HEAD
- 请求头:Host、Cookie、User-Agent
- 请求参数:query
- 请求体:JSON、XML、FORM
2.2 响应(Response)
- 响应状态行
- 响应头
- 响应体
3. URL结构
https://www.baidu.com/s?wd=霍格沃兹
- 协议:http、https
- 域名:www.baidu.com
- 端口:跟在域名后面,域名和端口之间使用”:“作为分隔符
- 路径:/s
- 请求参数:wd=霍格沃兹
4. HTTP响应状态码
| 状态码 | 含义 |
|---|---|
| 1xx | 临时响应,通知信息 |
| 2xx | 成功 |
| 200 | 成功 |
| 3xx | 重定向 |
| 301 | 永久移动 |
| 302 | 临时移动 |
| 4xx | 客户端请求错误 |
| 403 | 未授权 |
| 404 | 未找到 |
| 5xx | 服务端错误 |
| 500 | 服务器内部错误 |
| 503 | 服务不可用 |
5. Content-Type类型
| Content-Type | 说明 |
|---|---|
| application/x-www-form-urlencoded | 默认格式,参数格式:key1=value1&key2=value2 |
| application/json | JSON格式 |
| multipart/form-data | 上传文件用这种格式 |
6. 接口测试工具
6.1 常用工具
- Postman - 功能强大的API测试工具
- JMeter - Apache性能测试工具,也可用于接口测试
- Fiddler - Web调试代理工具
- Charles - Web抓包工具
6.2 Python requests库
import requests
# 发送GET请求
response = requests.get(url, params=params)
# 发送POST请求
response = requests.post(url, data=data)
response = requests.post(url, json=json_data)
# 获取响应
print(response.text)
print(response.json())7. 接口测试用例结构
| 字段 | 说明 |
|---|---|
| 用例编号 | 唯一标识 |
| 模块 | 接口所属模块 |
| 测试标题 | 测试用例名称 |
| 优先级 | P0/P1/P2/P3 |
| 前置条件 | 执行前提 |
| URL | 接口地址 |
| 请求方法 | GET/POST/PUT/DELETE |
| 请求参数 | 入参 |
| 预期结果 | 期望输出 |
| 实际结果 | 实际输出 |
8. 接口测试实战示例
8.1 GET请求示例
请求URL: http://api.nnzhp.cn/api/user/stu_info
请求方式: GET
请求参数: stu_name (学生姓名)
import requests
url = "http://api.nnzhp.cn/api/user/stu_info"
params = {"stu_name": "aaa"}
response = requests.get(url, params=params)
print(response.json())8.2 POST请求示例(表单类型)
请求URL: http://api.nnzhp.cn/login
请求方式: POST
Content-Type: application/x-www-form-urlencoded
import requests
url = "http://api.nnzhp.cn/login"
data = {"username": "test", "passwd": "123456"}
response = requests.post(url, data=data)
print(response.json())8.3 POST请求示例(JSON类型)
请求URL: http://api.nnzhp.cn/adduser
请求方式: POST
Content-Type: application/json
import requests
url = "http://api.nnzhp.cn/adduser"
json_data = {"name": "张三", "age": 20}
response = requests.post(url, json=json_data)
print(response.json())8.4 带Cookie的请求
import requests
# 先登录获取cookie
login_url = "http://api.nnzhp.cn/login"
login_data = {"username": "admin", "passwd": "admin"}
session = requests.Session()
session.post(login_url, data=login_data)
# 使用cookie访问需要认证的接口
recharge_url = "http://api.nnzhp.cn/recharge"
recharge_data = {"stu_id": 1, "gold": 100}
response = session.post(recharge_url, data=recharge_data)
print(response.json())8.5 带Header的请求
import requests
url = "http://api.nnzhp.cn/api/user/all"
headers = {"Authorization": "Bearer token123"}
response = requests.get(url, headers=headers)
print(response.json())8.6 文件上传
import requests
url = "http://api.nnzhp.cn/upload"
files = {"file": open("test.txt", "rb")}
response = requests.post(url, files=files)
print(response.json())9. 接口测试流程
- 分析接口文档 - 了解接口的功能、参数、返回值
- 设计测试用例 - 正常场景、异常场景、边界值
- 执行接口测试 - 使用工具或代码调用接口
- 验证结果 - 检查返回是否符合预期
- 记录缺陷 - 发现问题及时跟踪
10. 接口测试用例设计要点
- 参数验证:必填项、类型、长度、格式
- 返回值验证:状态码、返回数据格式、数据准确性
- 业务逻辑:多接口串联、状态流转
- 异常处理:网络异常、超时、服务器错误
- 安全性:敏感信息、SQL注入、XSS