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

如何使用Karate框架在多环境执行UI测试并区分报告结果?

多环境UI测试执行与报告方案

要实现同时在本地和env recipe环境运行UI测试,并在报告中区分各环境结果,可按以下方式修改代码:

核心思路

  • 遍历目标环境列表,为每个环境独立执行测试
  • 每个环境的测试输出文件单独存放在子目录,避免互相覆盖
  • 最后收集所有环境的测试报告文件,统一生成包含多环境结果的报告

修改后的代码

import com.intuit.karate.Runner;
import com.intuit.karate.Results;
import net.masterthought.cucumber.Configuration;
import net.masterthought.cucumber.ReportBuilder;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class AllTestsRunner {

    // 定义要执行测试的环境列表
    private static final List<String> TEST_ENVIRONMENTS = Arrays.asList("local", "recipe");

    @Test
    void runAllUiTestsAcrossEnvironments() {
        List<String> tags = Arrays.asList("~@ignore");
        List<String> features = Arrays.asList("classpath:ui");
        String baseOutputPath = "target/surefire-reports";
        List<Results> allResults = new ArrayList<>();
        List<String> allJsonReportPaths = new ArrayList<>();

        // 遍历每个环境执行测试
        for (String env : TEST_ENVIRONMENTS) {
            String envOutputPath = baseOutputPath + "/" + env;
            // 设置当前环境变量
            System.setProperty("karate.env", env);
            
            Results results = Runner.path(features)
                    .tags(tags)
                    .outputCucumberJson(true)
                    .reportDir(envOutputPath)
                    .parallel(1);
            
            allResults.add(results);
            // 收集当前环境的json报告路径
            Collection<File> jsonFiles = FileUtils.listFiles(new File(envOutputPath), new String[]{"json"}, true);
            jsonFiles.forEach(file -> allJsonReportPaths.add(file.getAbsolutePath()));
        }

        // 生成合并后的多环境测试报告
        generateCombinedReport(baseOutputPath, allJsonReportPaths);

        // 断言所有环境的测试都无失败
        long totalFailures = allResults.stream().mapToLong(Results::getFailCount).sum();
        assertTrue(totalFailures == 0, "部分环境测试失败,详情见报告");
    }

    public static void generateCombinedReport(String baseOutputPath, List<String> allJsonReportPaths) {
        Configuration config = new Configuration(new File(baseOutputPath), "多环境UI测试报告");
        // 添加环境分类,让报告更清晰
        config.addClassifications("测试环境", String.join(", ", TEST_ENVIRONMENTS));
        ReportBuilder reportBuilder = new ReportBuilder(allJsonReportPaths, config);
        reportBuilder.generateReports();
    }
}

关键说明

  • 环境隔离:通过System.setProperty("karate.env", env)设置每个测试运行的环境,Karate会自动加载对应环境的配置文件(如karate-config.js中可根据karate.env切换配置)
  • 报告隔离:每个环境的测试输出存放在target/surefire-reports/{env}子目录,避免不同环境的报告文件互相覆盖
  • 合并报告:收集所有环境的JSON报告文件,统一生成一份包含所有环境结果的报告,报告中会区分不同环境的测试用例执行情况
  • 全局断言:统计所有环境的失败用例总数,只要有一个环境测试失败,整个测试任务就会标记为失败

内容的提问来源于stack exchange,提问作者Olivier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:45:12