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

