当前位置: 首页 > 知识库问答 >
问题:

wiremock post请求json体属性值是动态生成的值如何存根

皇甫展
2023-03-14

我是 wiremock 的新手,在我的Spring启动集成测试中使用 wiremock 来模拟其中一个外部 http 调用。

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

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

我知道忽略可用于额外的字段和数组顺序

withRequestBody(equalToJson(requestJson, true, true))

true忽略Array令

真正的忽略外场

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

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

{
   "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)
            )
    );
{
     "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的新手。

共有1个答案

曹育
2023-03-14

假设您使用的是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匹配并没有那么强大,我绝对建议升级。

 类似资料:
  • 问题内容: 在maven中,使用以下语法在pom中设置属性非常容易: 现在,我需要构建一个取决于pom版本的属性。为了创建属性,我想执行以下操作(java伪代码): 它应该是动态的,因为它在我们的存储库中用作标记名,并且必须始终与工件的版本同步。 任何想法如何创建该“动态”属性? 问题答案: Mojo的Build-Helper Maven插件可以在这里为您提供帮助。 有许多目标可用于帮助转换属性。

  • 问题内容: 我有一个Jmeter测试计划,希望我的HttpSampler发送一个发布请求。 请求的正文应包含Json,如下所示: 我已经设置了一个随机变量生成器,该变量生成器在每次调用时都返回格式正确的productId。我想做的是通过直接在请求主体中填充从生成器获取的随机pid的productId来生成有效负载。像这样(假设***是脚本转义符): 可能吗?如果是,怎么办?如果没有,您将如何处理该

  • 本文向大家介绍js中动态创建json,动态为json添加属性、属性值的实例,包括了js中动态创建json,动态为json添加属性、属性值的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 在js中,一个[]认为是数组;{}认为是Json对象; var json = {}; 定义一个Json对象; 为Json对象赋值: json[aa] = "xx"; eval 解析json报错 提示缺少“

  • 预期结果:用循环去写,现在是写死的,当长度是2的时候是 obj= _tableArray[nodeList[0]].children[nodeList[1]]

  • 我正在尝试模拟相同的请求URL(多次),根据JSON Body内容有不同的响应。 我的请求JSON是动态构建的,所以我不能在Mock上静态使用< code>equalToJson函数。 我有相同的JSON,如下所示: < code>wireMockServer存根的最佳方法是什么? 我正在尝试这样的东西 我在留档中没有找到这样的样品。谢谢!

  • 生成值属性是在添加或更新实体时(由 EF 或者 数据库)为其生成属性值的属性。详见 生成值 。 在某些环境下你可能想要显式设置生成值属性的值,而不是使用生成的值。 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。 模型 本文使用的模型只包含一个 Employee 实体。‘ public class Employee { public int EmployeeId { get;