【问题标题】:JMeter slows down when using external file for groovy script将外部文件用于 groovy 脚本时,JMeter 变慢
【发布时间】:2020-09-30 20:15:09
【问题描述】:

我有一个带有 JSR223 预处理器的线程组,它遍历对象的唯一 ID 并对该对象资源发出请求。我正在尝试解决所有可能以百万计的对象。为了克服最大线程限制,每个线程寻址特定对象集并循环通过该对象集。整个线程组运行特定的时间段。这是预处理器 groovy 脚本。

// get unique object Id for the thread request
int numThreads = Integer.parseInt(args[0]);
int totalObjects = Integer.parseInt(args[1]);
int objectsPerThread = totalObjects/numThreads;
int initialObjectsCount = (ctx.getThreadNum()) * objectsPerThread;
int objectId = initialObjectsCount + (ctx.getVariables().getIteration()) % objectsPerThread;

vars.put("uniqueId", Integer.toString(objectId));

将此脚本直接粘贴到 GUI 中时一切正常。 JMeter 客户端能够轻松地使服务器饱和。我想在多个地方使用这个脚本并将其提取到一个文件中,以便在 JMX 文件之间共享。当我这样做并在 JSR223 中指定脚本的文件名时,JMeter 客户端无法以与将此脚本粘贴到 GUI 时相同的效率执行。 Cache compiled script if available 选项在这两种情况下都会被选中。

  • 这是预期的吗?
  • 是否有更好的方法来共享脚本,例如使用测试片段,假设预处理器可以用作测试片段。

【问题讨论】:

    标签: groovy jmeter


    【解决方案1】:

    这是意料之中的,因为文件 IO 比内存操作慢。

    如果这很关键,您可以使用Test FragmentModule Controller 来避免代码重复。

    请注意,预处理器仅与 Sampler 一起执行,因此您必须切换到 JSR223 Sampler

    如果您不想在测试结果中看到 JSR223 采样器,只需在脚本中的某处添加下一行:

    SampleResult.setIgnore()
    

    它会 suppress the output so the sampler 不会被侦听器捕获,并且您不会在 .jtl 结果文件中看到它

    【讨论】:

    • 我认为我们现在将坚持尽量减少重复。迁移到 JSR223Sampler 将是一个重大变化,但感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多