Использование макетов в файле карате 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'
Отвечает ли это на ваш вопрос? Дайте мне знать, и я добавлю этот трюк в документацию!