Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时更改JMeter中测试计划的线程数_Java_Jmeter_Load Testing - Fatal编程技术网

Java 在运行时更改JMeter中测试计划的线程数

Java 在运行时更改JMeter中测试计划的线程数,java,jmeter,load-testing,Java,Jmeter,Load Testing,我想在运行时更改JMeter测试计划的线程数 我在谷歌上搜索了我的问题,找到了一个使用JMeter插件的解决方案。但是在这个解决方案中,我必须在运行测试计划之前安排线程组,这是我不想要的。我还发现了哪些更改了属性,但不影响运行时的测试计划行为 最终,我要做的是更改线程组中给定的线程数,并让它立即增加或减少当前运行测试计划中的线程数 这可能吗?IMHO这只是一个花哨的特性,在进行适当的性能测试时没有实际的好处。 为了生成相关的测试输出(报告),您需要明确定义的测试方法和场景。为了比较任何应用程序/

我想在运行时更改JMeter测试计划的线程数

我在谷歌上搜索了我的问题,找到了一个使用JMeter插件的解决方案。但是在这个解决方案中,我必须在运行测试计划之前安排线程组,这是我不想要的。我还发现了哪些更改了属性,但不影响运行时的测试计划行为

最终,我要做的是更改线程组中给定的线程数,并让它立即增加或减少当前运行测试计划中的线程数


这可能吗?

IMHO这只是一个花哨的特性,在进行适当的性能测试时没有实际的好处。 为了生成相关的测试输出(报告),您需要明确定义的测试方法和场景。为了比较任何应用程序/服务器/基础架构更改的影响,您需要重复性

你这是什么意思

我们无法预测我们网站的用户

这就是我们首先进行性能测试的原因。了解我们的应用程序/基础架构限制。
也就是说,您可以生成的最重要的度量是,当并行用户数发生变化时,应用程序响应时间如何变化。但不会在运行时不稳定地更改


使用,您可以涵盖任何可以想象的场景。

简短的回答是:不,您不能在运行时动态更改线程数。每个线程计数值在第一次编译测试计划时只读取一次,在此之后不会再次解析,因此它保持不变。

您可以根据在启动线程中设置的变量对其进行更改。见下文

但是,一旦线程组启动,就不能修改它。对于那个说这个功能没有用的家伙,我不同意。有许多类型的负载测试,它们在持续时间内运行的用户数并不相同。以下是我们在我工作的银行进行的两种企业负载测试示例:

  • 持续时间测试-在整个时间内运行相同数量的用户(可能是 具有较短的爬坡期)
  • 断点测试-逐渐增加用户数量,直到 申请中断
  • 峰值测试-与固定数量的用户一起运行,但偶尔
    投入大量用户
断点测试会增加用户数量,直到应用程序中断(重点是看你的应用程序可以扩展到多高)。您可以使用线程组的“ramp-up-period”属性进行排序。如果将爬升时间设置为1000,线程数设置为100,则每10秒将添加1个线程

尖峰测试类似于持续时间测试,但在某些时间间隔内会有大量用户登录。这用于评估应用程序在高峰时间的响应时间,或者如果突然获得大量用户(一个非常真实的场景),它将如何响应

我发现Jmeter不能处理企业负载测试中需要的所有负载测试场景。我考虑的一个解决办法是启动所有线程,但找到一种方法让其中一些线程休眠。因此,您可以将线程数设置为1000,但不知何故,可以使980个线程休眠或不执行任何操作。然后,当时间(单位:秒)为%5==0(每5分钟)时,您可能会允许其他线程运行—模拟尖峰测试。这个想法是,您可以将线程硬编码为1000,并且始终有1000个线程在运行——但它们不必总是都在做某些事情

(换句话说,你可能会找到一种方法,但你必须有创造力)

更新: 我刚刚发现了这个插件,它允许不同类型的测试。尚未尝试,但看起来很有希望:

您可以使用命令行选项在运行时设置/更改线程数

您可以使用函数调用,或对用户参数的变量引用(这些参数可以是函数),或对函数在测试之前设置的变量的变量引用。做这件事的方法不止一种

假设您希望能够改变测试计划中的线程数。选择合适的属性名称,例如group1.threads。用以下函数调用替换GUI(或JMX,如果您觉得勇敢的话!)中的线程数:

请在JMeter线程组中设置以下属性,如下所示 ${uuuu属性(group1.threads)}

然后,在启动JMeter时,在命令行上定义属性:


jmeter-Jgroup1.threads=10

此功能确实很有用,即使使用Loadrunner等商业工具也很难实现。我会把它比作寻找扬声器的最大音量。您可以手动将音量调高,直到它开始爆裂,然后稍微调低音量以保持最大音量。同样,要找到应用程序的峰值容量,您需要控制将音量“调高”,直到出现错误,然后稍微调低音量以查看其是否稳定。然后,您可以维护该负载以找到瓶颈所在

无论如何,为了回答这个问题,我过去所做的是使用外部影响,例如文件名或类似的。然后将其与线程唯一引用相结合,您可以控制运行哪些线程以及保留哪些线程(通过暂停或类似方式)

例如,如果您从100个线程开始,然后在特定位置创建一个名为“5.txt”的文件,您可以添加代码,这样,如果线程看到自己的引用等于或小于该数字,那么它就可以运行。如果没有,它就会暂停。在本例开始时,5个线程将运行,95个线程将暂停。然后可以将文件重命名为“25.txt”,线程6到25将开始运行。它也会以另一种方式工作,将其更改为“20.txt”将意味着线程21-25再次暂停

关键是启动足够多的线程以超过预期的峰值

我们无法预测该产品的用户
setprop("throughput","2000");