Karate框架:调用Feature文件时参数意外混入JSON Payload
问题原因与解决办法
原因
Karate 使用 call/callonce 调用 Feature 时,会将被调用 Feature 上下文内的所有变量(包括传入的参数)都整合到返回结果中。你传入的 _id 参数会留在 dog.feature 的上下文里,虽然你只对 jsonObjectPayLaod 做了赋值操作,但这个参数变量并没有被清除,所以最终返回结果会把它作为顶层字段一并带出。
解决办法
方法一:在被调用的 Feature 中清除参数变量
在 dog.feature 的 Scenario 末尾添加 remove _id 语句,手动清理掉不需要的参数变量,这样返回结果就不会包含多余的 _id 字段:
Scenario: xyz * set jsonObjectPayLaod | path | value | | id | _id | | name | "xyz" | * remove _id
方法二:调用时直接提取目标对象
修改 cat.feature 中的调用语句,直接从返回结果里提取 jsonObjectPayLaod,而不是接收整个返回对象:
def request_body = callonce read('dog.feature') {_id : #(id)}.jsonObjectPayLaod
方法三:简化对象构建逻辑(可选)
可以用直接赋值的方式替代表格式 set,让代码更简洁,同时配合变量清理:
Scenario: xyz * def jsonObjectPayLaod = { id: _id, name: "xyz" } * remove _id
内容的提问来源于stack exchange,提问作者Ankit Saini
相关产品推荐
相关产品推荐

