我有一个REST请求,其响应类似于: {“姓名”:[“彼得”,“约翰”,“莉莉”,“玛丽亚”]} 我需要一个断言来验证元素的数量是否至少为3(在上面的情况下是真的,因为总共有4个元素)并且元素 - “John”和“Maria”存在(我不关心其他值)。 我怎么能做到这一点?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用JSON path assertion。为了断言约翰是“在场”,就像这样设置
断言准确计数使用它像这样
但是你必须使用确切的名字数。所以更好的选择可能是使用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);
}
截图:
您也可以在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);
}
答案 2 :(得分:1)
将以下代码放入&#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或者不包含提到的名称,则断言将使采样器失败。