如何解决通过电子邮件发送JMeter断言结果时出现JSON解析错误
在我的JMeter测试计划中,我在下面添加了JSR223断言以格式化JSON响应。
import groovy.json.JsonSlurper;
def failureMessage = "";
def jsonResponse = null;
def headers = null;
def responseTime = null;
JsonSlurper JSON = new JsonSlurper();
prev.setResponseData(groovy.json.JsonOutput.prettyPrint(prev.getResponseDataAsstring()))
try {
jsonResponse = JSON.parseText(prev.getResponseDataAsstring());
log.info("Wards response: "+jsonResponse);
headers = SampleResult.getRequestHeaders();
responseTime = SampleResult.getTime();
} 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 (!"OK".equals(prev.getResponseMessage())) {
failureMessage += "Expected <response Message> [OK] but we got instead [" + prev.getResponseMessage() + "]\n\n";
}
if (!jsonResponse.keySet().containsAll(["wards"])) {
failureMessage += "The json config element has wrong structure. No wards key\n\n";
}
if (!jsonResponse.wards.getAt(0).keySet().containsAll(["id","name","shortName"])) {
failureMessage += "The wards element has wrong structure. Key(s) are missing or wrong \n\n";
}
if (!jsonResponse.wards.size==95) {
failureMessage += "Wards count is wrong..! :[" + jsonResponse.wards.size + "]\n\n";
}
if (!(headers.contains("ticketheader") && headers.contains("Content-Type") && headers.contains("Host") && headers.contains("User-Agent"))) {
failureMessage += "Headers are not correct..!";
}
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);
}
然后我在Beanshell脚本下面添加了代码,以便通过电子邮件正文获得断言测试结果。
import org.apache.jmeter.assertions.AssertionResult;
AssertionResult[] results = prev.getAssertionResults();
StringBuilder body = new StringBuilder();
for (AssertionResult result : results) {
body.append(result.getFailureMessage());
body.append(System.getProperty("line.separator"));
}
vars.put("body",body.toString());
*javax.script.ScriptException: groovy.json.JsonException: Lexing Failed on line: 1,column: 1,while reading 'j',no possible valid JSON value or punctuation Could be recognized.*
在我的测试计划中,我需要使用两个脚本来格式化JSON并发送电子邮件。我该如何解决这个问题?
解决方法
您的脚本失败,因为您没有获得有效的JSON,正确的JSON对象以{
或[
开头,而您得到的是j
,请尝试使用类似{{ 3}},它将突出显示您的回复中所有有问题的地方
JSONLint,所以我相信您可以将Beanshell代码放入Since JMeter 3.1 you should not be using Beanshell,它无需更改即可工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。