【问题标题】:Can we assert API response using code like javascript using Jmeter我们可以使用 Jmeter 之类的代码来断言 API 响应吗
【发布时间】:2018-01-25 07:16:04
【问题描述】:

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

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

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

就像我们可以说我们在使用 Newman 节点模块的 postman 测试中使用 SOAP-UI 或 javascript 中的 groovy 脚本一样。

在 Jmeter 中可以吗?

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

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

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

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

【问题讨论】:

    标签: jmeter jmeter-plugins


    【解决方案1】:

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

    您只需将JSR223 Assertion 作为断言添加到您的请求中,然后选择语言作为javascript 并通过检查prev(即SampleResult)来编写您的断言代码

    这里有一个演示,它获取响应搜索字符串 success 并使用 javascript 记录字符串中的第一个位置:

    var response = prev.getResponseDataAsString();
    var pos = response.search("success");
    log.info(pos);
    

    【讨论】:

    • 太好了,请您分享示例代码或博客,这让我知道如何实现相同的目标
    • 感谢它推动我完成当前任务。你能建议一种更好的方法来断言吗?表示在 Jmeter 中也可以反映在报告中
    • 是否有可能有一个实际断言某些东西的例子?或者可能只是指向 Javascript 中的参考的链接?非常感谢
    【解决方案2】:

    选项在:

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

    【讨论】:

    • 感谢分享……我一定会试试的……我现在不在办公室,周一试试
    【解决方案3】:

    继续 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

    时髦

    使用代码如下:

    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

    【讨论】:

    • AssertionResult 不是 groovy 的。它可以在包括javascript在内的所有语言中使用
    • 那很酷..我肯定会尝试一下 :) ... 请您告诉我如何设置和获取 envt。 jmeter 中的变量 .. 任何解决方法都会有所帮助
    • 查看答案,如果有帮助可以投票stackoverflow.com/questions/45696945/…
    • 您可能应该打开一个包含详细信息的新问题
    • 当然..给我2分钟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2017-01-31
    相关资源
    最近更新 更多