在 WireMock 中请求正文匹配(不是 JSON/XML)
Request body matching in WireMock (not JSON/XML)
我正在尝试创建一个 API 带有独立 wiremock 的模拟。响应主体取决于请求主体中的属性。
有了JSON,我就能做到。这是示例映射:
{
"request":{
"method":"POST",
"bodyPatterns":[
{
"matchesJsonPath":"$.somekey.subkey[?(@.attribute == 'VALUE_123')]"
}
]
},
"response":{
"status":200,
"bodyFileName":"res.dat",
"headers":{
"Content-Type":"application/x-proto;charset=UTF-8"
}
}
}
但是我的主要要求是处理 google protobuf,我正在尝试使用文本格式代替它,嘲笑者将使用它来模拟 API 以进行响应。因此,请求文件是文本格式,并且没有任何 JSON 验证,例如双引号或每行末尾的逗号等
我发现使用 JSON 路径,wiremock 由于格式不正确而无法匹配请求正文。
例如,这样的请求:
{
animal {
type {
key1: "value"
key2: value2
}
}
}
而不是
{
"animal":{
"type":{
"key1":"value",
"key2":"value2"
}
}
}
假设 key1
= value1
应该匹配并且应该返回 response1.json
,或者当 key1
= someOtherValue
时,则 response2.json
应该退回。
是的,key 是 type 的一部分,type 是 animal 的一部分。我怎样才能实现这个请求正文匹配?
你可以这样做:
{
"request": {
"method": "POST",
"url": "/authorize/oauth2/token",
"bodyPatterns": [ {
"matches": ".username=(test)&."
}
]
},
"response": {
"status": 200,
. . .
我正在尝试创建一个 API 带有独立 wiremock 的模拟。响应主体取决于请求主体中的属性。
有了JSON,我就能做到。这是示例映射:
{
"request":{
"method":"POST",
"bodyPatterns":[
{
"matchesJsonPath":"$.somekey.subkey[?(@.attribute == 'VALUE_123')]"
}
]
},
"response":{
"status":200,
"bodyFileName":"res.dat",
"headers":{
"Content-Type":"application/x-proto;charset=UTF-8"
}
}
}
但是我的主要要求是处理 google protobuf,我正在尝试使用文本格式代替它,嘲笑者将使用它来模拟 API 以进行响应。因此,请求文件是文本格式,并且没有任何 JSON 验证,例如双引号或每行末尾的逗号等
我发现使用 JSON 路径,wiremock 由于格式不正确而无法匹配请求正文。 例如,这样的请求:
{
animal {
type {
key1: "value"
key2: value2
}
}
}
而不是
{
"animal":{
"type":{
"key1":"value",
"key2":"value2"
}
}
}
假设 key1
= value1
应该匹配并且应该返回 response1.json
,或者当 key1
= someOtherValue
时,则 response2.json
应该退回。
是的,key 是 type 的一部分,type 是 animal 的一部分。我怎样才能实现这个请求正文匹配?
你可以这样做:
{
"request": {
"method": "POST",
"url": "/authorize/oauth2/token",
"bodyPatterns": [ {
"matches": ".username=(test)&."
}
]
},
"response": {
"status": 200,
. . .