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

如何统计Cucumber Feature文件中Scenario数量并在全场景后执行指定步骤

解决方案

方法1:使用@AfterAll注解(推荐)

Cucumber(7.x版本+JUnit 5环境)提供了@AfterAll注解,标记的方法会在当前Feature文件的所有Scenario执行完成后仅运行一次,无需提前统计数量,直接满足需求:

import io.cucumber.java.AfterAll;

public class FeatureHooks {

    @AfterAll
    public static void runAfterAllScenarios() {
        // 在这里编写所有Scenario执行完成后需要运行的步骤
        System.out.println("当前Feature的所有Scenario执行完毕,执行收尾步骤");
    }
}

若使用JUnit 4环境,可配合Cucumber的@AfterClass注解,或自定义测试运行器实现类似效果。

方法2:统计Scenario数量,在最后一个Scenario执行后触发逻辑

如果必须通过统计数量实现,可在Hook类中维护计数器和总Scenario数:

import io.cucumber.java.Before;
import io.cucumber.java.After;
import io.cucumber.java.Scenario;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ScenarioCounterHooks {
    private static int totalScenarios;
    private static int currentCount = 0;

    @Before
    public void initAndCount(Scenario scenario) {
        // 首次执行时解析当前Feature的Scenario总数
        if (totalScenarios == 0) {
            String featurePath = scenario.getUri().getPath();
            totalScenarios = countValidScenarios(featurePath);
        }
        currentCount++;
    }

    @After
    public void checkAndRunFinalStep() {
        if (currentCount == totalScenarios) {
            // 执行特定收尾步骤
            System.out.println("所有Scenario执行完成,运行指定步骤");
            // 重置计数器,避免影响其他Feature文件
            totalScenarios = 0;
            currentCount = 0;
        }
    }

    // 解析Feature文件,统计普通Scenario的数量(排除Scenario Outline)
    private int countValidScenarios(String featurePath) {
        try {
            List<String> lines = Files.readAllLines(Paths.get(featurePath));
            return (int) lines.stream()
                    .map(String::trim)
                    .filter(line -> line.startsWith("Scenario ") && !line.startsWith("Scenario Outline"))
                    .count();
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
}

注意:该方法需自行处理Feature文件解析,并行测试场景下需用ThreadLocal维护线程独立的计数器,复杂度高于@AfterAll方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:06