接口测试

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/jsonJSON格式
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. 接口测试流程

  1. 分析接口文档 - 了解接口的功能、参数、返回值
  2. 设计测试用例 - 正常场景、异常场景、边界值
  3. 执行接口测试 - 使用工具或代码调用接口
  4. 验证结果 - 检查返回是否符合预期
  5. 记录缺陷 - 发现问题及时跟踪

10. 接口测试用例设计要点

  • 参数验证:必填项、类型、长度、格式
  • 返回值验证:状态码、返回数据格式、数据准确性
  • 业务逻辑:多接口串联、状态流转
  • 异常处理:网络异常、超时、服务器错误
  • 安全性:敏感信息、SQL注入、XSS