我的环境

  1. 软件版本: 安装 jmeter 的最新版本,当前是 5.4.3,使用简体中文界面
  2. 操作系统: MacOs Monterey 12.3.1,ios 15.3.1
  3. 运行环境: Java 8

抓取 APP 的 https 请求

手机端安装 JMeter 证书

在使用 JMeter 抓取 APP 的 https 请求的时候,由于 ios 的安全限制比较严格,因此将 JMeter 设置为网络代理的时候,必须要安装并信任 JMeter 提供的认证证书。 位于 %JMETER_HOME%/bin/下的 ApacheJMeterTemporaryRootCA.crt 这个文件。这个文件有 3~5 天的有效期,因此安装后过一段时间就要重新安装。

由于安装证书的时候,ios 一般是通过网络进行,因此,需要一个 http 服务器方便手机访问并安装该证书,推荐使用Caddy作为简单的文件服务器 比如在 %JMETER_HOME%/bin 下面执行:

caddy file-server --root=. --listen=:8080 --browse

就会启动一个允许访问当前文件夹的文件服务器 http://localhost:8080 或使用本机的实际 IP 即可访问。

手机端使用 safari 访问并下载 ApacheJMeterTemporaryRootCA.crt , 点击安装

手机端的证书安装后,可以在 设置->通用->VPN与设备管理 看到。安装后还需要信任该证书才可以,具体可以 设置->通用->关于本机->证书信任设置信任该证书即可。

如果不安装证书的话,则可能在指定为 JMeter 网络代理的情况下,jmeter 也无法抓取到应用的 https 包。

手机端设置网络代理

要保证手机端与安装了 JMeter 的电脑端都链接到了同一个局域网络。点击已链接的无线网络,拉到界面最底部,配置代理(HTTP)的选项那里。 选择 手动配置,填写 JMeter 所在的电脑的 IP 地址及代理端口号,一般端口号填写 8888 即可。保存后进行电脑上 JMeter 的配置。

JMeter 代理配置

在电脑端命令行启动 JMeter

./jmeter.sh

启动 JMeter 的图形界面,可以通过菜单设置界面语言,我设置为中文。 在左侧【测试计划】树节点右键菜单选择 添加->非测试元件->HTTP 代理服务器。 新建代理服务器后,填写端口号为 8888 与手机端相同, 目标控制器选择刚才建立的 HTTP 代理服务器,点击启动按钮即可启动代理服务器。

JMeter 参数化配置

JMeter 的参数化脚本使用 Groovy 语言,因此变量的输出采用${变量名}的形式,可用于参数及请求体等。 可以使用 csv 文件作为批量参数的提供者。 用法参照 JMeter 的文档即可。

注意:压测的时候不要使用 GUI 的图形界面,使用命令行的方式

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]