0

我想了解在运行时实现的实际 JMeter 吞吐量行为。

场景 - 我正在使用恒定吞吐量计时器和 beanshell 脚本在运行时增加 JMeter 吞吐量,如此处所述 - https://www.blazemeter.com/blog/how-to-change-jmeters-load-during-runtime

测试计划 - 与上述 CTT 一起,配置了具有固定 #threads 和无限循环迭代的简单线程组。使用 GET 调用的 HTTP 采样器。测试计划中没有添加其他计时器或插件。

随着我在运行时不断增加 JMeter 的目标吞吐量,我注意到实际实现的吞吐量值主要受两个因素的限制 -

  1. 我的线程组中的线程。
  2. 目标应用的性能瓶颈。

我对这两个限制都有疑问-

  1. 一旦使用当前线程组中的所有线程实现了最高吞吐量(假设目标应用程序还没有错误),有没有办法在运行时动态增加 #threads 以实现更高的 JMeter 吞吐量?

  2. 现在,随着我不断增加 JMeter 吞吐量,由于目标应用程序的错误,它无法进一步增加。JMeter 如何识别我的目标应用程序的性能瓶颈并对其做出反应?它是否会增加任何延迟或终止线程或应用任何此类机制以将其吞吐量降低到目标应用程序可以承受的最大值?

  3. 继续第 2 点,如果 JMeter 通过任何方法识别并响应性能瓶颈,控制其吞吐量以使其保持在目标应用程序的最大限制内的因素(如错误率、响应延迟等)是什么?这些因素是可配置的还是可扩展的?

4

1 回答 1

1
  1. 您可以使用线程组中的线程数来玩同样的技巧,只需使用__P() 函数定义它,您就可以使用 Beanshell 服务器对其进行操作。另一种选择是使用JSR223 测试元素和 Groovy 语言在需要的地方/时间添加新线程,例如:

    ctx.getThreadGroup().addNewThread(0, ctx.getEngine())
    
  2. JMeter 不会“识别”任何东西,它只是尽可能快地执行采样器,每秒的请求数取决于两个因素:

    • 您的应用程序需要能够足够快地响应
    • JMeter 本身需要能够足够快地发送请求,即您需要遵循JMeter 最佳实践

    没有检测被测应用程序行为的“机制”,最接近的解决方案是Auto Stop Listener

  3. 见第 2 点

于 2020-06-22T16:47:54.083 回答