繁体   English   中英

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

[英]How to call JSR223 Preprocessor in Jmeter only once for each request

在我的脚本中使用 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)
`

并在正文中传递参数:

{"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 预处理器,但它无法获取 getCalue() 的错误。

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

您可以使用sampler速记和一些if条件结构来:

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

就像是:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM