非Java项目调用含AWS SDK的Java类运行Karate测试遇阻求助
Karate测试调用含AWS SDK的自定义Java类问题
我的Karate测试不属于Java项目,此前通过以下命令针对外部部署的Java微服务(基于JVM参数serviceName指定)运行,一切正常:
java -Dkarate.env=qa -DserviceName=aca-retention -cp './karate.jar:.' com.intuit.karate.Main --tags @tier1 --threads 3 .
.feature文件位于当前工作目录及其子目录,类路径包含当前目录以加载用于日志脱敏的自定义Java类。
现在需要实现包含AWS SDK依赖的Java测试逻辑,但调用自定义类时遇到以下问题:
问题1:打包为独立Spring Boot项目后无法加载自定义类
在.feature文件中执行* def S3ObjectRetention = Java.type('com.nm.aca.test.S3ObjectRetention')时,报错如下:
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
问题2:单独编译类并添加AWS SDK到类路径后,调用方法时找不到依赖类
单独编译自定义类并在类路径中加入AWS SDK Jar包后,执行* def retainUntil = S3ObjectRetention.get(s3BucketName, s3ObjectKey)时,报错如下:
* 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
其中Java类第9行代码为:
S3Client s3Client = S3Client.builder() .region(Region.US_EAST_1) // Specify your desired AWS region .build();
请问我哪里操作有误?是否应该改用Maven运行Karate测试?
内容的提问来源于stack exchange,提问作者Jon Detert
相关产品推荐
相关产品推荐

