如何提前获取Cucumber指定标签匹配的待执行场景与标签列表?
提前获取Cucumber指定标签匹配的场景列表方案
方法一:使用Cucumber Dry-Run模式
这是最简单的原生方案,无需额外编码,直接利用Cucumber的dry-run参数遍历匹配场景但不执行测试步骤:
- 执行命令:
mvn clean test -Dcucumber.filter.tags='@Regression and @login' -Dcucumber.execution.dry-run=true - 效果:控制台会输出所有符合标签条件的场景名称、所属Feature文件路径及标签集合,全程不会运行测试步骤,速度极快。
- 进阶:如果需要保存结果到文件,可重定向输出:
mvn clean test -Dcucumber.filter.tags='@Regression and @login' -Dcucumber.execution.dry-run=true > test-scenarios-list.txt
方法二:自定义Cucumber插件(定制化输出)
如果需要特定格式的输出(如CSV、结构化文本),可以编写自定义插件捕获场景信息:
- 编写插件类(Cucumber 7+版本示例):
import io.cucumber.plugin.EventListener; import io.cucumber.plugin.event.EventPublisher; import io.cucumber.plugin.event.Scenario; import io.cucumber.plugin.event.ScenarioStarted; import java.io.FileWriter; import java.io.IOException; public class ScenarioListReporter implements EventListener { private FileWriter writer; @Override public void setEventPublisher(EventPublisher publisher) { publisher.registerHandlerFor(ScenarioStarted.class, this::onScenarioStarted); try { writer = new FileWriter("scenarios-to-run.txt"); } catch (IOException e) { e.printStackTrace(); } } private void onScenarioStarted(ScenarioStarted event) { Scenario scenario = event.getScenario(); try { writer.write(String.format("Feature 文件: %s\n场景名称: %s\n关联标签: %s\n---\n", scenario.getUri(), scenario.getName(), scenario.getTags())); } catch (IOException e) { e.printStackTrace(); } } @Override public void close() { try { if (writer != null) writer.close(); } catch (IOException e) { e.printStackTrace(); } } } - 在Maven的Surefire插件中配置该插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <configuration> <systemPropertyVariables> <cucumber.filter.tags>@Regression and @login</cucumber.filter.tags> <cucumber.plugin>com.yourpackage.ScenarioListReporter</cucumber.plugin> <!-- 可选:结合dry-run避免执行步骤 --> <cucumber.execution.dry-run>true</cucumber.execution.dry-run> </systemPropertyVariables> </configuration> </plugin> - 运行
mvn clean test,会在项目根目录生成scenarios-to-run.txt,包含所有匹配场景的详细信息。
方法三:利用Cucumber JSON报告解析
结合dry-run和JSON插件生成结构化报告,再解析提取信息:
- 生成JSON报告命令:
mvn clean test -Dcucumber.filter.tags='@Regression and @login' -Dcucumber.execution.dry-run=true -Dcucumber.plugin=json:target/cucumber-scenarios.json - 解析方式:用Python、Java或其他工具读取
target/cucumber-scenarios.json,提取elements数组中的name(场景名)、tags(标签)、uri(Feature路径)等字段。
内容的提问来源于stack exchange,提问作者Cristian Plata
相关产品推荐
相关产品推荐

