【问题标题】:How to include the result of a groovy script in the body of a HTTP POST request in JMeter?如何在 JMeter 的 HTTP POST 请求正文中包含 groovy 脚本的结果?
【发布时间】:2020-02-12 11:49:24
【问题描述】:

使用 BeanShell PreProcessor 中编写的 groovy 脚本,我生成了一个带有一些参数的随机 JSON 对象。我无法在 JMeter 的 HTTP POST 请求正文中包含创建的这个对象(我在脚本中使用了 JsonBuilder)。 这是我创建 JSON 对象的脚本的 sn-p:

...
def json = new JsonBuilder();
def root = json parameter1: value1, parameter2: value2, parameter3: value3, parameter4: value4;

bsh.shared.root.process();
vars.put("BODY", root.toString());

我想在 JMeter 的 HTTP POST 请求的 BODY DATA 部分传递这个对象:

${BODY}

这是生成的响应数据:

The request content was malformed:
Unexpected character '$' at input index 0 (line 1, position 1), expected JSON Value:
${BODY}
^

【问题讨论】:

    标签: json post groovy jmeter httprequest


    【解决方案1】:

    您不能在 Beanshell 预处理器中使用 Groovy,因为 Groovy 和 Beanshell 是不同的野兽。

    例如,您尝试使用 exists in Groovy 但在 Beanshell 中不存在的 def 关键字,如果您打开 jmeter.log 文件,您将看到以下内容:

    BeanShellInterpreter:调用 bsh 方法时出错:eval 源文件:内联评估:``def json = new JsonBuilder();'':类型变量声明:类:在命名空间中找不到 def

    由于您的脚本在第一行失败,您的 ${BODY} 变量未定义,并且由 HTTP 请求采样器按原样发送,因此您收到此错误。

    切换到 JSR223 预处理器,确保从“语言”下拉列表中选择 groovy,并仔细检查 jmeter.log 文件中是否没有错误。

    更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多