返回业务与用例设计模块从页面现象沿着下单链路逐层确认 问题越向下,使用的证据越接近底层
一条业务请求由输入、传输结果和业务结果组成
浏览器抓包的关键顺序 逐层筛选,直到只剩当前问题的请求
下单请求耗时瀑布 把浏览器中的请求变成可重复验证的最小步骤 移动端 HTTPS 流量通过测试代理转发 一条可定位的缺陷证据链
Business Testing / Tutorial 09
抓包与网络请求分析实战教程
从“页面下单失败”继续向下追踪,找到哪条请求、哪个字段或哪个耗时阶段真正出了问题。
10 个章节商城下单诊断Network + HTTP 代理 + Wireshark
01
页面现象只是起点,请求才是中间证据
从现象走向链路同一个“提交失败”,可能来自完全不同的位置
用户点击“提交订单”后页面没有成功跳转,原因可能是按钮没有发出请求、请求参数错误、登录失效、库存不足、服务端报错或网络超时。只记录页面提示,研发仍然需要重新排查;抓到关键请求,才能缩小问题范围。
页面操作点击提交订单
网络请求方法、参数、耗时
接口响应状态码与业务码
服务日志request_id 继续追踪
数据结果订单与库存一致
先确认有没有发出
没有订单请求时,优先检查页面校验、按钮事件和前端脚本。
再确认发了什么
对照需求和接口契约检查方法、路径、请求头与请求体。
最后确认得到什么
结合状态码、响应体、耗时和链路标识判断责任层。
抓包不是为了收集越多流量越好,而是为当前问题找到一条可以复现、可以解释、可以继续追踪的请求证据。
02
根据问题层级选择抓包工具
不要一上来就 Wireshark01页面层
DevTools Network
HTTP 请求与资源
02代理层
Charles / Fiddler
跨设备 HTTPS
03网络层
Wireshark
DNS、TCP 与 TLS
04服务层
日志 / Trace
内部调用与异常
四类工具看到的内容不同
| 工具 | 能看到什么 | 适用场景 | 使用提醒 |
|---|---|---|---|
| 浏览器 DevTools / Network | 当前浏览器页面发出的 HTTP 请求 | Web 页面接口、资源、缓存和耗时 | 最适合入门和前端问题定位 |
| Charles / Fiddler / mitmproxy | 经过代理的 HTTP 与 HTTPS 流量 | App、桌面客户端、多设备联调 | HTTPS 需要测试设备信任代理证书 |
| Wireshark | 网卡上的 TCP、UDP、DNS、TLS 等数据包 | 连接、握手、丢包和协议级问题 | TLS 加密后通常看不到业务正文 |
| 服务端日志与链路追踪 | 服务内部处理和跨服务调用 | 请求已进入后端后的根因定位 | 需要 request_id 或 trace_id 串联 |
快速选择
- 网页功能异常:先打开浏览器 Network。
- App 或桌面客户端接口:使用 Charles、Fiddler 或 mitmproxy。
- 连接建立、DNS、TCP、TLS 或丢包问题:使用 Wireshark。
- 请求已经进入服务端:使用 request_id 继续查日志和链路追踪。
03
先读懂一条完整的 HTTP 请求
请求与响应成对看Request方法、URL、头、正文
HTTP Status本次传输结果
Response业务码与业务数据
Timing各阶段耗时
下单请求的六个观察位置
| 位置 | 下单示例 | 你要回答的问题 |
|---|---|---|
| URL 与方法 | POST /api/orders | 是不是调用了正确接口和动作 |
| 请求头 | Authorization、Content-Type、X-Request-ID | 身份、格式和链路标识是否正确 |
| 请求体 | sku_id、quantity、coupon_id | 页面提交的数据是否完整准确 |
| 状态码 | 200 | HTTP 传输是否正常完成 |
| 响应体 | code、message、order_id、amount | 业务是否成功,字段是否符合契约 |
| Timing | 等待 2.4 s、下载 8 ms | 时间花在连接、服务处理还是下载 |
下单请求与响应示例
POST /api/orders HTTP/1.1
Authorization: Bearer ***
Content-Type: application/json
X-Request-ID: case-20260809-001
{"sku_id":"sku-1001","quantity":2,"coupon_id":"cp-20"}
HTTP/1.1 200 OK
Content-Type: application/json
{"code":"SUCCESS","order_id":"ord-9001","amount":80}200 说明这次 HTTP 请求正常完成;业务是否成功,还要继续检查响应体中的 code、message 和业务数据。
04
使用浏览器 Network 抓取下单请求
先保留再复现打开 Network保留日志
清空记录建立本轮基线
复现一次避免混入旧请求
筛选请求路径与类型
分析证据参数、响应、耗时
一次可靠的浏览器抓包流程
- 打开开发者工具并进入 Network。
- 勾选 Preserve log,避免页面跳转后记录消失。
- 点击清空,只保留本轮复现产生的请求。
- 选择 Fetch/XHR,减少图片、字体和脚本干扰。
- 在页面执行一次完整的提交订单操作。
- 按路径、方法或业务关键字找到 /api/orders。
- 依次检查 Headers、Payload、Response 和 Timing。
需要保留日志
登录跳转、支付跳转和页面刷新会清空默认记录,复现前开启 Preserve log。
需要禁用缓存
排查资源或缓存问题时再勾选 Disable cache,并保持开发者工具开启。
05
从大量请求中筛出下单链路
先缩小范围全部流量HTML、JS、图片、接口
Fetch / XHR只保留接口
orders只保留下单链路
request_id锁定一次复现
下单页面常见的筛选顺序
- 先选 Fetch/XHR,只看接口请求。
- 输入 orders、checkout 或业务接口路径关键字。
- 按 Method 检查 POST,按 Status 检查失败或异常响应。
- 通过 Initiator 确认是哪段前端代码发起。
- 使用 request_id、order_id 或 case_id 串联后续请求。
根据抓包结果判断下一步
| 抓包现象 | 直接证据 | 下一步定位 |
|---|---|---|
| 没有请求 | Network 中没有 /api/orders | 按钮事件、前端校验或脚本异常 |
| 请求参数错误 | quantity=0 或 coupon_id 缺失 | 页面组装参数或数据绑定 |
| 401 / 403 | 令牌失效或对象无权访问 | 认证、权限或测试账号 |
| 200 + 业务失败码 | HTTP 正常,code=OUT_OF_STOCK | 库存规则或页面业务提示 |
| 500 | 服务端内部错误 | 结合 request_id 查询后端日志 |
| 长时间 Pending | Waiting 阶段明显过长 | 服务处理、下游依赖或网关超时 |
06
用 Timing 判断时间花在哪里
慢不等于都是后端慢Queueing等待发送
DNS解析域名
Connect / SSL建立安全连接
Waiting服务处理
Download下载响应
连接前阶段
- Queueing 长:浏览器并发、优先级或连接池等待。
- DNS 长:域名解析或网络环境。
- Initial connection / SSL 长:TCP、TLS 或代理链路。
请求后阶段
- Waiting 长:网关、服务处理或下游依赖。
- Content Download 长:响应体过大或带宽受限。
- 多次重复请求:前端重试、用户连点或超时策略。
浏览器 Timing 只能告诉你时间在哪个大阶段。Waiting 很长时,继续带着 request_id 查网关和服务端链路,不能只凭一张截图断定某个后端服务慢。
07
复制请求,稳定重放问题
从页面操作变成可复现命令原始请求确认现场证据
复制 cURL保留方法与数据
删除敏感信息替换令牌与隐私
测试环境重放对比响应与耗时
脱敏后的 cURL 重放示例
curl 'https://test.example.com/api/orders' -X POST -H 'Authorization: Bearer <test-token>' -H 'Content-Type: application/json' -H 'X-Request-ID: case-20260809-001' --data '{"sku_id":"sku-1001","quantity":2,"coupon_id":"cp-20"}'重放前必须确认
- 目标仍是测试环境,不是生产环境。
- 令牌属于专用测试账号,分享前已经替换。
- 订单创建、支付、短信等操作不会产生真实副作用。
- 幂等键和测试数据允许重复执行。
- 对比原请求与重放请求,避免浏览器自动补充的头部被遗漏。
08
通过 HTTP 代理抓取移动端 HTTPS
只在专用测试环境测试 App发起下单
系统代理电脑 IP 与端口
抓包工具解密测试流量
测试服务返回业务响应
移动端代理抓包步骤
- 让手机和电脑进入可以互相访问的测试网络。
- 在电脑启动 Charles、Fiddler 或 mitmproxy 并确认监听端口。
- 在手机 Wi-Fi 中配置电脑 IP 和代理端口。
- 仅在专用测试设备安装并信任代理证书。
- 打开 App 复现下单,按域名和路径筛选请求。
- 结束后关闭代理、移除证书并恢复网络设置。
抓不到 HTTPS
先检查设备是否信任测试证书、代理是否允许远程连接、App 是否启用了证书固定。
遇到证书固定
不要尝试绕过生产安全保护。使用团队提供的测试包、调试开关或服务端日志完成验证。
09
把抓包结果整理成安全的缺陷证据
证据够用且不泄密复现步骤何时做了什么
请求摘要方法、参数、耗时
响应摘要状态码与业务码
链路标识request_id / trace_id
实际影响页面与数据结果
抓包文件中的敏感内容
| 内容 | 风险 | 处理方式 |
|---|---|---|
| Authorization / Cookie | 令牌、会话和用户身份 | 截图和 HAR 分享前删除或打码 |
| 姓名、手机号、地址 | 个人隐私数据 | 使用测试账号和虚构数据 |
| 支付信息 | 资金与账户风险 | 只在支付沙箱和测试环境操作 |
| HTTPS 代理证书 | 代理可以读取测试设备流量 | 只安装在专用测试设备,结束后移除 |
| HAR / pcap 文件 | 可能包含完整请求历史 | 限定接收人和保存时间,不上传公共平台 |
缺陷单建议保留
- 复现环境、账号类型和发生时间。
- 请求方法、脱敏后的 URL 与关键参数。
- 状态码、业务码、响应摘要和实际耗时。
- request_id、trace_id 或测试 case_id。
- 期望结果、实际结果和最小复现步骤。
- 必要时附脱敏 HAR,不要只贴一张看不清的截图。
10
完成一次下单失败的抓包定位
从现象到证据练习:定位“提交订单后提示失败”
- 清空 Network 并开启 Preserve log,复现一次失败。
- 找到创建订单请求,记录方法、路径、耗时和 request_id。
- 检查 quantity、coupon_id 和地址 ID 是否符合页面选择。
- 判断是没有请求、HTTP 失败、业务失败还是响应超时。
- 复制为 cURL,脱敏后在测试环境重放。
- 根据响应和 Timing 选择前端、网关、服务端或数据层继续定位。
- 编写一条标题为“当库存充足并提交订单时,系统返回成功订单”的正常用例。
- 编写一条标题为“当登录令牌失效时,系统拒绝创建订单并提示重新登录”的异常用例。
- 整理脱敏证据,确保其他人能够独立复现。
请求找得准
- 本轮记录已清空
- 过滤条件明确
- 请求链路完整
- 标识可以串联
结论有证据
- 参数已经核对
- 响应已经解释
- Timing 已分析
- 责任层未武断判断
资料可安全分享
- 令牌已经移除
- 个人信息已脱敏
- 只使用测试环境
- 证书与代理已恢复
能够从页面定位到请求后,继续使用 SQL 核对订单、库存和优惠券是否真正一致。
继续学习 SQL 与数据库测试