我们可以使用Jmeter使用javascript之类的代码来声明API响应

时间:2018-01-25 07:16:05

标签: jmeter jmeter-plugins

我正在尝试探索Jmeter进行API测试。

我可以使用Jmeter的响应断言添加Assert。

但我喜欢Jmeter中的一个平台,我们可以编写代码来断言在API上测试API测试的更复杂场景。

类似于我们可以说我们在使用Newman节点模块的postman测试中使用SOAP-UI或javascript中的groovy脚本。

Jmeter有可能吗?

是否有任何插件可用于在Jmeter中实现相同的功能。

我试图找出任何关于相同但没有成功的教程或博客。

如果有人尝试过那么请分享你的经验,方式,博客或教程,这些都可以让我在Jmeter中实现同样的帮助。

任何解决方法都会有所帮助,并提前感谢!!!

3 个答案:

答案 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)

选项包括:

  1. JSON Path Assertion您可以使用JSONPath个查询来测试回复
  2. 如果您需要更高级的逻辑,可以使用JSR223 Assertion和Groovy语言。 Groovy有built-in JSON support,因此您可以应用任何自定义逻辑。更多信息:Scripting JMeter Assertions in Groovy - A Tutorial

答案 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);    
}

来源:

this other answer