我创建了一个包含两个线程组的测试计划。每个线程组都有一个SOAP / XML-RPC请求采样器。线程组A还有一个正则表达式提取器,其中包含:
Reference Name : ABC
Regular Expression :<response>([A-Z 0-9]+)</response>
Template: $1$
此外,Thread Group A有一个带有
的BeanShellAssertionName: Extract value
Script: ${__setProperty(ABC, ${ABC})};
我想要做的是修改ABC变量,然后将其传递给第二个线程组的SOAP Sampler。
所以,如果ABC等于1000(响应标记持有一个int),我希望将该值除以2,然后将其传递给第二个采样器,如:
<abcValue>${__P(modifiedABC)}</abcValue>
有什么想法吗?
修改
我已经尝试了preProcessors(在第二个线程组上)和postProccessors(在第一个线程组上)但是我试过的任何东西都给了我错误的回复:
ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String value = Integer.toString(Integer.parseInt(72295) /2); props.put("modifiedABC", v . . . '' : Typed variable declaration : Error in method invocation: Static method parseInt( int ) not found in class'java.lang.Integer'
答案 0 :(得分:1)
如果您的回复包含除A-Z,''或0-9以外的任何内容,则正则表达式提取程序将失败。将匹配组设置为(。+)可能更好,因此它会收集响应中的任何内容并使用单独的正则表达式断言来检查内容是否符合预期。这样,当您的下一个样本通过错误输入形成错误时,如果结果不好,您将获得样本失败,而不是后续失败。
在线程组A断言中,你需要一些“s ..
$ {__ setProperty(“ABC”,“$ {ABC}”)}
这会将一个名为ABC的属性设置为名为ABC的变量值,这是我认为你想要的。
划分价值的简便方法是使用__javaScript()函数..
$ {__使用Javascript($ {ABC} / 2)}
您可以在jmeter中的任何位置使用它,它将替换您需要的值。确保在线程组B的开头检索了属性,因为变量(ABC)在不同的范围内。
答案 1 :(得分:0)
线程组1
请使用&#39; Beanshell Post Processor&#39;为了您的要求。在您提取ABC的采样器下添加此后处理器。
以下链接将为您提供一个想法。 http://jmeter.apache.org/usermanual/component_reference.html#BeanShell_PostProcessor
请注意,默认情况下,所有内容都是Jmeter中的String。因此,您可能希望在将其除以2之前将其转换为整数。您必须在Beanshell Post处理器中添加类似的内容。
modifiedABC = Integer.toString(Integer.parseInt(props.get("ABC"))/2);
props.put("modifiedABC",modifiedABC);
线程组2
现在您想要访问第二个线程组中的modifiedABC。
只需使用
访问它${__P(modifiedABC)}