Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。
注意:我们需要在windows上使用jmeter 界面来调试及生成测试(.jmx)文件,然后再以命令行模式进行 jmeter 命令进行压测
为什么要用命令行运行Jmeter?
1、NON GUI模式能大大缩减所需要的系统资源;GUI模式,会会消耗大量的内存资源,容易使压力机本身达到瓶颈,从而影响测试结果。
2、GUI模式,不能支持大型的负载测试与性能测试,并发超大时,JMeter会崩溃。
安装
windows 安装 JDK
JMeter是Java程序, 需要先安装JDK来运行它。此处使用 JDK8 版本。
-
找到下载安装包的目录,双击安装包进入安装向导。
后续直接下一步,安装即可,如果需要更改安装位置则自己新建个jdk1.8.0、jre1.8.0 目录安装。
- 配置环境变量
在环境变量-》系统变量
- 新建变量名
JAVA_HOME
,变量值是JDK
安装路径
- 新建变量CLASSPATH,变量值是
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
- 找到Path变量,双击变量值编辑,新建变量值为
%JAVA_HOME%\bin
- 校验是否配置成功
cmd ,输入 java -version
即可查看到当前配置的版本号,则证明配置成功
windows 安装 jmeter
在 Binaries 下面的 JMeter 程序压缩包文件 下载列表,点击 apache-jmeter-5.x.x.zip 这样的下载链接,下载到一个合适的目录,我这里是 D:\tools 目录下。
- 然后解压该文件,选择解压到当前目录,即出现一个名为 apache-jmeter-5.4.1 的目录,进入到该目录中,再进入到名为bin的目录。
- 如果是Windows系统:双击名为 jmeter.bat 的文件,即可打开JMeter管理界面程序。
- 如果是Mac系统,在命令行窗口中,进入到jmeter的bin目录,执行命令
sh jmeter.sh
- 配置环境变量如下
- 新建变量名
JMETER_HOME
,变量值是jmeter
安装路径 - 修改 classpath,追加内容
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;
linux 安装 JDK
本次环境为centos7+jdk8
- CentOS系统会自带jdk但是执行javac会失败,所以需要把自带的卸载掉重新安装
- 查看系统是否安装过java yum list installed | grep java
- 如果有旧版本的java,可以用如下方法卸载java yum -y remove java-1.8.0-openjdk*
- 查看java软件包列表 yum -y list java*
- 下载安装java1.8的所有软件包,中途需要输入y来确认下载。 yum install java-1.8.0-openjdk*
- 安装成功,输入如下命令检查是否安装成功,如果返回正确的版本号则表示安装成功 java -version
- 环境变量的配置 使用yum安装的java的默认安装路径在 /usr/lib/jvm,我们可以看到这个目录里只有两个目录,其中一个是java-1.8.0-openjdk,查看这个目录,可以找到其下的bin目录,并找到java和javac命令。所以将JAVA_HOME指向这个目录。(备注:export 与JAVA_HOME之间有且只有一个空格)
需要修改/etc/profile文件,添加JAVA_HOME
编辑/etc/profile
bash
体验AI代码助手
代码解读
复制代码
#set java environment export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin
bash
体验AI代码助手
代码解读
复制代码
#使配置生效 . /etc/profile
- 验证java是否安装成功
- 验证JAVA_HOME
echo $JAVA_HOME
- 验证java安装是否成功
java -version
- 验证jdk是否安装成功
javac
linux 安装 jmeter
下载好对应的版本直接到 linux 解压就好,要提前装好java环境。
- 检查linux系统上是否安装JDK,输入命令
java -version
- 上传 apache-jmeter-5.2.5.tgz 至linux服务器
- 使用命令 tar -zxvf apache-jmeter-5.2.5.tgz 解压文件
- 配置 jmeter 环境变量
- 使用命令
vim /etc/profile
打开配置文件
bash
体验AI代码助手
代码解读
复制代码
export JMETER_HOME=/usr/local/software/apache-jmeter-5.5 export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin
bash
体验AI代码助手
代码解读
复制代码
#使配置生效 . /etc/profile
-
进入 jmeter 下bin 目录中,
chmod +x jmeter
赋予权限 -
./jmeter -v
查看jmeter是否正确安装
使用
在 jmeter 目录下的bin目录中双击运行 jmeter.bat 来启动
配置选项
我们可以在节目选项中来设置语言、界面外观风格、字体大小等。
接口测试
-
左侧的 Test Plan,中文翻译为测试计划,可以理解为一个测试用例,我们可以给这个用例来命名。
-
添加线程组
右键测试计划来添加线程组,可以给线程组重命名,通过线程组来设置线程数、所有线程执行的时间等信息:
参数说明:
- 线程数:模拟请求的次数;
- Ramp-Up时间(秒):所有线程执行的时间,比如:配置了 2 秒,线程数配置了 50,要在 2 秒内执行 50 次请求;
- 循环次数:要轮询执行几次;
- 调度器
- 持续时间(秒):就是本次执行的线程持续多长时间;
- 启动延迟(秒):本次执行的线程启动要延迟多长时间执行;
- 接下来,我们开始配置具体需要测试的接口地址。
在线程组上右键,选择添加-》取样器-》HTTP请求
填上测试接口信息:
- 设置配件元件 ,可以设置HTTP请求的基本信息,如 http 信息头管理器、http Cookie 管理器、 http缓存管理器、http请求默认值,需要根据自己的接口来设置不同的参数。
- 配置监听器,可以添加 汇总报告、聚合报告、察看结果树
- 汇总报告:可以查看接口的最大、最小、平均请求值,可以看接口的异常率、吞吐量、接口、发送、平均字节数等信息:
- 聚合报告:可以查看接口请求最大、最小、平均值、异常率、吞吐量等信息:
- 察看结果树:查看每个请求成功与否。可以配置每个请求的日志输出路径,以什么格式的文件输出:
参数意义:
- Connect Time :
- jmeter 和 被测系统 建立 TCP 连接的时间,包括3次握手时间,如果连接复用, 值为0
- lantency:
- 从发出请求前 到 接收完第一个响应的时间
- loadtime(以前叫Elapsed time):
- 从发出请求前 到 接收完所有响应的时间
- 如果是长消息, 往往时长 >= lantency,因为有多个响应
- Size in bytes :
- 整个消息消息大小 = Headers size in bytes + Body > size in bytes
- Headers size in bytes : 响应消息头大小
- Body size in bytes : 响应消息体大小
命令行模式 运行
我们通过上面的测试用例来调试没问题后,保存生成 .jmx 测试文件,最后来以命令行模式下运行。
这里以windows 为例,cmd 终端运行:
体验AI代码助手
代码解读
复制代码
jmeter -n -t demo.jmx -l result.jtl
注意,jmeter 我们在安装的时候配置了环境变量,否则需要在安装路径下运行,如:
makefile
体验AI代码助手
代码解读
复制代码
D:\tools\apache-jmeter-5.5\bin\jmeter -n -t demo.jmx -l result.jtl
命令行参数释义
diff
体验AI代码助手
代码解读
复制代码
-n 非GUI模式 -> 在非GUI模式下运行JMeter -t 测试文件<参数> ->要运行的jmeter测试(.jmx)文件 (若命令行模式在bin/文件夹下,则可以使用相对路径,否则使用绝对路径) -l 日志文件<参数> ->生成的日志文件,指定结果文件路径 (同上) -j 指定日志文件路径 (同上) -o 指定报表文件路径(同上) -R 指定远程服务器列表 -g 制定csv测试结果文件路径(同上) -e 测试完成生产报表 -r 设置分布式执行 -H 设置JMeter设置代理服务器IP或域名 -P 设置JMeter代理服务器端口号 -h 打印使用信息并退出
dashboard 产生图表
使用生成的jmeter测试结果日志文件 .jtl,来生成HTML性能测试报告:
体验AI代码助手
代码解读
复制代码
jmeter -g result.jtl -o report
命令行参数释义
bash
体验AI代码助手
代码解读
复制代码
# -g:后跟 result.jtl文件所在的路径 # -o:后跟生成的HTML文件存放的路径,路径目录可以不存在,或者为空,否则jmeter怕覆盖其中内容而报错
通过以上命令便可生成图表,我们通过浏览器打开 index.html 便可看到相关信息:
其中 APDEX (Application Performance Index) 里面的 T (Toleration threshold) 和 F (Frustration threshold) 可以通过 JMeter 工具 bin 目录下面的 user.properties 配置文件里面 这两个选项来设置
体验AI代码助手
代码解读
复制代码
jmeter.reportgenerator.apdex_satisfied_threshold jmeter.reportgenerator.apdex_tolerated_threshold
JMeter 随机变量与命令行参数
一、测试计划设计(adduserinfo.jmx
)
1. 随机变量生成
在 JMeter 中通过函数助手生成随机字符串:
- 随机用户名(8位字母):
${__RandomString(8,abcdefghijklmnopqrstuvwxyz,)}
- 随机手机号(以 189 开头):
${__Random(18900000000,18999999999,)}
配置位置:
-
在 HTTP 请求的
Body Data
中使用变量:json
体验AI代码助手
代码解读
复制代码
{ "username": "${randomUsername}", "phone": "${randomPhone}" }
2. 命令行参数化
通过 -J
动态传入并发参数:
bash
体验AI代码助手
代码解读
复制代码
jmeter -n -t adduserinfo.jmx -Jconcurrency=200 -Jduration=1 -Jcount=1 -l add200.jtl
-
参数映射:
${__P(concurrency)}
→ 线程数(并发用户数)${__P(duration)}
→ 测试持续时间(分钟)${__P(count)}
→ 每个线程循环次数
线程组配置:
- 线程数:
${__P(concurrency,1)}
- 持续时间:
${__P(duration,1)}
分钟 - 循环次数:
${__P(count,1)}
二、完整测试计划结构
markdown
体验AI代码助手
代码解读
复制代码
Test Plan ├── User Defined Variables(全局变量) ├── Thread Group │ ├── Duration: ${__P(duration,1)} │ ├── Threads: ${__P(concurrency,1)} │ └── Loop Count: ${__P(count,1)} │ ├── HTTP Request │ │ ├── Body Data: │ │ │ "username": "${__RandomString(8,abcdefghijklmnopqrstuvwxyz,)}" │ │ │ "phone": "${__Random(18900000000,18999999999,)}" │ └── Results Tree(调试用) └── Summary Report(结果聚合)
三、执行与结果分析
1. 命令行执行
bash
体验AI代码助手
代码解读
复制代码
jmeter -n -t adduserinfo.jmx -Jconcurrency=200 -Jduration=1 -l add200.jtl
- 输出文件:
add200.jtl
(包含所有请求的响应时间、状态码等原始数据)
2. 生成可视化报告
bash
体验AI代码助手
代码解读
复制代码
jmeter -g add200.jtl -o ./report
生成 HTML 报告,包含:
- 响应时间分布、吞吐量(TPS)、错误率统计
- 随机变量实际生成值验证(通过
View Results Tree
抽样检查)
四、总结
此方案通过 JMeter 内置函数生成随机变量 + 命令行动态传参,实现了:
✅ 高并发场景下的参数唯一性保障
✅ 测试参数灵活调整(无需修改 JMX 文件)