使用外部库 Spring 框架通过 mock 执行空手道 jar

Executing Karate jar with mock using external library Spring Framework

早上好。我正在从事一个使用 Karate Standalone 的项目。我对空手道完全陌生,请原谅我在这里缺乏知识。

独立的 karate jar 是使用“-m”命令行参数执行的,以启动 mock.feature。 mock.feature 引用了一个基于“org.springframework.amqp”的实用程序 class。

问题是 karate.jar 启动失败,并由于外部库 'org/springframework/amqp/rabbit/connection/ConnectionFactory'

而出现命令行执行异常

api1_mock_test.feature

Feature: API1 Mock Test

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

我们的 RabbitUtils 只是一个 java class,它导入 org.springframework.amqp 外部库以提供与 Rabbit AMQP 代理交互的功能,例如连接、接收、发布、清除等。在 IntelliJ 中构建和 运行 时一切正常。项目中的POM引用为:

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

空手道独立 jar 是否有某种引用外部库的方法? classpath 参数设置为引用我们的工作区“.\target\test-classes”并包含 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 first-principles,而不是使用 -jar 选项。空手道 command-line-app(或 CLI)class 恰好是 com.intuit.karate.Main。我将在这里提供一个使用 SikuliX 的演示。一、特征文件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.jarsikulixapi.jar,这有效(对于 windows,使用 ; 而不是 : 作为“路径分隔符”):

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

对于那些希望为 Visual Studio 代码“空手道赛跑者”扩展自定义 class 路径的人,请参考:https://github.com/intuit/karate/wiki/Karate-Robot-Windows-Install-Guide#change-command-line-settings

另见: