You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:22:34