当前位置: 首页 > 测试知识 > JMeter录制移动端应用:代理设置与HTTPS抓包方案
JMeter录制移动端应用:代理设置与HTTPS抓包方案
2026-07-21 作者cwb 浏览次数84

要对移动端App进行压力测试,JMeter是常用工具,第一步就是录制脚本。原理是把 JMeter 当作代理服务器,让手机流量经过电脑,由JMeter记录下所有HTTP/HTTPS请求。


一、准备工作


环境要求

电脑和手机连接在同一个局域网(同一个 Wi-Fi)。

JMeter 已安装,推荐JMeter 5.5+,需依赖Java 8+。


获取电脑 IP

Windows:ipconfig查看无线局域网适配器的IPv4 地址。

macOS / Linux:ifconfig查看 en0 或 en1 的 inet 地址。

建议将电脑 IP 设为静态,避免重启后IP变动导致手机代理失效。

二、JMeter代理录制基础设置


在JMeter中添加录制组件

测试计划上右键 - 添加 (Add) - 线程组 (Thread Group)。

线程组上右键 - 添加 - 思路控制器 (Logic Controller) - 录制控制器 (Recording Controller)。它能把录制的请求都收纳起来。

测试计划上右键 - 添加 - 非测试元件 (Non-Test Elements) - HTTP(S) 测试脚本录制器 (HTTP(S) Test Script Recorder)。


配置录制器端口

在录制器界面,端口填入 8888(或其他未被占用的端口,如 9999)。

目的控制器”选择刚刚创建的录制控制器。

点击右下角的 启动 Start)按钮。首次启动会弹出提示,让你生成根证书,此时先不重点确定。


三、移动端代理设置


手机设置手动代理

进入手机的 Wi-Fi 设置,修改当前连接的 Wi-Fi。

代理设为手动。

服务器/主机名:填入刚才查到的电脑 IP。

端口:填入 JMeter 录制器的端口,如 8888。

保存后,手机的网络流量就会导向 JMeter。


证实代理连通性

先不要开任何 HTTPS 应用。用手机浏览器访问 http://zmtests.com,正常的话 JMeter 录制控制器下会马上出现请求。同时手机浏览器能正常打开网页。

如果没反应,检查:电脑防火墙是不是拦截了 8888 端口(临时关闭防火墙或添加入站规则)。


四、HTTPS 抓包重要:证书安装和信任

这是最易出错的步骤。HTTPS 流量是加密的,JMeter必须用自签名的根证书做中间人解密。


1. 安装JMeter根证书到手机

JMeter 启动录制器时,会在其 bin 目录下自动生成一个证书文件 ApacheJMeterTemporaryRootCA.crt,有效期为 7 天。你可以把这个文件通过邮件、微信或 AirDrop 传到手机上。


iOS 安装步骤:

点击 .crt 文件,会弹出“已下载描述文件”的提示。

前往 设置 - 通用 - VPN 和设备管理,点击该证书文件安装。

安装后必须前往 设置 - 通用 - 关于本机 - 证书信任设置,把 ApacheJMeter 的开关打开,使其受完全信任。


Android 7.0 以下系统:

直接点击 .crt 文件安装,命名为任意名称,凭据用途选“VPN 和应用”,按提示输入锁屏密码即可。


2. 攻克 Android 7.0+ 的用户证书限制(重点)

从 Android 7.0 开始,应用默认只信任系统级证书,你安装的“用户证书”仅对浏览器有效,绝大多数 App 的 HTTPS 流量录下来会是空请求或报错。


解决方案:


方案 A:使用 ROOT 后的模拟器或手机(最彻底)

将 JMeter 证书转为系统证书。在模拟器(如 MuMu、雷电)中开启 Root 权限后:


计算证书哈希并重命名:

bash

openssl x509 -inform PEM -subject_hash_old -in ApacheJMeterTemporaryRootCA.crt | head -1

# 假设输出为 12345678

将证书文件命名为 12345678.0。

通过 adb 将其推送到系统目录,并设好权限:

bash

adb root

adb remount

adb push 12345678.0 /system/etc/security/cacerts/

adb shell chmod 644 /system/etc/security/cacerts/12345678.0

adb reboot

重启后,证书就成为了系统信任的根证书。


方案 B:使用 VirtualXposed + JustTrustMe(免 ROOT)

这是对目的 App 做一次“沙箱”运行,强制信任一切证书。


在手机上安装 VirtualXposed 和 JustTrustMe 模块。

在 VirtualXposed 中添加目的 App,并激活 JustTrustMe 模块。

之后在 VirtualXposed 里启动该 App,同时手机代理保持指向 JMeter,即可抓到明文 HTTPS 包。这种方法不破坏系统,适合快速测试。

方案 C:Android 14+ 的替代方案

高版本 Android 强制只信任系统证书存储,且 /system 只读。可在开发者选项中,尝试关闭“监控通过证书颁发的安全连接”,或直接在电脑上装 Android 模拟器配合 ROOT 来完成录制,这是最省心的方式。


五、处理SSL Pinning证书绑定

如果 App 自身做了更强的安全措施-代码内只信任特定证书(SSL Pinning),那么即使你装了系统证书也无法抓包。

表现:JMeter 无法录制任何请求,或 App 直接提示网络错误。


常用绕过方法:

Frida 动态注入:编写 Frida 脚本,Hook 掉证书证实函数,在 PC 端运行 frida -U -f 包名 -l bypass.js。

Xposed 模块:前面提到的 JustTrustMe / TrustMeAlready,就是专门干这个的。

修改APK:用 apk-mitm 等工具反编译后移除 Pinning思路再重打包,适合测试环境。


六、录制过程和脚本优化

设置过滤规则:在 JMeter 录制器的请求过滤标签页,添加 .*\.(jpg|png|gif|css|js|woff).* 等正则,过滤掉静态资源请求,让脚本更干净。

为事务命名:录制时可以勾选从 HTML 资源获取标题,方便识别。也可以之后手动整理,将登录、下单等连续请求放进事务控制器。

处理动态数据:录制完成后,必须进行关联(如 token、session ID),用 JMeter 的“正则表达式提取器”或“JSON 提取器”从服务器响应中抓取,替换掉录制下来的硬编码值。


问题排查:


手机和电脑在同一 Wi-Fi,IP 填对,能抓 HTTP 但抓不到 HTTPS?

 证书未信任,请按上面第四步操作。


App 打开闪退或提示无法连接?

App 做了 SSL Pinning,需要用 VirtualXposed 或 Frida 绕过。


录制响应超时?

检查电脑防火墙,或确定手机代理端口正确。


证书过期怎么办?

JMeter 每启动一次录制器会重新生成,记得删掉手机里旧的证书,再装新的。


文章标签: 软件测试 测试工具
咨询软件测试