如何在Extent Report中仅保留触发测试用例的Cucumber标签
实现方法
要让Extent Report只显示触发测试的标签,核心思路是捕获本次运行的触发标签,然后在生成报告时替换场景的原有标签,具体步骤如下:
第一步:传递并捕获触发标签
运行测试时,通过系统属性把触发的标签传递到代码中。比如用命令行启动时:mvn test -Dcucumber.filter.tags=@smoke如果是IDE运行,在运行配置的「VM options」里添加
-Dcucumber.filter.tags=@smoke。
之后在代码中获取这个值:String triggeredTag = System.getProperty("cucumber.filter.tags"); // 处理标签格式,去掉@符号(可选,根据报告显示习惯调整) String targetTag = triggeredTag != null ? triggeredTag.replace("@", "") : null;第二步:自定义报告逻辑替换标签
借助Cucumber的钩子(Hook)或者自定义Extent Reporter,在场景开始时修改Extent测试节点的标签:import com.aventstack.extentreports.ExtentTest; import io.cucumber.java.Before; import io.cucumber.plugin.event.Scenario; public class ExtentTagCustomizer { @Before public void customizeScenarioTags(Scenario scenario) { String targetTag = System.getProperty("cucumber.filter.tags"); if (targetTag != null) { // 提取需要保留的标签(支持多触发标签,比如@smoke or @regression) String[] tagsToKeep = targetTag.split("\\s+or\\s+"); // 获取当前Extent测试节点 ExtentTest currentTest = ExtentCucumberAdapter.getCurrentTest(); // 清空原有所有标签 currentTest.getModel().getCategorySet().clear(); // 添加触发的标签 for (String tag : tagsToKeep) { String cleanTag = tag.replace("@", ""); currentTest.assignCategory(cleanTag); } } } }第三步:适配Extent版本差异
如果使用的是较新的ExtentCucumberAdapter版本,getCategorySet()可能无法直接调用,这时可以改用removeCategory()先删除原有标签,再添加目标标签:// 替代清空标签的逻辑 for (String existingTag : scenario.getSourceTagNames()) { currentTest.removeCategory(existingTag.replace("@", "")); } // 再添加触发的标签验证效果
运行测试后打开Extent Report,场景的标签栏只会显示本次触发的标签(比如@smoke),原有其他标签不会再出现。
内容的提问来源于stack exchange,提问作者shrusns49
相关产品推荐
相关产品推荐

