如何配置Cucumber同时依据Feature与Scenario标签筛选执行测试用例?
嘿,我明白你现在的困扰:你按环境给Feature分了文件夹,每个Feature标了对应的@env标签,Scenario用@current标记要执行的用例,结果运行时Cucumber不管你指定的环境,把所有带@current的场景都跑了,连没指定的@Env3下的也不放过。
问题出在哪?
看你的ANT配置就发现啦——你只指定了根目录features作为扫描路径,同时标签过滤只加了@current、~@obsolete、~@business,完全没把环境标签(@Env1/@Env2)加入过滤规则。Cucumber不会自动关联Feature和Scenario的标签,你得明确告诉它:要执行的是「带@current的场景」并且「所在Feature是指定环境的」。
两种解决方案任你选
方案一:用标签逻辑组合精确过滤
Cucumber支持标签的逻辑运算,你可以把环境标签和@current组合起来,让Cucumber只执行同时满足两个条件的场景。
把你ANT配置里的--tags部分改成这样:
<arg value="--tags" /> <arg value="@current and (@Env1 or @Env2)"/> <arg value="--tags" /> <arg value="~@obsolete" /> <arg value="--tags" /> <arg value="~@business" />
这样设置后,Cucumber只会执行:
- 场景自身带
@current标签,并且 - 所在Feature带
@Env1或@Env2标签,并且 - 场景/Feature不带
@obsolete或@business标签
方案二:直接指定目标环境的文件夹
既然你的Feature已经按环境分好文件夹了(比如features/env1、features/env2),那直接在配置里指定这些具体文件夹,从源头上排除无关环境的文件。
把原来的<arg value="features"/>改成:
<arg value="features/env1"/> <arg value="features/env2"/>
再配合原来的@current等标签过滤,Cucumber只会扫描这两个文件夹下的Feature,根本不会碰env3里的文件,自然不会执行那里的场景。
小建议
如果把两种方案结合起来用会更稳妥:既限定扫描的文件夹范围,又通过标签做二次校验,彻底杜绝误执行的可能。
内容的提问来源于stack exchange,提问作者Lakshmi

