Выполнение jar Karate с макетом с использованием внешней библиотеки Spring Framework

Доброе утро. Я работаю над проектом, который использует автономное каратэ. Я совершенно новичок в каратэ, чтобы извинить мое отсутствие знаний здесь.

Автономная банка karate выполняется с параметром командной строки для запуска mock.feature. mock.feature ссылается на класс utils, построенный на «org.springframework.amqp».

Проблема в том, что запуск karate.jar завершается с ошибкой выполнения командной строки из-за внешней библиотеки «org/springframework/amqp/кролик/соединение/ConnectionFactory».

api1_mock_test.feature

Feature: API1 Mock Test

Background:
* def RabbitUtils = Java.type('utils.RabbitUtils')
.
.

Наш RabbitUtils — это просто класс Java, который импортирует внешние библиотеки org.springframework.amqp для предоставления функций для взаимодействия с брокером Rabbit AMQP, например. подключать, получать, публиковать, очищать и т. д. При сборке и запуске в IntelliJ все работает нормально. Ссылка POM в проекте:

<dependency>
   <groupId>org.springframework.amqp</groupId>
   <artifactId>spring-rabbit</artifactId>
   <version>2.1.5.RELEASE</version>
</dependency>

Есть ли в автономной банке Karate способ ссылки на внешние библиотеки? Параметр пути к классам указывает на нашу рабочую область «.\целевые\тестовые классы» и содержит файл RabbitUtils.class.

Текущее выполнение из корня рабочей области выглядит так:

java -jar C:\intuit\karate-0.9.3.RC2.jar -cp .\target\test-classes -p 6868 -m .\src\test\java\mocks\api1_mock_test.feature
08:57:05.122 [main] INFO com.intuit.karate.Main - Karate version: 0.9.3.RC2
08:57:05.891 [main] ERROR com.intuit.karate - server-side background init failed - api1_mock_test.feature:4
Exception in thread "main" picocli.CommandLine$ExecutionException:
-unknown-:4 - org/springframework/amqp/rabbit/connection/ConnectionFactory

Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
3 551
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо, что спросили об этом, и я думаю, что нашел способ сделать это, который открывает много замечательных возможностей. Решение состоит в том, чтобы использовать основные принципы Java, а не использовать опцию -jar. Класс приложения командной строки Karate (или CLI) — это com.intuit.karate.Main. Я собираюсь предоставить демонстрацию использования сикулиX. Во-первых, файл функций test.feature:

Feature: sikuli test

Background:
* def Screen = Java.type('org.sikuli.script.Screen')

Scenario:
* def s = new Screen()
* def c = s.capture()
* c.getFile('.')

А с karate.jar и sikulixapi.jar в одной папке в командной строке это работает (для Windows используйте ; вместо : в качестве «разделителя пути»):

java -cp karate.jar:sikulixapi.jar com.intuit.karate.Main test.feature

Для тех, кто хочет настроить путь к классам для расширения Visual Studio Code «Karate Runner», обратитесь к этому: https://github.com/intuit/karate/wiki/Karate-Robot-Windows-Install-Guide#change-command-line-settings

См. также: https://stackoverflow.com/a/58398958/143475

Привет Питер. Большое спасибо за быстрый ответ и спасибо за отличный инструмент. Очень признателен. Можете посмотреть, как это работает, чтобы выдерживать макеты серверов функций (одинаково ли использование «-m» и «-p»?). Наш вариант использования — тестирование автономных сервисов Win, которые взаимодействуют с API и MQ, поэтому мы используем автономный сервер для размещения макетов, которые имитируют сообщения API и MQ. Использует классы, написанные на Java, на которые есть ссылки в файлах test.features и mock.features. Все ext-зависимости хранятся в локальном кеше .m2, поэтому потребуется способ их копирования, думаю, IntelliJ справится с этим. Будет ли это в конечном итоге демо под git hub? Ваше здоровье.

mactwixs 05.06.2019 14:02

@mactwixs спасибо :) -p обязательно для порта. Я думаю, что есть способы скопировать JAR-файлы из maven, например: stackoverflow.com/a/996915/143475 — также кто-то сказал мне этот трюк: mvn dependency:build-classpath -Dmdep.includeScope=test -Dmdep.outputFile=classpath.txt сбросить путь к классам в файл. это очень специфично, поэтому не уверен, что это может быть демонстрация, но я бы посоветовал вам написать в блог о своем опыте и т. д.

Peter Thomas 05.06.2019 14:51

@PeterThomas Поскольку мой вопрос был дублирован, я попытался использовать «java -cp karate.jar. com.intuit.karate.Main -e qa Login.feature», но все же я вижу ошибку >>> неудавшиеся функции: js не удалось: > >>> 01: Java.type('test') <<<< org.graalvm.polyglot.PolyglotException: TypeError: Доступ к тесту хост-класса не разрешен или не существует. - <js>.:program(Unnamed:1) Login.feature:10 <<<

Sandeep P 10.07.2021 15:57

@SandeepP следуйте этому процессу - или, если вы не можете - предположим, что то, что вы хотите, не поддерживается карате: github.com/intuit/karate/wiki/Как отправить сообщение о проблеме

Peter Thomas 10.07.2021 16:22

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