将计数器的最大值保存到 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.
中是不鼓励的
将值保存到文件中(假设使用 JSR223 Element and Groovy 语言)
new File("value.txt").text = vars.get("foo")
从文件中读取值(假设 __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 项目的文件夹路径。此文件夹还包含读取到此测试用例的文件。
我正在使用 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.
中是不鼓励的将值保存到文件中(假设使用 JSR223 Element and Groovy 语言)
new File("value.txt").text = vars.get("foo")
从文件中读取值(假设 __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 项目的文件夹路径。此文件夹还包含读取到此测试用例的文件。