一、接口测试基础
-
接口定义
-
符合特定规格和协议的模块间数据交互枢纽
-
核心作用:前后端分离开发的协作桥梁
-
前端:负责UI渲染与交互("看得见"的部分)
-
后端:处理数据与逻辑("看不见"的部分)
-
协作方式:通过接口文档契约交互
-
-
-
项目开发流程
-
接口测试优势:
-
早期发现Bug,修复成本最低(防患于未然)
-
编码阶段即可介入(功能测试需等待测试阶段)
-
二、HTTP协议核心概念
-
请求流程
Request → 协议 → Server → Response → Client
-
关键组件
组件 说明 常见值/示例 Status Code 请求状态码 200
(成功),302
(重定向),403
(无权限),502
(服务崩溃)Content-Type 响应数据类型 text/html
,application/json
, 多媒体(图片/音频)Set-Cookie 用户身份标识 加密键值对存储于浏览器 User-Agent 客户端设备信息 用于防爬虫机制 -
GET vs POST 核心区别
特性 GET POST 参数位置 URL中 消息体(Body) 安全性 低(参数可见) 较高 长度限制 有上限 无上限 用途 数据读取(如页面访问) 数据提交(如表单) ✅ 纠正误区:POST不会在TCP三次握手时提交参数,参数均在握手完成后发送。
三、Requests库实战指南
-
安装与导入
pip install requests import requests
-
GET请求三种传参方式
# 方式1:URL直接拼接 url = "https://api.example.com?key=value&location=深圳" # 方式2:字典传参(推荐) params = {"key": "SYaVX1EP5R6y71KYk", "location": "深圳"} res = requests.get(url, params=params) # 方式3:URL规则字符串 data = "key=SYaVX1EP5R6y71KYk&location=深圳" res = requests.get(url, data=data)
-
POST请求示例
url = "http://localhost/login" data = {"username": "admin", "password": "123456"} res = requests.post(url, data=data) print(res.json()) # 处理JSON响应
-
高级参数
requests.get( url, headers={"User-Agent": "Mozilla/5.0"}, # 模拟浏览器 cookies={"session_id": "abc123"}, # 身份验证 timeout=5, # 超时设置 allow_redirects=False # 禁止重定向 )
四、接口依赖处理
-
权限依赖解决方案
-
方法1:Cookie传递
# 登录获取Cookie login_res = requests.post(login_url, data=credentials) cookies = login_res.cookies # 使用Cookie访问受限接口 profile_res = requests.get(profile_url, cookies=cookies)
-
方法2:Header模拟
headers = {"Cookie": "PHPSESSID=t6ir8rvq70vr9uvtn133u3k9u5"} res = requests.get(url, headers=headers)
-
方法3:Session会话
session = requests.Session() session.post(login_url, data=credentials) # 自动维护Cookie session.get(profile_url) # 免认证访问
-
五、文件与多媒体处理
-
文件下载流程
res = requests.get("http://example.com/image.jpg") with open("image.jpg", "wb") as f: # 必须二进制写入 f.write(res.content) # 使用.content获取字节数据
-
批量下载示例(海鲜图片)
data = requests.get(api_url).json()["data"]["list"] for item in data: img_data = requests.get(item["imgurl"]).content with open(f"fishes/{item['title']}.jpg", "wb") as f: f.write(img_data)
六、响应处理技巧
方法 | 适用场景 | 示例 |
---|---|---|
res.text | 文本响应 (text/html) | print(res.text) |
res.json() | JSON数据 (application/json) | data = res.json()["results"] |
res.content | 二进制数据 (图片/文件) | f.write(res.content) |
res.cookies | 获取服务端Cookie | session_id = res.cookies["PHPSESSID"] |
附:高频问题速查
-
403错误排查口诀:
查权限 → 验身份 → 看IP → 清缓存 → 读日志 → 问文档 → 找运维
-
URL标准结构:
协议://域名:端口/路径?参数1=值1&参数2=值2...
-
默认端口可省略(如HTTP:80, HTTPS:443)
-
-
正则提取数据:
import re matches = re.findall(r'<td>(.*?)</td>', res.text) # 非贪婪匹配