如何使用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
相关产品推荐
相关产品推荐

