Cucumber JVM:如何让标签化钩子优先于全局钩子执行?
解决Cucumber JVM钩子执行顺序问题
这个场景其实是Cucumber钩子执行优先级的典型问题,咱们可以通过给钩子指定order参数来轻松解决,确保删除用户的操作在浏览器关闭前完成。
具体修改方案
给两个@After钩子添加order参数,把删除用户的钩子设为更小的数值(比如0),全局关闭浏览器的钩子设为更大的数值(比如1,或者用默认值1000也可以,因为默认值比0大):
// 全局关闭浏览器的钩子,order设为1(优先级更低,会后执行) @After(order = 1) public void tearDown(Scenario scenario){ System.out.println("teardown"); closeDriver(); } // 删除用户的钩子,order设为0(优先级更高,先执行) @After(value = "@deleteNewUser", order = 0) public void deleteUser(){ System.out.println("deleteUser"); }
原理说明
Cucumber的@Before和@After钩子默认的order值是1000。当存在多个钩子时,会严格按照order数值从小到大的顺序执行:
- 数值越小,优先级越高,越先触发执行
- 如果多个钩子
order值相同,执行顺序是不确定的(不依赖代码定义顺序)
修改后,你的测试执行输出会变成:
deleteUser
teardown
这样就能保证删除用户的操作在浏览器关闭前正常运行,不会因为浏览器提前关闭导致步骤失败。
内容的提问来源于stack exchange,提问作者Gaurang Shah
相关产品推荐
相关产品推荐

