【问题标题】:jmeter: AbstractJavaSamplerClient - Do setUpTest only once for all threadsjmeter:AbstractJavaSamplerClient - 只对所有线程执行一次 setUpTest
【发布时间】:2016-07-12 15:25:14
【问题描述】:

我正在通过扩展AbstractJavaSamplerClient 使用 JMeter 开发 Java 请求采样器。测试是这样的:

public class JmeterTest extends AbstractJavaSamplerClient {
    public void setupTest(JavaSamplerContext context) {
       System.out.println("Test setup");
    }

    public SampleResult runTest(JavaSamplerContext context) {
        SampleResult result = new SampleResult();
        System.out.println("Test..");
        result.setSuccessful(true);
        result.setResponseData("Success");
    }

    public void teardownTest(JavaSamplerContext context) {
       System.out.println("Test cleanup");
    }
}

我从这个测试类中创建了一个 jar,并通过 JMeter UI(通过 Java Request Sampler)指向它。我的问题是当我使用5 users 运行测试时,setUpTest 和 tearDownTest 方法会根据设计为每个用户调用。

是否有任何设置使线程组中的所有线程只调用一次 setUp 和 Cleanup 方法。我的要求是只对所有线程进行一次设置和清理

【问题讨论】:

    标签: java multithreading jmeter


    【解决方案1】:

    您可以尝试以下选项:

    1. setUp Thread Group 中单独执行设置操作
    2. 在同一线程组中分别执行设置操作。将设置逻辑放在If Controller 下并使用${__BeanShell(vars.getIteration() == 1)} 作为条件
    3. 修改你的代码:

      public void setupTest(JavaSamplerContext context) {
         if (JMeterContextService.getContext().getVariables().getIteration() == 1) {
             System.out.println("Test setup");
         }
      }
      

    第 2 点和第 3 点均假设 setUp 代码仅在每个线程的测试的第一次迭代期间执行。请记住,JMeterVariables.getIteration() 编号仅在发生Thread Group 级别循环时才会增加。

    【讨论】:

    • 太好了,谢谢。选项 1 将暂时解决我的问题。我会阅读更多关于 2 和 3 的内容。
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2021-10-13
    • 2016-12-10
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多