wiremock post request json body property value is dynamic generated value how to stub

问题描述 投票:0回答:2

我是 wiremock 的新手,我在我的 spring boot 集成测试中使用 wiremock 来模拟外部 http 调用之一。

我的 json 请求正文包含两个动态属性,所有其他字段都可以设置并存根在请求中只有两个字段值无法设置,因为它们是动态值。

由于这些本质上是动态的,我的意思是属性的值是随机自动生成的值。有没有办法忽略这些属性并保留所有属性无论如何都匹配。

我知道 ignore 可用于额外字段和数组顺序

withRequestBody(equalToJson(requestJson, true, true))

true ignoreArrayOrder

true 忽略额外字段

我想知道类似于上面的忽略特定属性的功能(用户可以提及属性名称以便它应该忽略的属性)是否可用?

我有一个以下 json 请求正文,我需要在有线模拟帖子中存根,所以我正在使用

requestJson

{
   "property_one" : "Anand Sweets",
   "property_two" : "Guru Sweets",
   "property_three" : "Kranthi Sweets",
   "property_four" : auto-generated-number,  // dynamic number from code
   "property_five" : null,
   "propertysix" : " "GST128093",
   "property_seven" : auto-generated-number, // dynamic number from code
   "property_eight" : 13890139,
   "property_nine" : 1290.90,
   "property_ten" : "X239GDIJD9090"

}

存根

stubFor(post(urlEqualTo(testUrl))
            .withHeader(CUSTKEY, equalTo(CUST_VALUE))
            .withHeader(TOKENKEY, equalTo(TOKEN_VALUE))
            .withHeader(MATCHKEY, equalTo(MATCH_VALUE))
            .withRequestBody(equalToJson(requestJson, true, true))
            .willReturn(aResponse()
                    .withStatus(200)
                    .withHeader("Content-Type", "application/json")
                    .withBody(responseJson)
            )
    );

responseJson

{
     "Success": true,
     "message": "request processed successfully",
     "success_code": 9000,
     "external": "AKALDJKAD138948934" 
}

在请求 json 中,我有大约 60 到 70 属性,除了 property_four 和 property_seven 其余所有字段匹配都正常进行。

我想知道如何在 wiremock 中使用 equaltoJson(requestJson) 忽略这两个字段,因为这些字段值本质上是动态的,我想跳过这些属性进行匹配。

任何人都知道如何跳过或忽略这些属性或解决此问题的任何其他好方法。

我想过使用 withRequestBody(matchingJsonPath(PATH)) 但是有 巨大而复杂的请求,

我觉得,那不是正确的解决方案。

我的请求主体很复杂,我的意思是很多字段,例如,我只提到了十个具有示例属性和值的属性。

提前致谢,正如我之前所说,我是 wiremock 的新手。

spring-boot-test wiremock
2个回答
2
投票

假设您使用的是 WireMock 2.26.3 版,您可以对请求中的任何 JSON 值使用占位符。有关更多信息,请参阅请求匹配文档(可能最好搜索“占位符”)。

{
    "property_one" : "Anand Sweets",
    "property_two" : "Guru Sweets",
    "property_three" : "Kranthi Sweets",
    "property_four" : "${json-unit.any-number}",  // dynamic number from code
    "property_five" : null,
    "propertysix" : " "GST128093",
    "property_seven" : "${json-unit.any-number}", // dynamic number from code
    "property_eight" : 13890139,
    "property_nine" : 1290.90,
    "property_ten" : "X239GDIJD9090"
}

对于 2.26.3 之前的 WireMock 版本,JSON 匹配不太可靠,我绝对建议升级。


-2
投票

您好,在使用占位符从存根中获取值后,有什么方法可以在响应中附加相同的值吗?

© www.soinside.com 2019 - 2024. All rights reserved.