性能测试工具 Jmeter(五十一) - 从入门到精通高级篇 - jmeter 之运动战(详解教程)

北京-宏哥 · 2025年11月06日 · 426 次阅读

1.简介

运动战是一种军事作战方式,依托较大的作战空间来换取时间移动兵力包围敌方,以优势兵力速战速决,运动战的运用归为这样一段话 “避敌主力,诱敌深入,集中优势兵力逐个击破”。今天宏哥也当一回将军,指挥 jmeter 在运动中消灭敌人。好了闲话少说,回归正题,今天主要是讲解和分享:在 jmeter 运行中来更改 jmeter 的负载。

2.运行中来更改 jmeter 的负载

从文字中,我们很容易看出意思就是在 jmeter 测试运行脚本过程中,但是在不停止运行脚本的情况下修改 jmeter 的负载压力,来达到我们预期的测试效果。大致步骤就是:宏哥将通过 Constant Throughput Time(吞吐量计时器)、一个函数和 BeanShell 服务器组合完成 jmeter 的运动战。具体步骤如下:

2.1 建立测试脚本

1、建立测试计划,添加线程组,为了后边容易观察负载变化,宏哥将线程组设置成永远。如下图所示:

2、添加取样器,取样器设置如下图所示:

3、添加 Constant Throughput Time(吞吐量计时器),切记这个计数器是在度娘的下边。设置(用到的函数就是__P)如下如图所示:

4、最后分别添加监视器:View Results Tree、Graph Results 和 jp@gc - Bytes Throughput Over Time。如下图所示:

2.2BeanShell 服务器

使用 JMeter Beanshell 作为服务器,以便发出 Beanshell 命令。我们通过调用 beanshell 函数来更新先前定义的 “hits” 参数。Beanshell 是一个内置于 JMeter 中的 Java 源代码解释器。

1、在 jmeter.properties 上取消注释以下行(大约在 908 左右)你也可以打开文件 Ctrl+F 快速查找 BeanShell 定位到,如下图所示:

2、重启 jmeter,docs 命令窗口输入:Netstat -an | find “9000” ​ 命令查看端口运行状态,如下图所示:

同时在 jmeter 的启动页面也可以看到启动的端口,如下图所示:

3、在 JMeter 主目录下创建文件夹 bsh,并添加一个名为 update_parameter.bsh 的.bsh 文件,其中包含以下内容:setprop("hits",args[0]); ​ 如下图所示:

4、在 jmeter 的 home 目录下输入 cmd 命令,进入到 docs 命令窗口,如下图所示:

5、执行 *dir bash\* 如下图所示:

6、文件调用 setprop 函数以通过第一个参数 (args [0]) 中的值更新 “hits” 现在能够在测试运行时调用创建的.bsh 来更新 “hits”。在 jmeter 的 home 目录下通过以下命令将参数更新为每分钟 “1200” 个请求:

java -jar .\lib\bshclient.jar localhost 9000 .\bsh\update_parameter.bsh 1200

7、因为宏哥开始是 1200,现在宏哥更新成 120,如下图所示:

8、运行一段时间后,宏哥再从 120 更新成 1200,如下图所示:

9、观察运行中的吞吐量,有明显的改变,是不是呈现出一个 U 字形(马蹄形)啊,因为刚开始宏哥设置的吞吐是 1200 运行一段时间后,通过命令动态修改成 120,然后再运行一段时间后,通过命令动态修改成 1200,所以才成如图 U 型。如果修改成 120,立刻在修改成 1200 就会成 V 字形哦。如下图所示:

3.小结

小伙伴们可能按照宏哥的步骤做完后,没有看到宏哥的效果,其实宏哥第一次运行也没有看到。排查了一圈没有问题啊,到底是哪里出问题了,没有达到预期的效果。然后宏哥将线程组里用户修改成 10 以后,出现了预期的效果,宏哥猜测可能是由于一个用户,吞吐量 120 已经够用了,所以从 1200 变成 120,再变成 1200 基本是一条直线,没有什么变化。知道内在原理或者宏哥说的不对的,可以告诉宏哥或者指出来,宏哥及时纠正。

暫無回覆。
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册