将计数器的最大值保存到 JMeter 中的文件

Saving a max value of counter to file in JMeter

我正在使用 SOAP/XML-RPC 请求来测试 WSDL。此外,我为此请求创建了一个 Counter 元素。其中一个函数的每次调用都必须在其中一个参数中包含其他值。 是否有可能将最大计数器值保存到文件中? 所以当我开始测试时,该值将从文件中加载并增加计数器。 最后,这个最大值将再次保存到这个文件中。等等等等...

让我们放弃内置的 Counter 并绕过线程安全 AtomicInteger。 添加 setUp 线程组JSR223 采样器(选择 groovy 作为脚本语言)到您的测试计划。我们将使用它从文件中读取值。该线程组将在所有其他线程组之前执行,并将为我们提供初始值。 将以下代码添加到采样器:

import java.util.concurrent.atomic.AtomicInteger

counter = new File($/C:\Path\ToFile\fileName.txt/$).text
ai = new AtomicInteger(Integer.valueOf(counter))
props.put("sharedAtomicInteger", ai)

然后在常规线程组[=47]中的SOAP/XML-RPC请求之后添加另一个JSR223采样器 =].

将以下代码添加到采样器中:

ai = props.get("sharedAtomicInteger")
variable = ai.incrementAndGet()
vars.put("variable", Integer.toString(variable))

现在,临时计数器的值存储在变量中,可以用于此线程发出的其他请求。

将带有 JSR223 采样器teardown 线程组 添加到您的测试计划中。该线程组将在所有其他线程组之后执行,并将最大值写入文件。

将以下代码添加到采样器中:

ai = props.get("sharedAtomicInteger")
new File($/C:\Path\ToFile\fileName.txt/$).write(ai.toString())

最后,您的测试计划应如下所示:

setUp Thread Group

JSR223 Sampler

常规线程组

SOAP/XML-RPC Request

JSR223 Sampler

teardown 线程组

JSR223 Sampler

P.S。 请记住,为了简洁起见,我使用了 java.util.Properties class 的 put() 方法,这在 documentation.

中是不鼓励的
  1. 将值保存到文件中(假设使用 JSR223 Element and Groovy 语言)

    new File("value.txt").text = vars.get("foo")
    
  2. 从文件中读取值(假设 __FileToString() 函数)

    ${__FileToString(value.txt,,)}
    

我使用了第一条评论中的提示,并按照以下方式进行操作:



transfer - Simple Controller

reading transactionId - JSR223 PreProcessor
transfer - SOAPXML-RPC Request
saving transactionId - JSR223 PostProcessor

JSR223 预处理器

脚本语言:groovy

import java.util.concurrent.atomic.AtomicInteger;

initial =  new File("${absolute_path}transactionid.txt").text;
initial = initial.trim();
ai = new AtomicInteger(Integer.valueOf(initial));
transactionId = ai.incrementAndGet();
vars.put("transactionId", Integer.toString(transactionId));

SOAPXML-RPC 请求

这里我使用 transactionId 作为 SOAP 请求中的参数之一。

JSR223 后处理器

脚本语言:groovy

transactionId = vars.get("transactionId");
new File("${absolute_path}transactionid.txt").write(transactionId.toString());



${absolute_path} 是测试计划中定义的变量:

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}

这是包含此 JMeter 项目的文件夹路径。此文件夹还包含读取到此测试用例的文件。