Использование макетов в файле карате DSL с возможностью запуска станалона

У меня есть служба REST, написанная на языке, отличном от Java. У него мало зависимостей от других сервисов REST.

Например, служба, находящаяся в стадии разработки и тестирования, - это A, другие службы - соответственно, B и C.

Я хочу запустить системный тест для A, для некоторых тестов требуется, чтобы B или C были подключены к сети и выполняли запросы из A.

Я написал b-mock.featue и c-mock.feature, чтобы представить эти сервисы в макете.

Также я написал несколько файлов a-test-smth.feature для запуска теста против A

Можно ли добавить некоторую информацию в a-test-smth.feature, чтобы включить некоторые макеты для конкретного теста?

Теперь я должен запустить автономный каратэ.jar дважды, сначала - для насмешек. второе - для запуска испытаний. Такой подход работает, но я не могу этого сказать:

  • некоторые вызовы API для A не требуются B или C
  • не может эмулировать сервис B или, например, медленный или неправильный выбор ответа

Благодарю.

1 ответ

Решение

Вы используете Java? Если это так, то лучший подход - выполнить настройку вашего теста в коде Java. Вы можете запустить 2 макета для B и c, а затем запустить основной тест для вашего сервиса A. И в конце выполнить очистку, если это необходимо.

Вы можете сослаться на это в качестве примера: https://github.com/intuit/karate/tree/master/karate-netty

Строка 3 показывает, как вы можете запустить макет и запустить тест каратэ.

Если вы не используете Java и хотели бы использовать только автономный JAR, это действительно возможно с помощью Java-взаимодействия и довольно просто, я только что попробовал.

Сначала создайте этот фрагмент кода JavaScript, который достаточно умен, чтобы начать макет каратэ:

function() {
  var Mock = Java.type('com.intuit.karate.netty.FeatureServer');
  var file = new java.io.File('src/test/java/mock/web/cats-mock.feature');
  var server = Mock.start(file, 0, false, null);
  return server.port;
}

И вот как это может выглядеть в Background вашего основного теста каратэ. Вы можете увидеть, как вы можете сделать некоторую условную логику, если это необходимо, и у вас есть множество способов изменить ситуацию в зависимости от вашей среды.

Background:
    * def starter = read('start-mock.js')
    * def port = karate.env == 'mock' ? starter() : 8080
    * url 'http://localhost:' + port + '/cats'

Отвечает ли это на ваш вопрос? Дайте мне знать, и я добавлю этот трюк в документацию!

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