如何避免Cucumber执行所有glue文件中的@Before钩子方法
Cucumber避免@Before全局执行的具体操作方案
核心逻辑是给钩子方法绑定专属标签,只有贴了对应标签的Feature/场景才会触发对应钩子,具体操作步骤如下:
- 第一步:给Glue代码中的
@Before方法绑定自定义标签
给需要限制执行范围的@Before注解传入自定义标签参数,标签可以按需命名,建议和业务场景关联。示例代码如下:// 仅对标签为@OrderTest的场景执行的前置钩子 @Before("@OrderTest") public void initOrderTestData() { // 初始化订单测试的测试数据逻辑 } // 仅对标签为@UserTest的场景执行的前置钩子 @Before("@UserTest") public void initUserTestData() { // 初始化用户测试的测试数据逻辑 } // *没有绑定标签的@Before仍然会全局执行,不需要全局执行的钩子不要写这种形式* @Before public void globalInit() { // 全局通用的初始化逻辑 } - 第二步:在Feature文件中给对应测试场景/功能贴匹配标签
只需要在需要触发对应前置钩子的Feature、场景或者场景大纲上加上对应的标签即可,示例Feature代码如下:
如果只需要给单个场景加标签,也可以直接把标签写在Scenario上方:# 整个Feature都贴了@OrderTest标签,该Feature下所有场景都会触发initOrderTestData钩子 @OrderTest Feature: 订单流程测试 Scenario: 正常下单场景 Given 已登录用户账号 When 提交下单请求 Then 订单创建成功
上面第二个场景同时贴了两个标签,会同时触发两个对应标签的Feature: 混合测试场景 @UserTest Scenario: 用户注册场景 Given 手机号未被注册 When 提交注册信息 Then 账号注册成功 @OrderTest @UserTest Scenario: 已登录用户下单场景 Given 已登录用户账号 When 提交下单请求 Then 订单创建成功,用户积分增加@Before钩子。 - 额外注意事项
- 标签名可以自定义,只要Glue中的
@Before注解里的标签和Feature中的标签完全匹配即可,大小写敏感 - 同理
@After钩子也可以用同样的方式限制执行范围,避免全局执行 - 如果要排除某个标签的钩子,可以在运行Cucumber时配置标签过滤规则,只运行符合要求的测试及对应钩子
- 标签名可以自定义,只要Glue中的
内容的提问来源于stack exchange,提问作者user3711142
相关产品推荐
相关产品推荐

