有没有一种方法可以在JMeter的一个Assertion中添加多个验证?

时间:2020-07-24 03:03:32

标签: json jmeter assertion web-api-testing

我想添加一个断言(例如Response Assertion,JSON Assertion..etc)以验证在响应中返回的多个相互关联的值(例如无效的状态代码,无效的状态消息),而无需添加两个断言,我们是否可以验证JMeter中的一个断言中有多个?

2 个答案:

答案 0 :(得分:0)

据我所知,JSON Assertion是不可能的,但是您可以肯定地使用Response Assertion通过以下方式添加多个断言:

Multiple assertion

您可以根据需要添加任意数量的断言,使捕获始终位于同一Field to Test上。示例:您不能在一个断言中测试响应头和响应消息

答案 1 :(得分:0)

如果您有多个验证不能由一个断言来处理,并且您不想有多个断言,那么唯一的选择是JSR223 Assertion,您可以在{中定义想要的通过/失败标准{3}}

更多信息:Groovy,其中的代码示例:

import groovy.json.JsonSlurper;

def failureMessage = "";
def jsonResponse = null;

JsonSlurper JSON = new JsonSlurper();

try {
    jsonResponse = JSON.parseText(prev.getResponseDataAsString());
} catch (Exception e) {
    failureMessage += "Invalid JSON.\n"
}

if (!"200".equals(prev.getResponseCode())) {
    failureMessage += "Expected <response code> [200] but we got instead [" + prev.getResponseCode() + "]\n\n";
}

if (!jsonResponse.keySet().containsAll(["api_version", "error", "result"])) {
    failureMessage += "The json config element has wrong structure.\n\n";
}

if (!jsonResponse.result.numberOfExpectedServers != 3) {
    failureMessage += "The element has wrong number of servers. Number of servers is:[" + jsonResponse.result.numberOfExpectedServers + "]\n\n";
}

if (failureMessage?.trim()) {
    AssertionResult.setFailureMessage(failureMessage);
    AssertionResult.setFailure(true);
}

// Print error messages if any
if (failureMessage?.trim()) {
    failureMessage += "URL: " + SampleResult.getURL() + "\n\n";
    failureMessage += "JSON RESPONSE: " + jsonResponse + "\n\n";
    failureMessage += "REQUEST HEADERS: " + SampleResult.getRequestHeaders() + "\n\n";

    AssertionResult.setFailureMessage(failureMessage);
    AssertionResult.setFailure(true);
}