You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate中通过JS函数返回值验证响应状态码?

解决Karate中用JS函数返回值验证响应状态码的问题

你的问题出在Karate的status步骤语法上,直接写Then status getResponse会被当成字符串匹配,找不到对应的步骤定义。要引用变量验证状态码,得用表达式形式,同时还要注意你代码里的变量名冲突问题——你把函数名和后续存储响应体的变量都命名为getResponseMessage,会覆盖函数导致后续调用出错,得先改这个。

修正步骤:

  1. 重命名函数避免冲突:把原来的getResponseMessage函数改成其他名字,比如buildExpectedResponse。
  2. 用表达式验证状态码:有两种写法可选:
    • 写法一:用Then status == <变量名>
    • 写法二:匹配Karate内置的responseStatus变量,它会自动存储实际响应的状态码

修正后的完整场景代码:

Scenario: Validate API that triggered while updating close out time
    And path '/closeout-settings/closeout-edit'
    * header Cookie = cookieSession
    When method PUT
    * def buildExpectedResponse =
      """
      function(mid, value){
        var response = [];
        if(value==null)
        {
          response[0]=200;
          response[1] = {
            "mid": mid,
            "lastUpdatedTimestamp": Date.now()
          }
          return response;
        }
        else{
          response[0] = 400;
          response[1] = {"message":null,"responseCode":"CLOSEOUT_SETTINGS_NOT_EDITABLE","internal":null}
          return response;
        }
      }
      """
    * def expectedStatus = buildExpectedResponse(data.regressionMid, data.timestamp)[0]
    * def expectedResponseBody = buildExpectedResponse(data.regressionMid, data.timestamp)[1]
    And print expectedStatus
    And print expectedResponseBody
    # 写法一:用status表达式验证
    Then status == expectedStatus
    # 写法二:匹配内置的responseStatus变量
    # * match responseStatus == expectedStatus
    And match response == expectedResponseBody

这样修改后,就能正确用JS函数返回的状态码变量验证API响应状态了。

内容的提问来源于stack exchange,提问作者Pulkit Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:00:00