我们可以使用 Jmeter 使用 javascript 之类的代码断言 API 响应吗

Can we assert API response using code like javascript using Jmeter

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

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

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

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

在Jmeter中可以吗?

在Jmeter中是否有任何插件可以实现同样的功能。

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

如果有人尝试过,请分享您的经验、方法、博客或教程,它们可以引导我在 Jmeter 中实现同样的目标,这真的很有帮助。

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

当然你可以执行Javascript(在服务器端)断言API响应

您只需添加JSR223 Assertion as a Assertion to your request and choose Language as javascript and write your assertion code by checking prev which is a SampleResult

这里是一个演示,它获得搜索字符串 success 的响应并使用 javascript:

记录字符串中的第一个位置
var response = prev.getResponseDataAsString();
var pos = response.search("success");
log.info(pos);

继续 user7294900 的回答,您可以在 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);    
}

来源:

https://www.blazemeter.com/blog/scripting-jmeter-assertions-in-groovy-a-tutorial

选项在:

  1. JSON Path Assertion where you can use JSONPath 查询以测试响应
  2. 如果您需要更高级的逻辑,可以选择 JSR223 Assertion and Groovy language. Groovy has built-in JSON support so you will be able to apply any custom logic. More information: Scripting JMeter Assertions in Groovy - A Tutorial