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

如何将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报告,再在测试结束后触发自定义报告生成:

  1. 在karate-config.js中关闭默认报告:
karate.configure('report', { enabled: false });
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:45:35