1

我想使用协议测试来验证提供者是否可以在响应中提供图像。现在实际的响应看起来像这个 包含图片的服务器响应主体

我的 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 格式,也不是字符串。它应该是一些二进制文件。在这种情况下,我怎样才能编写匹配规则来验证它是一个二进制文件?

4

2 回答 2

2

这样做的方法是忽略正文,除非你真的想每次都匹配精确的二进制文件,我认为这会适得其反。

当一个二进制文件被发送时,它确实会发送适当的标题,就像你已经在与“Content-Type”的合同中一样。您始终可以添加正文必须存在的匹配规则,但您只是不关心内容,但我不肯定是否需要这样做,因为您只需查看“Content-Length”标题并确保它大于 0。

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

于 2016-12-15T00:50:11.853 回答
0

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

于 2019-03-31T20:41:50.870 回答