弱网、异常、接口对比:抓包工具还能帮测试做什么

弱网、异常、接口对比:抓包工具还能帮测试做什么

接过 bug 反馈的都熟这种:「支付页偶尔转圈」「弱网下偶尔白屏」。

这类偶发问题,你得先在弱网下把它复现出来,再把出问题的请求和正常请求摆一块儿比------两件事,手动做都费劲。这篇讲 AIProxy 怎么帮你把这两件事变快。

弱网:不只 Slow 3G,还能只让一个接口慢

打开 Throttling 页面。顶部是运行状态区,左边 Profiles / Rules 切换。

最简单的用法 :左边选个预设 Profile,比如 Slow 3G,点 Apply ,整个 Workspace 经过代理的流量都变慢了。测完点 Disable 关掉。预设里有 Fast 4G、Slow 3G、Lossy Wi-Fi 这些;想更精确,New Custom 自己配:延迟、上行带宽、下行带宽、丢包率,四个参数。

但更多时候,你只想让一个接口慢 。比如只想测「支付接口慢半秒,前面流程不受影响」。这时候用定向 Rule,别用全局 Profile------全局会让所有请求都变慢,你反而看不出重点。

创建定向 Rule 最快的方式:Sessions 里找到那个接口,右键 → Create Throttling Rule。AIProxy 自动带好 URL、Host、Method,你选个 Profile 保存,之后就只有这个接口走弱网。

怎么确认弱网真的生效了

两步:

  1. Sessions 顶部切到 Throttled,列表只剩被弱网影响过的请求,没看到就是没命中;
  2. 打开某条请求的 Automation 标签,找到 Throttling 区块------用了哪个 Profile、是 Rule 命中还是全局、增加了多少延迟、是 applied 还是 dropped,写得明明白白。

特别说一下 dropped:设了丢包率,Trace 里 Outcome 就可能显示 dropped,说明这个请求被弱网模拟丢弃了,正好拿来测 App 的重试和兜底。

有个概念别搞混:Throttling 是弱网模拟(改延迟、带宽、丢包),不是 API 限流(不是 QPS、不是 429)。想测限流,得后端配合。

造异常:断点临时把响应改成 500

弱网测的是「慢和丢」,有些异常是「错」------接口返回 500、格式错、超长字段。这些用断点现场造最快(断点的基本操作在第 2 篇讲过,这里换个测试用法):

  1. Rules → Breakpoint,URL 填目标接口,Match Stage 选 Response;
  2. 触发接口,拦截面板滑出来;
  3. 把状态码改成 500,或者直接改 Body 塞个畸形结构,Forward 放行。

前端就真的收到一个「假异常」,你可以看它的错误提示、降级、重试逻辑对不对。不想动 Body,直接 Mock Response 填好状态码和 Body,跳过上游返回固定内容也行。

老规矩:断点不会自动放行,用完关掉规则,免得后面请求一直挂着。

会话对比:不用再肉眼盯 JSON

场景很典型:同一接口,正常版返回 A,有 bug 的版本返回 B,你想知道差在哪。

打开 Compare 页面,「左侧请求」「右侧请求」各选一条。它把差异逐项列出来:Query、请求头、请求 Body、响应头、响应 Body 、各阶段时序,每个维度都标了新增 / 删除 / 修改 / 不变的条数。重点是响应 Body :JSON 走语义 diff,按字段路径递归比,不是逐行瞎比。哪个字段从 true 变成 false,一眼看到。

接口太大、懒得自己读 diff?右侧有 AI 总结 ------这就是第 1 篇开头说的那个「AI 辅助功能」,不是别的,就这一个。配一个 OpenAI 兼容的模型(填 API Key、Base URL、模型名),点生成总结,给你一段 Markdown 差异说明。隐私它有考虑:发之前能预览 AI Payload;token、password 这类敏感字段自动脱敏;Body 要不要发给 AI 由你开关,本地脱敏完才上传。

进阶:比两组请求,不只比两条

Compare 还有第二个模式------会话行为对比 ,回答「这两次操作,调的接口、顺序、频次有没有差别」。用法:Sessions 页新建会话容器,把「正常操作」的流量抓到一个,「复现 bug」的抓到另一个,Compare 里各选一个。它对比总请求数、各 Domain 占比、各 Endpoint 调用次数、调用顺序、有没有多调或少调接口。适合那种「两次操作结果不同,但不知道差在哪次请求」的玄学 bug。

顺带:Compose、Collections、导出

几个平时用得多、但前面没展开的能力:

  • Compose:自己拼一个请求(Method、URL、Header、Body)发出去,或从某条 Session 改改重发。临时验接口用,还能一键导出 cURL。
  • Collections:把常用请求存成集合,配环境变量,批量跑。轻量版的接口测试。
  • 导出:Sessions 能导出 HAR、cURL、会话快照 JSON,可选范围(选中 / 筛选结果 / 全部)。给同事复现问题、留档都方便。

最后,说说为什么开源

回到这个系列开头说的:我做 AIProxy,是因为被现有的抓包工具劝退了。Charles 收费、跨平台体验割裂;Fiddler 偏 Windows;mitmproxy 是命令行;Proxyman 又贵又偏 Mac。我想要一个免费、开源、三平台一致、界面现代、能抓手机、还能写脚本玩花的工具------找了一圈没有,就自己写。

写完发现,可能不止我一个人有这个需求。于是就开源了。

这三篇里讲的能力------抓 Web、抓手机、改包、Mock、弱网、断点、脚本、对比------都是我日常自己最用的,也是我觉得一个现代抓包工具该有的样子。如果你平时也离不开抓包,又对现用工具不太满意,不妨试一下。

AIProxy 还在往前跑,后面会持续加东西:更完整的协议支持、更强的脚本能力、更好的移动端体验,路线图都在仓库里。用着哪里不顺手、想要的功能还没有,欢迎来提 issue,标了 good first issue 的适合新朋友上手提 PR。

如果这个工具帮到你了,Releases 下一个试试,顺手点个 Star。对独立开发者来说,一个 Star 就是实打实的「这事有人需要」,比啥都提气。

「AIProxy 实战」系列(共 3 篇):

  1. 抓:从 Web 到手机,跑通一个开源抓包工具
  2. 改:抓到之后怎么改------从图形规则到 JS 脚本
  3. 测:弱网、造异常、对比回归,以及我为什么开源(本篇)

项目地址:github.com/small-dream/AIProxy,MIT 协议。装的过程或使用上遇到问题,在 issue 里贴上系统版本和截图,我帮你排。我们下个版本见。