【问题标题】:Microservice test automation validation of optional fields可选字段的微服务测试自动化验证
【发布时间】:2020-02-24 17:02:36
【问题描述】:

我目前正在为零售订单的预约调度系统进行微服务的功能测试自动化。我们有服务 A,它使用带有客户详细信息、订单号、代理 ID(可选)的适配器调用服务 B。服务 B 返回可用日期和时间段的响应。但是有两种调度场景

1) 如果代理 id 从服务 A 传递给服务 B,则服务 B 可以返回特定代理的插槽 2)如果没有传递agent id,Service B可以返回所有agent的slots。

现在我想验证以下场景: 当我将代理 id 传递给服务 A 的主体时,适配器应该在调用服务 B 时传递它。

有没有一种方法可以测试适配器是否已将正确的请求传递给服务 B。我查看了 Pact 进行合同测试,但由于两种情况下的响应相同,我无法弄清楚我们如何实现这一点。

【问题讨论】:

    标签: automated-tests integration-testing microservices end-to-end pact


    【解决方案1】:

    我不确定您所说的“适配器”是什么意思,但我猜是服务 A 代码库中的客户端类负责向服务 B 发出 HTTP 请求。如果是这样,我相信您的问题是“我可以检查适配器是否在请求中将代理 ID 参数传递给服务 B”。答案是肯定的 - 这正是您在 Pact 消费者测试中编写请求期望时所做的。

    “withRequest”是测试的一部分,您可以在其中定义预期的请求是什么:

    const interaction = {
            state: "i have a list of cats",
            uponReceiving: "a request for cats with given catId",
            withRequest: {
              method: "GET",
              path: "/cats",
              query: {
                "catId[]": Matchers.eachLike("1"),
              },
              headers: {
                Accept: "application/json",
              },
            },
            willRespondWith: {
              status: 200,
              headers: {
                "Content-Type": "application/json",
              },
              body: EXPECTED_BODY,
            },
          }
    
    

    https://github.com/pact-foundation/pact-js/blob/058ab6f63e4273b545761e82cd3d9a1ae4f72bb6/examples/jest/tests/catAPI.spec.js#L17-L26

    【讨论】:

    • 这绝对解决了服务 A 对服务 B 进行 HTTP 调用并且可选字段不是 Pact 配置的一部分的场景。让我通过一个例子来详细说明我想要解决的场景。让我们假设服务 A 在 POST 正文中接受 3(id, name,phone) 参数,并在验证输入后调用服务 B。在 3 个参数中,电话是可选的。因此,如果将电话​​号码传递给服务 A,则服务 A 应将电话号码传递给服务 B。如果没有,那就是违约。 Pact 可以帮助解决这种情况吗?
    猜你喜欢
    • 1970-01-01
    • 2018-03-25
    • 2018-01-26
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2017-10-04
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多