咨询基于Maven构建Karate测试套件可执行Jar包的方法
打包Maven搭建的Karate测试套件为可执行Jar
要实现将分散在src/main/java、src/test/java的测试套件和资源打包成可直接运行的Jar,按以下步骤操作:
1. 配置Maven核心插件
修改pom.xml,添加Shade插件(负责打包所有依赖)、编译插件(确保测试类被编译)、资源插件(复制所有必要资源):
<build> <plugins> <!-- Shade插件:打包所有依赖为可执行Jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <mainClass>com.yourpackage.KarateTestRunner</mainClass> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.yourpackage.KarateTestRunner</mainClass> </transformer> <!-- 合并Karate所需的ServiceLoader配置 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> <!-- 包含所有依赖及测试类 --> <artifactSet> <includes> <include>*:*</include> </includes> </artifactSet> <!-- 排除签名文件避免冲突 --> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> <!-- 编译测试类并指定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <!-- 根据你的JDK版本调整 --> <target>11</target> <testSource>11</testSource> <testTarget>11</testTarget> </configuration> </plugin> <!-- 复制main和test目录下的资源到输出目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-all-resources</id> <phase>process-test-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <resources> <resource> <directory>src/test/java</directory> <includes> <include>**/*.feature</include> <include>**/*.json</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.json</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
2. 编写测试启动类
创建一个带main方法的类,用于触发Karate测试执行。建议放在src/main/java下(或确保测试类被Shade插件包含):
package com.yourpackage; import com.intuit.karate.Results; import com.intuit.karate.Runner; public class KarateTestRunner { public static void main(String[] args) { // 指定测试用例的classpath路径 Runner.Builder runnerBuilder = Runner.path("classpath:com/yourpackage/tests"); // 支持通过命令行参数传递标签(如@smoke、~@ignore) if (args.length > 0) { runnerBuilder.tags(args[0]); } // 并行执行测试,线程数可调整 Results results = runnerBuilder.parallel(5); // 用例失败时返回非0退出码,适配CI/CD场景 System.exit(results.getFailCount() == 0 ? 0 : 1); } }
3. 打包与运行
打包Jar:执行Maven命令完成打包:
mvn clean package打包后的Jar文件位于
target/目录下,命名格式为[项目名]-[版本号].jar。运行Jar:
- 默认运行所有用例:
java -jar target/your-project-1.0-SNAPSHOT.jar - 指定运行带
@smoke标签的用例:java -jar target/your-project-1.0-SNAPSHOT.jar @smoke
- 默认运行所有用例:
注意事项
- 确保
feature文件的路径与启动类中Runner.path()指定的classpath路径一致 - JDK版本需与Karate兼容(Karate 1.x支持JDK 8+,2.x支持JDK 11+)
- 敏感配置文件(如密钥、环境配置)建议通过外部文件或环境变量传入,避免打包进Jar
内容的提问来源于stack exchange,提问作者Rakesh Hazari
相关产品推荐
相关产品推荐

