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

WireMock-包含JSON属性的请求存根

司空瑾瑜
2023-03-14

我正在尝试模拟相同的请求URL(多次),根据JSON Body内容有不同的响应。

我的请求JSON是动态构建的,所以我不能在Mock上静态使用< code>equalToJson函数。

我有相同的JSON,如下所示:

{
    // Changes according to the request
    "task": "TEXT_ENTITY_RECOGNITION",
    "category": "TEXT",
    "data": content
}

< code>wireMockServer存根的最佳方法是什么?

我正在尝试这样的东西

wireMockServer.stubFor(post(urlEqualTo("/request"))
                        .withRequestBody(containing("TEXT_ENTITY_RECOGNITION"))
                        .withHeader("Content-Type", equalTo("application/json"))
                        .willReturn(aResponse()
                                .withStatus(201)
                                .withHeader("Content-Type", "application/json")
.withBody(mockedJson)));

我在留档中没有找到这样的样品。谢谢!

共有2个答案

梁新觉
2023-03-14

Wiremock具有包含功能,调用方式是WireMock.containing

wireMockServer.stubFor(post(urlEqualTo("/request"))
                    .withRequestBody(WireMock.containing("TEXT_ENTITY_RECOGNITION"))
                    .withHeader("Content-Type", equalTo("application/json"))
                    .willReturn(aResponse()
                            .withStatus(201)
                            .withHeader("Content-Type", "application/json")
                            .withBody(mockedJson)));
白光耀
2023-03-14

WireMock提供了几种内容模式EqualToPattern和ContainsPattern是其中的几种。尝试类似这样的内容:

StringValuePattern urlPattern = new EqualToJsonPattern("/request", true, true);
        MappingBuilder mappingBuilder = WireMock.post(new UrlPattern(urlPattern, false));
        StringValuePattern requestBodyPattern = new ContainsPattern("TEXT_ENTITY_RECOGNITION");
        mappingBuilder.withRequestBody(requestBodyPattern).withHeader("Content-Type", new EqualToJsonPattern("application/json", true, true));
        ResponseDefinitionBuilder response = WireMock.aResponse().withBody("Successful Custom Body Response").withStatus(201).withHeader("Content-Type", "application/json");
        mappingBuilder.willReturn(response);
        wireMockServer.stubFor(mappingBuilder);

这对我很有效。

 类似资料:
  • 我是 wiremock 的新手,在我的Spring启动集成测试中使用 wiremock 来模拟其中一个外部 http 调用。 我的json请求体包含两个动态属性,所有其他字段都可以设置,而在请求中只有两个字段值无法设置,因为它们是动态值。 由于这些本质上是动态的,我的意思是属性的值是随机自动生成的值。有没有办法忽略这些属性并保持所有属性无论如何都匹配。 我知道忽略可用于额外的字段和数组顺序 tru

  • 我的http请求发送到此: 我的超文本传输协议请求与正文: { 我想通过WireMock映射这个请求。 这里是WireMock的映射文件。 我这样开始wireMock: 但当请求启动时,WireMock不会映射此请求。什么都没发生。为什么?

  • 我正在使用Spring云合同创建集成测试。从配置到将存根jar添加到项目,一切都正常工作。因此,我发现尽管所有参数和标头都相同,但请求不匹配。 这是API测试 这是API调用的合约 即使我从合同请求中删除用户名,仍然收到相同的错误。 我需要为X-B3-ParentSpanId等创建标题来使其匹配吗?

  • 我正在尝试使用独立的wiremck创建API模拟。响应正文取决于请求正文中的属性。 使用JSON,我能够做到。这是示例映射: 然而,我的主要需求是处理google protobuf,我正试图使用文本格式来代替它,模仿者将使用它来模仿API的响应。因此,请求文件是文本格式的,没有任何JSON验证,比如双引号,或者每行末尾的逗号等等。 我发现,使用JSON路径,wiremock由于格式不正确而无法匹配

  • 问题内容: 给定这样的结构: 是否可以将其映射到: 这样,您最终获得的实例的属性分别设置为和? 问题答案: 我坚信将您的POJO与外部化分开。将您的JSON读取到Map中,然后像这样构建您的Container / ScoreKeeper对象(对于任何错别字都为apols):