【发布时间】:2019-12-02 20:40:25
【问题描述】:
假设我们为不断发展的服务器编写了以下场景的脚本
Actual server v1 response
response = { id: "1", name: "karate" }
Mocking client v1 schema
schema = { id: "#string", name: "#string }
* match response == schema
Actual server v2 response
response = { id: "2", name: "karate", value: "is" }
Mocking client v2 schema
schema = { id: "#string", name: "#string, value: "#string" }
* match response == schema
Actual server v3 response
response = { id: "3", name: "karate", value: "is", description: "easy" }
Mocking client v3 schema
schema = { id: "#string", name: "#string", value: "#string", description: "#string" }
* match response == schema
类似地,为了对我们不断发展的服务器进行向后兼容性测试,我们按照以下方式编写场景脚本
Actual server v3 response
response = { id: "3", name: "karate", value: "is", description: "easy" }
Mocking client v1 schema
schema = { id: "#string", name: "#string }
* match response contains schema
Actual server v2 response
response = { id: "2", name: "karate", value: "is" }
Mocking client v1 schema
schema = { id: "#string", name: "#string }
* match response contains schema
Actual server v1 response
response = { id: "1", name: "karate" }
Mocking client v1 schema
schema = { id: "#string", name: "#string }
* match response contains schema
提议是能够在匹配语句中使用某种标志,动态决定我们在测试期间进行的匹配类型。 假设标志的名称是 SOMEFLAG,我们提供了我们想要在测试期间进行的匹配类型(在 karate-config.js 中设置以实现全局效果)
var SOMEFLAG = "contains";
OR
var SOMEFLAG = "==";
现在在场景中我们执行以下操作
# Depending on what is set in karate-config.js, it will use either contains or == for verification.
* match response SOMEFLAG schema
在空手道中可以做到这一点吗?
还要注意,这个想法的成功实际上取决于https://github.com/intuit/karate/issues/826,因为使用包含匹配的能力匹配嵌套对象。
【问题讨论】: