如何将Karate框架默认HTML报告输出为日志/TXT/CSV格式?
Karate框架生成TXT/CSV/日志格式报告方案
完全可以替代默认的HTML汇总报告,生成TXT、CSV或日志格式的测试记录,以下是几种实用实现方式:
一、自定义代码生成结构化报告
通过Karate提供的测试结果API,直接捕获场景执行数据,写入指定格式文件:
1. 生成TXT格式汇总报告
import com.intuit.karate.Runner; import com.intuit.karate.core.ScenarioResult; import com.intuit.karate.core.SuiteResult; import java.io.FileWriter; import java.io.IOException; public class CustomTxtReporter { public static void main(String[] args) { SuiteResult suiteResult = Runner.path("classpath:features").parallel(5); try (FileWriter writer = new FileWriter("karate-test-results.txt")) { writer.write("=== Karate测试汇总报告 ===\n"); writer.write("总场景数: " + suiteResult.getTotalScenarios() + "\n"); writer.write("通过场景数: " + suiteResult.getPassedScenarios() + "\n"); writer.write("失败场景数: " + suiteResult.getFailedScenarios() + "\n"); writer.write("-------------------------\n\n"); for (ScenarioResult sr : suiteResult.getScenarioResults()) { writer.write("场景名称: " + sr.getScenario().getName() + "\n"); writer.write("执行状态: " + (sr.isPassed() ? "✅ 通过" : "❌ 失败") + "\n"); if (!sr.isPassed()) { writer.write("失败原因: " + sr.getError().getMessage() + "\n"); } writer.write("-------------------------\n"); } } catch (IOException e) { e.printStackTrace(); } } }
2. 生成CSV格式结构化报告
适合后续做数据统计分析:
import com.intuit.karate.Runner; import com.intuit.karate.core.ScenarioResult; import com.intuit.karate.core.SuiteResult; import java.io.FileWriter; import java.io.IOException; public class CustomCsvReporter { public static void main(String[] args) { SuiteResult suiteResult = Runner.path("classpath:features").parallel(5); try (FileWriter writer = new FileWriter("karate-test-results.csv")) { // 写入CSV表头 writer.write("场景名称,执行状态,失败原因\n"); for (ScenarioResult sr : suiteResult.getScenarioResults()) { String status = sr.isPassed() ? "PASS" : "FAIL"; // 替换原因中的逗号,避免CSV格式冲突 String errorMsg = sr.isPassed() ? "" : sr.getError().getMessage().replace(",", ";"); writer.write(String.format("%s,%s,%s\n", sr.getScenario().getName(), status, errorMsg)); } } catch (IOException e) { e.printStackTrace(); } } }
二、禁用默认HTML报告并集成到JUnit流程
如果通过JUnit运行测试,先关闭默认HTML报告,再在测试结束后触发自定义报告生成:
- 在
karate-config.js中关闭默认报告:
karate.configure('report', { enabled: false });
- 在JUnit测试类中添加后置处理:
import org.junit.AfterClass; import org.junit.runner.RunWith; import com.intuit.karate.junit5.Karate; @RunWith(Karate.class) public class TestSuiteRunner { @AfterClass public static void generateCustomReport() { // 调用上述自定义报告生成方法 CustomTxtReporter.main(null); } }
三、直接重定向控制台日志到文件
Karate默认会输出详细的测试执行日志到控制台,可通过命令行重定向生成纯文本日志:
# 将控制台输出(包括错误信息)写入日志文件 java -jar your-test-jar-file.jar > karate-test-execution.log 2>&1
内容的提问来源于stack exchange,提问作者kmunish
相关产品推荐
相关产品推荐

