解锁JMeter隐藏技巧:随机变量让测试数据“活”起来

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 版本。

  1. 找到下载安装包的目录,双击安装包进入安装向导。

 后续直接下一步,安装即可,如果需要更改安装位置则自己新建个jdk1.8.0、jre1.8.0 目录安装。

  1. 配置环境变量

在环境变量-》系统变量

  • 新建变量名JAVA_HOME,变量值是JDK安装路径

  • 新建变量CLASSPATH,变量值是 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

  • 找到Path变量,双击变量值编辑,新建变量值为%JAVA_HOME%\bin

  1. 校验是否配置成功

cmd ,输入 java -version即可查看到当前配置的版本号,则证明配置成功

windows 安装 jmeter

在 Binaries 下面的 JMeter 程序压缩包文件 下载列表,点击 apache-jmeter-5.x.x.zip 这样的下载链接,下载到一个合适的目录,我这里是 D:\tools 目录下。

  1. 然后解压该文件,选择解压到当前目录,即出现一个名为 apache-jmeter-5.4.1 的目录,进入到该目录中,再进入到名为bin的目录。
  • 如果是Windows系统:双击名为 jmeter.bat 的文件,即可打开JMeter管理界面程序。
  • 如果是Mac系统,在命令行窗口中,进入到jmeter的bin目录,执行命令 sh jmeter.sh
  1. 配置环境变量如下
  • 新建变量名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

  1. 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
  1. 环境变量的配置 使用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

  1. 验证java是否安装成功
  • 验证JAVA_HOME echo $JAVA_HOME
  • 验证java安装是否成功 java -version
  • 验证jdk是否安装成功 javac

linux 安装 jmeter

  1. 下载:Index of /dist/jmeter/binaries

下载好对应的版本直接到 linux 解压就好,要提前装好java环境。

  • 检查linux系统上是否安装JDK,输入命令
    • java -version
  • 上传 apache-jmeter-5.2.5.tgz 至linux服务器
  • 使用命令 tar -zxvf apache-jmeter-5.2.5.tgz 解压文件

  1. 配置 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 来启动

配置选项

我们可以在节目选项中来设置语言、界面外观风格、字体大小等。

接口测试

  1. 左侧的 Test Plan,中文翻译为测试计划,可以理解为一个测试用例,我们可以给这个用例来命名。

  2. 添加线程组

右键测试计划来添加线程组,可以给线程组重命名,通过线程组来设置线程数、所有线程执行的时间等信息: 

参数说明:

  • 线程数:模拟请求的次数;
  • Ramp-Up时间(秒):所有线程执行的时间,比如:配置了 2 秒,线程数配置了 50,要在 2 秒内执行 50 次请求;
  • 循环次数:要轮询执行几次;
  • 调度器
    • 持续时间(秒):就是本次执行的线程持续多长时间;
    • 启动延迟(秒):本次执行的线程启动要延迟多长时间执行;
  1. 接下来,我们开始配置具体需要测试的接口地址。

在线程组上右键,选择添加-》取样器-》HTTP请求

填上测试接口信息:

  1. 设置配件元件 ,可以设置HTTP请求的基本信息,如 http 信息头管理器、http Cookie 管理器、 http缓存管理器、http请求默认值,需要根据自己的接口来设置不同的参数。

  1. 配置监听器,可以添加 汇总报告、聚合报告、察看结果树

  • 汇总报告:可以查看接口的最大、最小、平均请求值,可以看接口的异常率、吞吐量、接口、发送、平均字节数等信息:

  • 聚合报告:可以查看接口请求最大、最小、平均值、异常率、吞吐量等信息:

  • 察看结果树:查看每个请求成功与否。可以配置每个请求的日志输出路径,以什么格式的文件输出:

参数意义:

  • 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 随机变量与命令行参数

image.png

image.png

一、测试计划设计(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 文件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值