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

在Cucumber Java中如何读取解析多份feature文件并生成单份文件?

如何合并多个Cucumber Feature文件为单个Feature文件

核心思路

你需要先解析每个输入的Feature文件,提取所有Scenario中的步骤,再构建一个包含合并后步骤的新Scenario,最后将这个新的Gherkin文档输出为Feature文件。Gherkin的API本身提供了解析和生成能力,只是你可能没找到对应的输出工具类。

具体实现步骤(Java示例)

1. 解析输入Feature文件,提取步骤

用GherkinParser解析每个文件,遍历解析后的GherkinDocument,提取所有Scenario的Step对象:

import io.cucumber.gherkin.GherkinParser;
import io.cucumber.gherkin.AstBuilder;
import io.cucumber.messages.types.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class FeatureMerger {
    public static List<Step> extractStepsFromFeature(String filePath) throws Exception {
        List<Step> steps = new ArrayList<>();
        String content = new String(Files.readAllBytes(Paths.get(filePath)));
        
        AstBuilder builder = new AstBuilder();
        GherkinParser parser = new GherkinParser(builder);
        parser.parse(content);
        
        GherkinDocument doc = builder.getGherkinDocument();
        Feature feature = doc.getFeature();
        
        // 遍历Feature下的所有子节点,提取Scenario的步骤
        for (FeatureChild child : feature.getChildren()) {
            if (child.getScenario() != null) {
                steps.addAll(child.getScenario().getSteps());
            }
        }
        return steps;
    }
}

2. 构建合并后的Gherkin文档

创建新的Scenario和Feature,将提取的步骤全部添加进去,组装成完整的GherkinDocument:

private static GherkinDocument buildMergedFeature(List<Step> allSteps) {
    // 创建合并后的Scenario
    Scenario mergedScenario = new Scenario(
            null, // 标签,按需添加
            "Combined scenario",
            null, // 描述
            allSteps,
            null, // Examples
            null // 关键字
    );
    
    // 创建Feature
    Feature mergedFeature = new Feature(
            null, // 标签
            "Merged Feature", // Feature名称,可自定义
            null, // 描述
            "en", // 语言
            List.of(new FeatureChild(null, mergedScenario, null)), // 包含合并后的Scenario
            null, // Background
            null // 关键字
    );
    
    return new GherkinDocument(mergedFeature, null);
}

3. 将Gherkin文档输出为Feature文件

使用io.cucumber.gherkin.PrettyFormatter将GherkinDocument格式化为文本并写入文件:

import io.cucumber.gherkin.PrettyFormatter;
import java.io.FileWriter;
import java.io.Writer;

public static void writeMergedFeature(GherkinDocument mergedDoc, String outputPath) throws Exception {
    try (Writer writer = new FileWriter(outputPath)) {
        PrettyFormatter formatter = new PrettyFormatter(writer);
        formatter.write(mergedDoc);
        formatter.close();
    }
}

4. 主方法调用

public static void main(String[] args) throws Exception {
    // 读取多个Feature文件
    List<Step> allSteps = new ArrayList<>();
    allSteps.addAll(extractStepsFromFeature("Feature1.feature"));
    allSteps.addAll(extractStepsFromFeature("Feature2.feature"));
    
    // 构建并输出合并后的Feature
    GherkinDocument mergedDoc = buildMergedFeature(allSteps);
    writeMergedFeature(mergedDoc, "Feature3.feature");
}

注意事项

  • 如果你的Feature文件包含Background、Tags、Examples等元素,需要根据需求调整解析和合并逻辑,比如是否保留Background或合并标签。
  • 确保引入正确的Gherkin依赖,比如Maven依赖:
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>gherkin</artifactId>
    <version>26.0.1</version> <!-- 使用最新稳定版 -->
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:35:23