URL WireMocks中的Path Pattern Matching(模式匹配)
URL Path Pattern Matching in WireMocks (pattern matching)
我正在使用 Wiremock 进行 REST API 测试,我面临以下问题。
我创建了以下 2 json 个请求。
请求 1:
{
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop.*",
"headers": {
"Accept": {
"contains": "application/json"
},
"X-RequestId": {
"matches": ".*"
},
"X-SecurityToken": {
"matches": "valid_secure_token"
}
}
},
"response": {
"status": 200,
"jsonBody": {
"user": {
"ID": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
"info": [
{
"kid": "2f0ad36a-9f23-427c-9a15-16d240385b87",
"cid": 10962435,
"pid": "V",
"contactid": 11812026,
"created": "2017-04-26T00:08:25.926",
"lastModified": "2017-04-27T00:01:45.047",
}
]
}
},
"headers": {
"Content-Type": "application/json"
}
}
}
我对上述 wiremock 的获取请求看起来像这样
**/api/v1/user/2158634832/ishop?ID=9879cfde-e353-4722-a91e-f22d29d8195c**
请求 2:
{
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop/status.*",
"headers": {
"Accept": {
"contains": "application/json"
},
"X-RequestId": {
"matches": ".*"
},
"X-SecurityToken": {
"matches": "valid_secure_token"
}
}
},
"response": {
"status": 200,
"jsonBody": {
"userstatus": {
"id": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
"type": "ishop",
"status" : "active",
"lastModifiedTime": "2017-04-27T00:01:45.047",
"allowedChange": "true"
}
},
"headers": {
"Content-Type": "application/json"
}
}
}
我对上面的 Get 请求看起来像这样
/api/v1/user/2158634832/ishop/status?ID=9879cfde-e353-4722-a91e-f22d29d8195c
这里的问题是,有时由于请求 1 和请求 2 的相似 URL 模式,有时会发生这种情况
当我提交请求 1 的请求时,我收到了请求 2 的响应。
任何人都可以建议我一个解决方法,我该如何解决这个问题?我希望与 matches 和 urlPattern 有关,并且我可以以某种方式消除第一个请求中的状态调用我可以做到,但不确定如何做到。
有什么建议吗?
由于您的一个请求 URL 包含另一个,匹配较短请求的正则表达式也将匹配较长请求。我怀疑这就是为什么在您更喜欢较长的时匹配较短的原因。
我建议您的 URL 匹配更具体,例如
"urlPath": "/api/v1/user/2158634832/ishop"
在第一个存根和
"urlPath": "/api/v1/user/2158634832/ishop/status"
秒
尽管您没有指定 ID 查询参数,这些仍然会匹配。 WireMock 将没有匹配参数的额外 headers 或查询参数视为 "don't care, match anyway".
好吧,我通过以下方式修复了它
请求 1 已从
更改
"urlPattern": "/api/v1/user/2158634832/ishop.*",
到
"urlPath": "/api/v1/user/2158634832/ishop",
请求 2 已从
更改
"urlPattern": "/api/v1/user/2158634832/ishop/status.*",
到
"urlPath": "/api/v1/user/2158634832/ishop/status",
更好的解决方案是使用存根优先级:
http://wiremock.org/docs/stubbing/#stub-priority
这样你仍然可以使用 urlPatten
{
"priority" : 2,
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop.*",
"headers": {
...
和:
{
"priority" : 1,
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop/status.*",
"headers": {
...
我正在使用 Wiremock 进行 REST API 测试,我面临以下问题。 我创建了以下 2 json 个请求。
请求 1:
{
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop.*",
"headers": {
"Accept": {
"contains": "application/json"
},
"X-RequestId": {
"matches": ".*"
},
"X-SecurityToken": {
"matches": "valid_secure_token"
}
}
},
"response": {
"status": 200,
"jsonBody": {
"user": {
"ID": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
"info": [
{
"kid": "2f0ad36a-9f23-427c-9a15-16d240385b87",
"cid": 10962435,
"pid": "V",
"contactid": 11812026,
"created": "2017-04-26T00:08:25.926",
"lastModified": "2017-04-27T00:01:45.047",
}
]
}
},
"headers": {
"Content-Type": "application/json"
}
}
}
我对上述 wiremock 的获取请求看起来像这样
**/api/v1/user/2158634832/ishop?ID=9879cfde-e353-4722-a91e-f22d29d8195c**
请求 2:
{
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop/status.*",
"headers": {
"Accept": {
"contains": "application/json"
},
"X-RequestId": {
"matches": ".*"
},
"X-SecurityToken": {
"matches": "valid_secure_token"
}
}
},
"response": {
"status": 200,
"jsonBody": {
"userstatus": {
"id": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
"type": "ishop",
"status" : "active",
"lastModifiedTime": "2017-04-27T00:01:45.047",
"allowedChange": "true"
}
},
"headers": {
"Content-Type": "application/json"
}
}
}
我对上面的 Get 请求看起来像这样
/api/v1/user/2158634832/ishop/status?ID=9879cfde-e353-4722-a91e-f22d29d8195c
这里的问题是,有时由于请求 1 和请求 2 的相似 URL 模式,有时会发生这种情况
当我提交请求 1 的请求时,我收到了请求 2 的响应。
任何人都可以建议我一个解决方法,我该如何解决这个问题?我希望与 matches 和 urlPattern 有关,并且我可以以某种方式消除第一个请求中的状态调用我可以做到,但不确定如何做到。
有什么建议吗?
由于您的一个请求 URL 包含另一个,匹配较短请求的正则表达式也将匹配较长请求。我怀疑这就是为什么在您更喜欢较长的时匹配较短的原因。
我建议您的 URL 匹配更具体,例如
"urlPath": "/api/v1/user/2158634832/ishop"
在第一个存根和
"urlPath": "/api/v1/user/2158634832/ishop/status"
秒
尽管您没有指定 ID 查询参数,这些仍然会匹配。 WireMock 将没有匹配参数的额外 headers 或查询参数视为 "don't care, match anyway".
好吧,我通过以下方式修复了它
请求 1 已从
更改"urlPattern": "/api/v1/user/2158634832/ishop.*",
到
"urlPath": "/api/v1/user/2158634832/ishop",
请求 2 已从
更改"urlPattern": "/api/v1/user/2158634832/ishop/status.*",
到
"urlPath": "/api/v1/user/2158634832/ishop/status",
更好的解决方案是使用存根优先级:
http://wiremock.org/docs/stubbing/#stub-priority
这样你仍然可以使用 urlPatten
{
"priority" : 2,
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop.*",
"headers": {
...
和:
{
"priority" : 1,
"request": {
"method": "GET",
"urlPattern": "/api/v1/user/2158634832/ishop/status.*",
"headers": {
...