我想添加一个断言(例如Response Assertion,JSON Assertion..etc)以验证在响应中返回的多个相互关联的值(例如无效的状态代码,无效的状态消息),而无需添加两个断言,我们是否可以验证JMeter中的一个断言中有多个?
答案 0 :(得分:0)
据我所知,JSON Assertion
是不可能的,但是您可以肯定地使用Response 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);
}