如何通过pact测试验证响应中包含的图像

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

我想使用pact test来验证提供者是否可以在响应中提供图像。现在实际的反应看起来像这个server response body which contains the picture

我的Pact Json文件看起来像这样

  "interactions": [
    {
      "providerState": "there's a user has a portrait tiger.png",
      "description": "Get the user's portrait",
      "request": {
        "method": "GET",
        "path": "/api/Employees/v1/Employee/106656048406528/Attachments",
        "headers": {
          "Content-Type": "application/json",
          "X-Employee-ID": "106656048406528",
          "X-Tenant-ID": "26663977872256",
          "X-User-ID": "1333"
        }
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "image/jpeg;charset=UTF-8"
        },
        "body": "iVBORw0KGgoAAAANSU",
        "matchingRules": {
            "$.body": {
            "match": "type"
          }
        }
      }
    }
  ],

协定测试总是失败,并说身体不匹配。我可以理解实际的响应不是base64格式而不是字符串。它应该是一些二进制文件。在这种情况下,如何编写匹配规则以使其成为二进制文件?

pact
2个回答
2
投票

这样做的方法是忽略身体,除非你真的想每次都匹配确切的二进制文件,这在我看来会适得其反。

发送二进制文件时,它会发送相应的标题,就像您在“Content-Type”合同中已有的一样。你总是可以添加一个匹配的规则,身体必须在那里,但你只是不关心内容,但我不是肯定的,如果这甚至需要,因为你可以看看'Content-Length'标题并确保它大于0。

需要记住的是,Pact并不是用来匹配所有东西。它旨在匹配系统的关键部分和消费者的某些期望,即。作为消费者,我想调用这个应该给我一个图像的服务,但是我不关心那个图像是什么,因为我只是在DOM中显示它。如果您在测试时需要在消费者端提供实际图像,则可以使用匹配器查询通过使用正则表达式来解析任何内容,然后使用实际图像输出作为生成器。如果我是你,我会使用一些小的东西,因为Pact并不意味着要喷出数兆字节的二进制文件。


0
投票

在我看来,只有标题检查就足够了。 (除非你想验证整个二进制内容,我认为这不是最好的)。

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