Автоматизация тестирования микросервисов Проверка необязательных полей

В настоящее время я работаю над автоматизацией функционального тестирования микросервисов для системы планирования встреч для розничных заказов. У нас есть служба A, которая вызывает службу B, используя адаптер с информацией о клиенте, номером заказа, идентификатором агента (необязательно). Служба B возвращает ответ с доступной датой и временным интервалом. Однако есть 2 сценария планирования

1) Сервис Б может возвращать слоты конкретного агента, если id агента передается ему от сервиса А 2) Сервис Б может возвращать слоты всех агентов, если id агента не передается.

Теперь я хочу проверить следующий сценарий: когда я передаю идентификатор агента в тело службы A, адаптер должен передать его при вызове службы B.

Есть ли способ проверить, передал ли адаптер правильный запрос службе B. Я посмотрел на Pact для проверки контракта, но, поскольку в обоих случаях ответ одинаков, я не мог понять, как мы можем этого добиться.


person Neel    schedule 24.02.2020    source источник


Ответы (1)


Я не совсем уверен, что вы подразумеваете под «адаптером», но я предполагаю, что это клиентский класс в кодовой базе службы A, который отвечает за выполнение HTTP-запросов к службе B. Если это так, я полагаю, что ваш вопрос «могу ли я проверить, что адаптер передает параметр идентификатора агента службе 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

person Beth Skurrie    schedule 25.02.2020
comment
Это определенно относится к сценарию, когда служба A выполняет HTTP-вызов к службе B, а необязательные поля не являются частью конфигурации Pact. Позвольте мне подробно рассказать о сценарии, который я хочу рассмотреть, на примере. Предположим, что служба A принимает 3 параметра (id, name, phone) в теле POST и вызывает службу B после проверки ввода. Из 3-х параметров телефон является необязательным. Таким образом, если номер телефона передается службе A, то служба A должна передать номер телефона службе B. Если нет, то это нарушение контракта. Может ли Пакт помочь справиться с этим сценарием? - person Neel; 25.02.2020