JMeter Beanshell groovy script doesn't work

2019-09-14 20:43发布

I added a BeanShell Assertion to my JMeter testcase. I want to check a JSON document in JMeter from an API.

My script looks like this:

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."

If i'm trying to start my testcase, i got the following response in my View Results Tree:

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.

Screenshot

How can i fix this issue?

Edit: Screenshot JSR223 Assertion Screenshot2

1条回答
够拽才男人
2楼-- · 2019-09-14 21:09

There are multiple problems with your script:

  1. Your JSON is not a valid one, you need to escape quotes
  2. Groovy assert keyword won't cause assertion failure, it will only print exception into jmeter.log file, if you need to fail assertion itself you need to use AssertionResult shorthand instead

Reference code:

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')
}

See Groovy is the New Black article for more information on using Groovy with JMeter

查看更多
登录 后发表回答