JMeter - 如何验证响应json的特定元素是否存在

时间:2017-09-20 10:53:19

标签: json jmeter

我有一个REST请求,其响应类似于:     {“姓名”:[“彼得”,“约翰”,“莉莉”,“玛丽亚”]} 我需要一个断言来验证元素的数量是否至少为3(在上面的情况下是真的,因为总共有4个元素)并且元素 - “John”和“Maria”存在(我不关心其他值)。 我怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

这是怎么做的:

enter image description here

JSON Extractor提取到名称变量:

enter image description here

JSR223 Assertion使用“名称”变量:

enter image description here

Response Assertion对“名称”变量采取行动:

enter image description here

答案 1 :(得分:1)

您可以使用JSON path assertion。为了断言约翰是“在场”,就像这样设置

JSON path assertion for names

断言准确计数使用它像这样

JSON path assertion for count

但是你必须使用确切的名字数。所以更好的选择可能是使用JSR223 Assertion。您可以选择使用Javascript作为此代码的语言:

    json_body = JSON.parse(SampleResult.getResponseDataAsString());
    log.info("Finding JSON in response data: "+json_body);
    number_of_names=json_body.names.length;
    if(number_of_names<=3) {
        AssertionResult.setFailure(true);
        AssertionResult.setError(true);
        AssertionResult.setFailureMessage("Failed to match number of names. Expected number is 3, we got "+number_of_names);
        SampleResult.setSuccessful(false);
    }

截图:

JSR233 Javascript assertion

您也可以在JSR223中选择Groovy。它应该更快。使用此代码(它将检查数组的长度以及是否存在“John”):

import groovy.json.JsonSlurper;

def jsonSlurper = new JsonSlurper()
def json_body = jsonSlurper.parseText(SampleResult.getResponseDataAsString())
log.info("Finding JSON in response data: $json_body");
def json_names=json_body.names;
def number_of_names=json_names.size();

if(number_of_names <= 4) {
    AssertionResult.setFailure(true);
    AssertionResult.setError(true);
    AssertionResult.setFailureMessage("Failed to match number of names. Expected number is 4, we got "+number_of_names);
    SampleResult.setSuccessful(false);
}

if(! json_names.contains('John')) {
    AssertionResult.setFailure(true);
    AssertionResult.setError(true);
    AssertionResult.setFailureMessage("Failed to find John in names.");
    SampleResult.setSuccessful(false);
}

截图: JSR233 Groovy assertion

答案 2 :(得分:1)

  1. 添加JSR223 Assertion作为返回JSON以上的请求的子项
  2. 将以下代码放入&#34;脚本&#34;面积:

    def names = new groovy.json.JsonSlurper().parse(prev.getResponseData()).names
    
    if (names.size() < 3 || !names.contains('John') || !names.contains('Maria')) {
        AssertionResult.setFailure(true)
    }
    
  3. 如果数组大小小于3或者不包含提到的名称,则断言将使采样器失败。

    更多信息:Scripting JMeter Assertions in Groovy - A Tutorial