当测试不是 Java 项目的一部分,但包含一些用 Java 编写的测试逻辑时,运行空手道的最佳方法是什么?

问题描述 投票:0回答:1

我的空手道测试不是 java 项目的一部分。我针对外部部署的 java 微服务(源自我称为

serviceName
的 jvm 属性)运行它们。我用这样的命令来做到这一点:

java -Dkarate.env=qa -DserviceName=aca-retention -cp './karate.jar:.' com.intuit.karate.Main --tags @tier1 --threads 3 .

.feature 文件位于当前工作目录中及其下方。 类路径包括当前工作目录,因为那是我编译自定义 java 类的地方,我用它来屏蔽日志中的内容。这效果很好。

现在,我需要在java代码中实现一些测试逻辑,所以我有另一个java类要编译,它依赖于aws sdk。 但是,当我尝试通过 karate 调用 java 的能力来调用它时,我不知道如何让我的类工作。

我尝试制作一个独立的 spring-boot 项目,其中包括我的一个自定义 java 类和 aws sdk 依赖项。但是,当我尝试从空手道功能中调用它时,我得到 像这样的错误:

12:54:59.939 tier2/aca-retention/fixed-retention.feature:39 * def S3ObjectRetention = Java.type('com.nm.aca.test.S3ObjectRetention') js failed: >>>> 01: Java.type('com.nm.aca.test.S3ObjectRetention') <<<< org.graalvm.polyglot.PolyglotException: TypeError: Access to host class com.nm.aca.test.S3ObjectRetention is not allowed or does not exist. - <js>.:program(Unnamed:1) tier2/aca-retention/fixed-retention.feature:39
第 39 行看起来像这样:

* def S3ObjectRetention = Java.type('com.nm.aca.test.S3ObjectRetention')
我还尝试自行编译我的自定义java类,并通过类路径包含aws sdk jar,但是当我运行空手道时,它失败并出现如下错误:

* def retainUntil = S3ObjectRetention.get(s3BucketName, s3ObjectKey) js failed: >>>> 01: S3ObjectRetention.get(s3BucketName, s3ObjectKey) <<<< org.graalvm.polyglot.PolyglotException: software/amazon/awssdk/services/s3/S3Client - S3ObjectRetention.get(S3ObjectRetention.java:9) - <js>.:program(Unnamed:1) tier2/aca-retention/fixed-retention.feature:40
其中功能文件的第 39 行和第 40 行是这样的:

* def S3ObjectRetention = Java.type('S3ObjectRetention') * def retainUntil = S3ObjectRetention.get(s3BucketName, s3ObjectKey)
java 文件的第 9 行是尝试使用 aws sdk 类的 java 的第一行:

S3Client s3Client = S3Client.builder() .region(Region.US_EAST_1) // Specify your desired AWS region .build();
有人知道我错过了什么或做错了什么吗?

我应该尝试使用 maven 来运行我的空手道测试而不是 java 命令吗?

谢谢!

java dependencies karate
1个回答
0
投票
听起来像是类路径问题,请参阅:

https://github.com/karatelabs/karate/tree/develop/karate-netty#custom-classpath

这不是 Karate 的典型用途,因此我建议您尝试其他选项,例如 Maven,或者与熟悉 Java 的人合作。如果没有办法复制,很难诊断这一点。

© www.soinside.com 2019 - 2024. All rights reserved.