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

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

我用Google搜索了我的问题并找到了一个使用JMeter插件的建议解决方案。 但是在这个解决方案中,我必须在运行测试计划之前安排线程组,这是我不想要的。 我还发现了另一种可能改变属性的潜在解决方案 ,但不会影响运行时的测试计划行为。

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

这可能吗?

简短的回答是:不,你不能在运行时动态地改变线程数。 每个线程计数值仅在首次编译测试计划时读取一次,并且在此点之后不再解析,因此它保持固定。

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

你是什​​么意思

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

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

使用jMeter插件的Ultimate thread group,您可以涵盖任何可以想象的场景。

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

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

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

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

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

在Jmeter中,如何使用beanshell sampler变量设置可变数量的线程?

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

  • 持续时间测试 – 相同数量的用户运行整个时间(可能是一个短暂的上升期)
  • 断点测试 – 逐渐增加用户数量直到应用程序中断
  • Spike测试 – 以恒定数量的用户运行,但偶尔也是如此
    投入大量用户

在应用程序中断之前,断点测试会增加用户数量(关键是应用程序可以扩展的程度)。 您可以使用线程组“ramp up period”属性来执行此操作。 如果将加速时间设置为1000并将线程数设置为100,则每10秒添加1个线程。

Spike测试就像持续时间测试,但在某些时间间隔有大量用户登录。这用于衡量应用程序在高峰时段的响应时间,或者如果您突然获得大量用户,它将如何响应(非常实际情况)。

我发现Jmeter不能处理企业负载测试中所需的所有负载测试场景。 我正在考虑的一个工作就是启动所有线程,但找到一种方法让他们中的一些人睡觉。 所以你可以将线程数设置为1000,但不知何故使980个线程睡眠或什么都不做。 那么也许当time_in_seconds%5 == 0(每5分钟)你允许其他线程运行 – 模拟一个尖峰测试。 我们的想法是你可以将线程硬代码编写为1000并且将始终运行1000个线程 – 但它们并非都必须始终执行某些操作。

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

更新:我刚刚发现这个插件允许不同类型的测试。 还没试过但看起来很有希望: http : //jmeter-plugins.org/wiki/ThroughputShapingTimer/

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

您可以使用函数调用,或对用户参数的变量引用(可以是函数),也可以使用对测试中较早的函数设置的变量的变量引用。 这样做的方法不止一种。

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

请在JMeter线程组中设置以下属性,如下面$ {__ property(group1.threads)}

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

jmeter -Jgroup1.threads = 10

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

你当然可以。 这是您现有网站的HTTP日志所针对的。 您还可以使用Omniture等工具中的日志或CDN日志。 如果您查看日志中的实际用户IP地址,请求和引用标记的组合,您将能够在您的站点上构建单个用户的遍历地图。 您将能够分析给定业务流程的高命中独特叶节点页面,以了解特定业务流程每小时发生的次数。 您可以通过查看Omniture等工具中的漏斗来检查放弃。 如果您需要用于此分析的工具,我建议使用Splunk。 它易于安装和配置。 价值实现的速度非常快。

您用于分析的日志数据越多,您就可以实现用户在一天/一周/月/现货销售/季度末/年末/等时的实际情况。您需要由于您需要允许性能测试模型的增长,因此将某个时间点的实际值与实际的早期时间点相结合,以便项目随着时间的推移而增长。

如果你没有得到正确的值,那么你的测试值作为生产中将会/可能发生的事件的预测因子将是非常低的。 这不是任何给定工具的失败,而是作为测试要求的一部分的实际负载模型的计划前端的过程失败。 如果您无法构建这些模型,那么您需要将某人吸引到您的团队中。

这种产生独立于工具的有效载荷模型的能力是降低风险和抛掷载荷的试验之间的差异。

通过启用BeanShell服务器,您可以在运行时改变属性。 只需在端口9001上启用它和telnet(警告:不安全!)基于我做过的测试,不幸的是,似乎线程计数它没有在运行时应用。 但是,您仍然可以通过其他方式操纵测试的负载,例如,应用一个名为“throughput”的属性参数化的costant吞吐量计时器 ,并在运行时更改它,如下所示:

setprop("throughput","2000"); 

它在指南中得到了很好的解释。