10

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

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

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

这可能吗?

4

7 回答 7

6

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

你是什​​么意思

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

这就是我们首先进行性能测试的原因。找出我们的应用程序/基础设施限制是什么。
即,您可以产生的最重要的指标是当并行用户数量发生变化时,您的应用程序响应时间如何变化。但不要在运行时无规律地改变。

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

于 2012-04-26T09:13:35.080 回答
3

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

于 2012-05-05T16:27:06.033 回答
3

这个特性确实很有用,而且即使使用诸如 Loadrunner 之类的商业工具也难以实现。我会将其与找到扬声器的最大音量进行比较。您可以手动调高音量,直到它开始噼啪作响,然后稍微调低音量以保持最大音量。同样,要找到应用程序的峰值容量,您希望控制“调高音量”直到出现错误,然后稍微降低音量以查看它是否稳定。然后,您可以保持该负载以找到瓶颈所在。

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

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

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

于 2016-04-21T10:57:56.127 回答
1

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

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

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

  • 持续时间测试 - 相同数量的用户在整个时间内运行(可能有很短的启动期)
  • 断点测试 - 逐渐增加用户数量,直到应用程序中断
  • 尖峰测试 - 使用固定数量的用户运行,但偶尔
    会引入大量用户

断点测试会增加用户数量,直到应用程序中断(重点是查看您的应用程序可以扩展多高)。您可以使用线程组的“加速期”属性来完成此操作。如果将加速时间设置为 1000 并将线程数设置为 100,它将每 10 秒添加 1 个线程。

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

我发现 Jmeter 不能处理企业负载测试所需的所有负载测试场景。我正在考虑的一项工作是启动所有线程,但找到一种方法让其中一些线程进入睡眠状态。因此,您可以将线程数设置为 1000,但以某种方式使其中的 980 个处于休眠状态或什么也不做。然后也许当 time_in_seconds%5==0 (每 5 分钟)你允许其他线程运行 - 模拟尖峰测试。这个想法是您可以将线程硬编码为 1000,并且将始终有 1000 个线程在运行 - 但它们不必一直都在做某事。

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

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

于 2015-01-09T19:36:06.380 回答
0

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

您可以使用函数调用,或对用户参数(又可以是函数)的变量引用,或对测试早期函数设置的变量的变量引用。有不止一种方法可以做到这一点。

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

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

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

jmeter -Jgroup1.threads=10

于 2015-06-11T12:08:19.433 回答
0

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

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

您用于分析的日志数据越多,您就越能接近用户在一天/周/月/现货销售/季度末/年末等期间所做的事情......您需要将某个时间点的实际值与较早时间点的实际值相结合,以预测随时间的增长,因为您需要允许性能测试模型的增长。

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

这种产生独立于工具的有效负载模型的能力是降低风险和抛负载测试之间的区别。

于 2016-04-22T14:01:40.807 回答
0

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

setprop("throughput","2000");

指南中对此进行了很好的解释。

于 2018-04-15T10:53:32.293 回答