java - 使用外部库 Spring Framework 通过模拟执行 Karate jar

标签 java spring karate intuit-partner-platform

早上好。我正在开发一个使用 Karate Standalone 的项目。我对 Karate 完全陌生,请原谅我缺乏知识。

独立的 Karate jar 使用“-m”命令行参数执行以启动模拟功能。 mock.feature 引用了一个基于“org.springframework.amqp”构建的 utils 类。

问题是由于外部库“org/springframework/amqp/rabbit/connection/ConnectionFactory”,karate.jar 启动失败并出现命令行执行异常

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 独立 jar 是否有某种方式引用外部库?类路径参数设置为引用我们的工作区“.\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 第一原则,而不是使用 -jar 选项。 Karate 命令行应用程序(或 CLI)类恰好是 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 Code“Karate Runner”扩展的类路径的人,请参阅:https://github.com/intuit/karate/wiki/Karate-Robot-Windows-Install-Guide#change-command-line-settings

另请参阅:https://stackoverflow.com/a/58398958/143475

对于那些确实不想编译Java需要使用一些JVM库的人,可以通过纯JS实现,(但很难排除故障和调试):https://stackoverflow.com/a/65035825/143475

关于java - 使用外部库 Spring Framework 通过模拟执行 Karate jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56456840/

相关文章:

download - 如何从 Karate 中的 api 端点获取下载的 xlsx 文件?

java - 当我使用 Content Assist 时 Eclipse 挂起

Java - 检查端口是否正在使用而不连接到它

java - 如何在 Swagger-UI "Value"字段中仅显示必需的参数

java - Spring Boot + Flyway + AWS : Caused by: java. sql.SQLException:找不到合适的驱动程序

java - 将 CSS 和图像链接到 Spring MVC maven 项目

Karate - 如何将 Junit RunListener 添加到 KarateParallel Runner

Java 在同一位置找到一个文件,但找不到另一个文件

java - Hadoop 自定义输入格式

karate - 通过 Karate 框架禁用 Chrome 密码管理器