返回业务与用例设计模块
Business Testing / Tutorial 09

抓包与网络请求分析实战教程

从“页面下单失败”继续向下追踪,找到哪条请求、哪个字段或哪个耗时阶段真正出了问题。

10 个章节商城下单诊断Network + HTTP 代理 + Wireshark
01

页面现象只是起点,请求才是中间证据

从现象走向链路

同一个“提交失败”,可能来自完全不同的位置

用户点击“提交订单”后页面没有成功跳转,原因可能是按钮没有发出请求、请求参数错误、登录失效、库存不足、服务端报错或网络超时。只记录页面提示,研发仍然需要重新排查;抓到关键请求,才能缩小问题范围。

从页面现象沿着下单链路逐层确认
页面操作点击提交订单
网络请求方法、参数、耗时
接口响应状态码与业务码
服务日志request_id 继续追踪
数据结果订单与库存一致

先确认有没有发出

没有订单请求时,优先检查页面校验、按钮事件和前端脚本。

再确认发了什么

对照需求和接口契约检查方法、路径、请求头与请求体。

最后确认得到什么

结合状态码、响应体、耗时和链路标识判断责任层。

抓包不是为了收集越多流量越好,而是为当前问题找到一条可以复现、可以解释、可以继续追踪的请求证据。
02

根据问题层级选择抓包工具

不要一上来就 Wireshark
问题越向下,使用的证据越接近底层
01页面层

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页面提交的数据是否完整准确
状态码200HTTP 传输是否正常完成
响应体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保留日志
清空记录建立本轮基线
复现一次避免混入旧请求
筛选请求路径与类型
分析证据参数、响应、耗时

一次可靠的浏览器抓包流程

  1. 打开开发者工具并进入 Network。
  2. 勾选 Preserve log,避免页面跳转后记录消失。
  3. 点击清空,只保留本轮复现产生的请求。
  4. 选择 Fetch/XHR,减少图片、字体和脚本干扰。
  5. 在页面执行一次完整的提交订单操作。
  6. 按路径、方法或业务关键字找到 /api/orders。
  7. 依次检查 Headers、Payload、Response 和 Timing。

需要保留日志

登录跳转、支付跳转和页面刷新会清空默认记录,复现前开启 Preserve log。

需要禁用缓存

排查资源或缓存问题时再勾选 Disable cache,并保持开发者工具开启。

05

从大量请求中筛出下单链路

先缩小范围
逐层筛选,直到只剩当前问题的请求
全部流量HTML、JS、图片、接口
Fetch / XHR只保留接口
orders只保留下单链路
request_id锁定一次复现

下单页面常见的筛选顺序

  1. 先选 Fetch/XHR,只看接口请求。
  2. 输入 orders、checkout 或业务接口路径关键字。
  3. 按 Method 检查 POST,按 Status 检查失败或异常响应。
  4. 通过 Initiator 确认是哪段前端代码发起。
  5. 使用 request_id、order_id 或 case_id 串联后续请求。

根据抓包结果判断下一步

抓包现象直接证据下一步定位
没有请求Network 中没有 /api/orders按钮事件、前端校验或脚本异常
请求参数错误quantity=0 或 coupon_id 缺失页面组装参数或数据绑定
401 / 403令牌失效或对象无权访问认证、权限或测试账号
200 + 业务失败码HTTP 正常,code=OUT_OF_STOCK库存规则或页面业务提示
500服务端内部错误结合 request_id 查询后端日志
长时间 PendingWaiting 阶段明显过长服务处理、下游依赖或网关超时
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

只在专用测试环境
移动端 HTTPS 流量通过测试代理转发
测试 App发起下单
系统代理电脑 IP 与端口
抓包工具解密测试流量
测试服务返回业务响应

移动端代理抓包步骤

  1. 让手机和电脑进入可以互相访问的测试网络。
  2. 在电脑启动 Charles、Fiddler 或 mitmproxy 并确认监听端口。
  3. 在手机 Wi-Fi 中配置电脑 IP 和代理端口。
  4. 仅在专用测试设备安装并信任代理证书。
  5. 打开 App 复现下单,按域名和路径筛选请求。
  6. 结束后关闭代理、移除证书并恢复网络设置。

抓不到 HTTPS

先检查设备是否信任测试证书、代理是否允许远程连接、App 是否启用了证书固定。

遇到证书固定

不要尝试绕过生产安全保护。使用团队提供的测试包、调试开关或服务端日志完成验证。

09

把抓包结果整理成安全的缺陷证据

证据够用且不泄密
一条可定位的缺陷证据链
复现步骤何时做了什么
请求摘要方法、参数、耗时
响应摘要状态码与业务码
链路标识request_id / trace_id
实际影响页面与数据结果

抓包文件中的敏感内容

内容风险处理方式
Authorization / Cookie令牌、会话和用户身份截图和 HAR 分享前删除或打码
姓名、手机号、地址个人隐私数据使用测试账号和虚构数据
支付信息资金与账户风险只在支付沙箱和测试环境操作
HTTPS 代理证书代理可以读取测试设备流量只安装在专用测试设备,结束后移除
HAR / pcap 文件可能包含完整请求历史限定接收人和保存时间,不上传公共平台

缺陷单建议保留

  • 复现环境、账号类型和发生时间。
  • 请求方法、脱敏后的 URL 与关键参数。
  • 状态码、业务码、响应摘要和实际耗时。
  • request_id、trace_id 或测试 case_id。
  • 期望结果、实际结果和最小复现步骤。
  • 必要时附脱敏 HAR,不要只贴一张看不清的截图。
10

完成一次下单失败的抓包定位

从现象到证据

练习:定位“提交订单后提示失败”

  1. 清空 Network 并开启 Preserve log,复现一次失败。
  2. 找到创建订单请求,记录方法、路径、耗时和 request_id。
  3. 检查 quantity、coupon_id 和地址 ID 是否符合页面选择。
  4. 判断是没有请求、HTTP 失败、业务失败还是响应超时。
  5. 复制为 cURL,脱敏后在测试环境重放。
  6. 根据响应和 Timing 选择前端、网关、服务端或数据层继续定位。
  7. 编写一条标题为“当库存充足并提交订单时,系统返回成功订单”的正常用例。
  8. 编写一条标题为“当登录令牌失效时,系统拒绝创建订单并提示重新登录”的异常用例。
  9. 整理脱敏证据,确保其他人能够独立复现。

请求找得准

  • 本轮记录已清空
  • 过滤条件明确
  • 请求链路完整
  • 标识可以串联

结论有证据

  • 参数已经核对
  • 响应已经解释
  • Timing 已分析
  • 责任层未武断判断

资料可安全分享

  • 令牌已经移除
  • 个人信息已脱敏
  • 只使用测试环境
  • 证书与代理已恢复

能够从页面定位到请求后,继续使用 SQL 核对订单、库存和优惠券是否真正一致。

继续学习 SQL 与数据库测试