Доброе утро. Я работаю над проектом, который использует автономное каратэ. Я совершенно новичок в каратэ, чтобы извинить мое отсутствие знаний здесь.
Автономная банка 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
Спасибо!




Спасибо, что спросили об этом, и я думаю, что нашел способ сделать это, который открывает много замечательных возможностей. Решение состоит в том, чтобы использовать основные принципы 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
@mactwixs спасибо :) -p обязательно для порта. Я думаю, что есть способы скопировать JAR-файлы из maven, например: stackoverflow.com/a/996915/143475 — также кто-то сказал мне этот трюк: mvn dependency:build-classpath -Dmdep.includeScope=test -Dmdep.outputFile=classpath.txt сбросить путь к классам в файл. это очень специфично, поэтому не уверен, что это может быть демонстрация, но я бы посоветовал вам написать в блог о своем опыте и т. д.
@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 <<<
@SandeepP следуйте этому процессу - или, если вы не можете - предположим, что то, что вы хотите, не поддерживается карате: github.com/intuit/karate/wiki/Как отправить сообщение о проблеме
Привет Питер. Большое спасибо за быстрый ответ и спасибо за отличный инструмент. Очень признателен. Можете посмотреть, как это работает, чтобы выдерживать макеты серверов функций (одинаково ли использование «-m» и «-p»?). Наш вариант использования — тестирование автономных сервисов Win, которые взаимодействуют с API и MQ, поэтому мы используем автономный сервер для размещения макетов, которые имитируют сообщения API и MQ. Использует классы, написанные на Java, на которые есть ссылки в файлах test.features и mock.features. Все ext-зависимости хранятся в локальном кеше .m2, поэтому потребуется способ их копирования, думаю, IntelliJ справится с этим. Будет ли это в конечном итоге демо под git hub? Ваше здоровье.