如何为每个请求在Jmeter中只调用一次JSR223预处理器



在我的脚本中使用JSR 223预处理器。在脚本中,有一个API的主体数据如下:

{`"key":"appStorage","value":"{"model_sta10:":"{\"StratSim_Controls!R15C5\":\"10\",\"Inputs_Main!R23C5\":\"10amname\"}","return_url":"/main/welcome-screen",`round_value`":"1","round-one-star10d":"true","intro-comple10":"true"}"}

但是当我执行脚本时,它不工作,得到错误和一个松弛从响应中删除。

所以我添加了JSR 223预处理器,请求代码如下:

`import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase
def request = sampler.getArguments().getArgument(0).getValue()
request = request.replace('te',vars.get('te')).replace('teamname', vars.get('teamname'))
def arguments = new org.apache.jmeter.config.Arguments();
sampler.setArguments(arguments);
sampler.addNonEncodedArgument('',request,'')
sampler.setPostBodyRaw(true)
`

并在body中传递参数:

{"key":"appStorage","value":"{"model_state:":"{\"StratSim_Controls!R15C5\":\"te\",\"Inputs_Main!R23C5\":\"teamname\"}","return_url":"/main/welcome-screen","round_value":"1","round-one-started":"true","intro-complete":"true"}"}
`

但是在脚本中此请求存在多次,我必须在每个请求中添加JSR 223预处理器,我们是否有任何解决方案,我们可以只使用一次所有请求的代码?

我尝试了解决方案,我在线程组中添加了JSR223预处理器,但它无法获得getvalue()的错误。

看起来在JSR223预处理器的作用域中至少有一个采样器没有请求体,即您正在发送没有参数的GET请求。

你可以使用sampler简写和一些if条件结构:

  • 检查当前sampler是否为HTTP请求采样器
  • 检查它是否至少有一个参数

类似:

if (sampler instanceof org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy) {
if (sampler.getArguments().getArgument(0) != null) {
//your code here
}
} 

如果你把JSR223预处理器放在线程组级别,它将在线程组中的每个采样器之前执行,所以你可能想要提出更多的条件来过滤掉不想要的执行。

更多信息:JMeter的Groovy模板备忘单

最新更新