我正在使用 SOAP/XML-RPC 请求来测试 WSDL。此外,我为此请求创建了一个 Counter 元素。其中一个函数的每次调用都必须在其中一个参数中包含其他值。 是否有可能将最大计数器值保存到文件中? 所以当我开始测试时,该值将从文件中加载并增加计数器。 最后,这个最大值将再次保存到这个文件中。等等等等……
最佳答案
让我们放弃内置的 Counter 并绕过线程安全的 AtomicInteger。 添加一个带有 JSR223 Sampler 的setUp Thread Group(选择 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)
然后在您的常规线程组中的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
拆卸线程组
JSR223 Sampler
附言 请记住,为了简洁起见,我使用了 java.util.Properties 类的 put() 方法,这在 documentation 中是不鼓励的。 .
关于testing - 将计数器的最大值保存到 JMeter 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42909361/