如何在karate-config.js中校验API状态码并实现条件调用?
问题根因
if分支不生效的核心原因是:karate.callSingle()返回的结果对象中默认不存在status属性,你读取的result.status实际是undefined,和200对比永远为false,所以无法进入分支。
Karate调用子feature返回的结果对象里,请求的响应状态码默认保存在responseStatus字段中,如果你要使用status字段,需要在被调用的子feature里主动定义导出。
解决方案
任选以下一种方式修改即可:
方案1:直接使用默认的响应状态码字段
把if判断的条件修改为读取responseStatus:
var result = karate.callSingle('classpath:util/users.feature@test1',config); config.userId = result.response.value[0].id; karate.log("User Id is -------------" + config.userId) // 替换为读取默认的responseStatus字段 if( result.responseStatus == 200 ) { var result1 = karate.callSingle('classpath:util/users.feature@test2',config); config.unitId = result1.response.value[0].id; karate.log("Unit Id is -------------" + config.unitId) }
方案2:在子feature中主动导出status字段
打开classpath:util/users.feature文件,在标注为@test1的场景末尾添加一行代码,主动把响应状态码赋值给status字段导出:
# @test1场景的原有逻辑不变,末尾新增下面这行 * def status = responseStatus
修改后你原来的if判断代码不需要改动即可正常生效。
验证方法
如果修改后还是有问题,可以在if判断前加一行日志打印完整的返回结果,确认字段是否符合预期:
karate.log('第一个接口返回的完整结果:', result)
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

