我正在尝试探索Jmeter进行API测试。
我可以使用Jmeter的响应断言添加Assert。
但我喜欢Jmeter中的一个平台,我们可以编写代码来断言在API上测试API测试的更复杂场景。
类似于我们可以说我们在使用Newman节点模块的postman测试中使用SOAP-UI或javascript中的groovy脚本。
Jmeter有可能吗?
是否有任何插件可用于在Jmeter中实现相同的功能。
我试图找出任何关于相同但没有成功的教程或博客。
如果有人尝试过那么请分享你的经验,方式,博客或教程,这些都可以让我在Jmeter中实现同样的帮助。
任何解决方法都会有所帮助,并提前感谢!!!
答案 0 :(得分:3)
当然,你可以执行Javascript(在服务器端)来断言API响应
您只需要将JSR223 Assertion作为断言添加到您的请求中,然后选择语言为javascript
并通过选中prev
SampleResult来编写您的断言代码
这是一个获得响应搜索字符串success
并使用javascript记录字符串中第一个位置的演示:
var response = prev.getResponseDataAsString();
var pos = response.search("success");
log.info(pos);
答案 1 :(得分:1)
选项包括:
答案 2 :(得分:0)
继续用户7294900回答你可以在JSR223断言中编写类似下面的代码:
<强> JAVASCRIPT 强>
var responseBody = prev.getResponseDataAsString();
log.info(responseBody)
log.info(responseBody.code)
var jsonData = JSON.parse(responseBody);
log.info("my name from response = "+jsonData.name)
我发现Jmeter具有Assert的内置功能 AssertionResult
<强> 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"
}
log.info("***********Starting Assert************")
log.info("******************************************************")
log.info("my name ="+jsonResponse.name)
if(!"201".equals(prev.getResponseCode())){
failureMessage += "Expected <response code> [201] but we got instead [" + prev.getResponseCode() + "]\n\n" ;
}
if(!"morpheus".equals(jsonResponse.name)){
failureMessage += "Expected name is morpheus but we got instead [" + jsonResponse.name + "]\n\n" ;
log.info("asset fail")
}
if(!"morpheus2".equals(jsonResponse.name)){
failureMessage += "Expected name is morpheus2 but we got instead [" + jsonResponse.name + "]\n\n" ;
log.info("asset fail")
}
if(!"leader".equals(jsonResponse.job)){
failureMessage += "Expected job is leader but we got instead [" + jsonResponse.job + "]\n\n" ;
log.info("asset fail")
}
if(!"leader1".equals(jsonResponse.job)){
failureMessage += "Expected job is leader1 but we got instead [" + jsonResponse.job + "]\n\n" ;
log.info("asset fail")
}
// 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);
}
来源: