【问题标题】:Executing Karate jar with mock using external library Spring Framework使用外部库 Spring Framework 使用模拟执行空手道 jar
【发布时间】:2019-06-05 08:31:59
【问题描述】:

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

使用 '-m' 命令行参数执行独立空手道 jar 以启动 mock.feature。 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>

空手道独立 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 spring karate intuit


    【解决方案1】:

    感谢您提出这个问题,我想我已经找到了一种方法来做到这一点,这开辟了很多很好的可能性。解决方案是使用 Java 第一原则,而不是使用 -jar 选项。空手道命令行应用程序(或 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

    【讨论】:

    • 嗨,彼得。非常感谢您的快速响应和出色的工具。非常感激。可以看到如何支持功能服务器模拟(“-m”和“-p”的使用是否相同?)。我们的用例是测试与 API 和 MQ 对话的独立 Win 服务,因此我们使用独立服务器来托管模拟 API 和 MQ 通信的模拟。在 test.features 和 mock.features 中引用的用 Java 编写的 Utils 类。所有 ext 依赖项都保存在本地 .m2 缓存中,因此需要一种复制它们的方法,认为 IntelliJ 可以处理。这最终会成为 git hub 下的演示吗?干杯。
    • @mactwixs 谢谢 :) -p 对于端口是强制性的。我认为有一些方法可以从 maven 中复制 JAR,例如: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').:program(Unnamed:1) Login.feature:10
    • @SandeepP 遵循这个过程 - 或者如果你不能 - 请假设空手道不支持你想要的:github.com/intuit/karate/wiki/How-to-Submit-an-Issue
    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2020-04-17
    • 2010-10-04
    相关资源
    最近更新 更多