如何在Karate中通过JS函数返回值验证响应状态码?
解决Karate中用JS函数返回值验证响应状态码的问题
你的问题出在Karate的status步骤语法上,直接写Then status getResponse会被当成字符串匹配,找不到对应的步骤定义。要引用变量验证状态码,得用表达式形式,同时还要注意你代码里的变量名冲突问题——你把函数名和后续存储响应体的变量都命名为getResponseMessage,会覆盖函数导致后续调用出错,得先改这个。
修正步骤:
- 重命名函数避免冲突:把原来的
getResponseMessage函数改成其他名字,比如buildExpectedResponse。 - 用表达式验证状态码:有两种写法可选:
- 写法一:用
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
相关产品推荐
相关产品推荐

