在我的脚本中使用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模板备忘单