【问题标题】:JMeter Beanshell groovy script doesn't workJMeter Beanshell groovy 脚本不起作用
【发布时间】:2017-05-24 08:58:51
【问题描述】:

我在我的 JMeter 测试用例中添加了一个 BeanShell 断言。 我想通过 API 检查 JMeter 中的 JSON 文档。

我的脚本如下所示:

import groovy.json.*

def jsonText = '''
{
    "message": {
        "header": {
            "from": "mrhaki",
            "to": ["Groovy Users", "Java Users"]
        },
        "body": "Check out Groovy's gr8 JSON support."
    }
}      
'''

def json = new JsonSlurper().parseText(jsonText)

def header = json.message.header
assert header.from == 'mrhaki'
assert header.to[0] == 'Groovy Users'
assert header.to[1] == 'Java Users'
assert json.message.body == "Check out Groovy's gr8 JSON support."

如果我尝试启动我的测试用例,我会在查看结果树中得到以下响应:

Assertion error: true
Assertion failure: false
Assertion failure message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval In file: inline evaluation of: ``import groovy.json.*   def jsonText = ''' {     "message": {         "header": { . . . '' Encountered "def" at line 3, column 1.

我该如何解决这个问题?

编辑: 截图 JSR223 断言

【问题讨论】:

  • 尝试使用相同代码的 JSR223 断言,但语言选择 groovy
  • 如果我在使用 groovy 语言的 JSR223 断言中尝试脚本,我在结果树中没有收到对 JSR223 断言的反馈。但是测试必须失败。
  • 你能解释为什么它必须失败,比如如果你将 (assert header.to[1] == 'Java Users') 更改为 (assert header.to[1] == 'Java Users123123 ') 它会失败。
  • 测试必须失败,因为来自 API 的 JSON 文档的结构与我的常规测试脚本不同。但是在 JSR223 Assertion 中我没有得到关于测试结果的回应。没有成功或失败的回应。
  • 我明白了,我认为你应该检查这个问题,你可以重组你的 groovy 代码来验证 json。 *.com/questions/39280950/…

标签: groovy jmeter beanshell


【解决方案1】:

您的脚本存在多个问题:

  1. 您的 JSON 无效,您需要转义引号
  2. Groovy assert keyword 不会导致断言失败,它只会将异常打印到 jmeter.log 文件中,如果您需要断言本身失败,则需要使用 AssertionResult 简写代替李>

参考代码:

def jsonText = '{\n' +
        '    "message": {\n' +
        '        "header": {\n' +
        '            "from": "mrhaki",\n' +
        '            "to": ["Groovy Users", "Java Users"]\n' +
        '        },\n' +
        '        "body": "Check out Groovy\'s gr8 JSON support."\n' +
        '    }\n' +
        '}'

def json = new groovy.json.JsonSlurper().parseText(jsonText)

def header = json.message.header
if (header.from != 'mrhaki' || header.to[0] != 'Groovy Users' || header.to[1] != 'Java Users' || json.message.body != "Check out Groovy's gr8 JSON support.") {
    AssertionResult.setFailure(true)
    AssertionResult.setFailureMessage('There was a problem with JSON')
}

有关将 Groovy 与 JMeter 结合使用的更多信息,请参阅 Groovy is the New Black 文章

【讨论】:

    最近更新 更多