Автономное карате в качестве макета сервера с несколькими файлами функций

Я пытаюсь настроить набор тестов интеграции /API с Karate и рассматриваю возможность использования Karate Netty для имитации необходимых сервисов. Для тестовой настройки тестируемая система A (приложение Spring Boot) полностью запускается. Затем тесты Каратэ выполняются тестовым запуском Maven для этого экземпляра.

Сервис A зависит от множества других сервисов, над которыми нужно избавиться в тестах. Для этого я хотел настроить работающий автономный экземпляр Karate Netty в качестве HTTP-прокси (выполняется с помощью аргументов JVM службы A).

Моя идея заключалась в том, чтобы создать один тестовый файл функций:xyz-test.feature
И необходимые макеты для этого файла определены в соответствующем файле функций макета:xyz-mock.feature
(Сценарии тестирования довольно сложные, и ответы внешних сервисов могут отличаться)

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

  1. Какова стратегия сопоставления для нескольких файлов фиктивных функций? Так сказать, какой сценарий побеждает.

  2. Есть ли способ гарантировать, что для связанного тестового файла используется правильный макет файла?
    (Ясно, что я могу перенастроить работающий автономный экземпляр и посоветовать ему использовать xyz-mock.feature следующим образом.
    Но это остановит меня от использования параллельного выполнения для моих тестов API, верно?)

Я уже думал о повторном использовании Correlation-Idкоторый я могу отправить для каждого теста, а затем сопоставить с ним в файле макета (он также отправляется всем вызываемым службам). Но:

  1. Есть ли способ определить глобальный сопоставитель для файла макета?

1 ответ

Решение

Похоже, вам нужен только один фиктивный файл. Вы можете загрузить 2 на разных портах, если хотите, но нет возможности "объединить" их в один порт - если это то, что вы искали.

По моему опыту, вы сможете создать один макет, который позаботится обо всех ваших крайних случаях. Это потому, что подход Karate необычен: вы в значительной степени пишете сервер с отслеживанием состояния. Но, сохраняя переменные в памяти и некоторый умный путь JSON, вы можете имитировать CRUD с помощью очень небольшого количества строк кода: https://github.com/intuit/karate/tree/master/karate-netty

1) Вы можете использовать только по одному, по замыслу

2) Учитывая вышеуказанное ограничение, вот интересная идея: добавить что-то вроде дополнительного pathMatches('/__test/reset') сценарий, который очищает ваше состояние и устанавливает Background переменные к таким вещам, как * def cats = []. Теперь в каждой функции просто вызовите специальный URL-адрес "сброса" в начале. Хорошо то, что Karate ориентирован на многопоточность. Другая идея, как вы сказали, заключается в том, что вы можете поддерживать две или три разные переменные и использовать некоторую логику для "маршрутизации" на основе заголовка, опять же, очень простой IMO. Используйте карту карт, например:

* def data = { cats1: {}, cats2: {}, cats3: {} }

И вы можете получить заголовок, например, если он mode: cats1

* def mode = karate.get('requestHeaders.mode[0]')
* def cats = data[mode]

3) не уверен, отвечает ли это на ваш вопрос, но если последний Scenarioимеет "пустое" описание, это "уловка всех" и теоретически может делегировать другому серверу (или имитировать): https://github.com/intuit/karate/tree/develop/karate-netty

Ваш вопрос немного сбивает с толку, поэтому вам, возможно, придется отредактировать и перефразировать его, если я не понял.

Другие вопросы по тегам