如何在Jenkins中实现Selenium Java+Cucumber测试执行100用例后等待1小时再续跑?
实现方案
方案1:Jenkins Pipeline 分阶段执行(推荐)
这是最灵活且易维护的方式,通过Pipeline将测试拆分为三个阶段:执行前100个用例、等待调度器处理、执行剩余用例。
步骤:
- 分组测试用例:给前100个Cucumber用例添加统一标签(比如
@batch1),剩余400个添加@batch2标签,也可以按feature文件目录拆分。 - 编写Jenkinsfile:
pipeline { agent { label 'your-slave-label' } // 指定执行测试的Jenkins slave标签 stages { stage('执行前100个测试用例') { steps { // 用Maven执行带@batch1标签的用例,可根据你的构建工具调整命令 sh 'mvn test -Dcucumber.options="--tags @batch1"' } post { success { echo '前100个用例执行完成,等待调度器处理' } failure { error '前100个用例执行失败,终止后续流程' } } } stage('等待调度器处理') { steps { // 硬等1小时(3600秒),也可替换为轮询调度器状态的逻辑 sh 'sleep 3600' // 优化方案:轮询调度器API直到处理完成(示例) /* script { def schedulerReady = false while (!schedulerReady) { def response = sh script: 'curl -s http://your-scheduler-api/status', returnStdout: true if (response.contains("processed: true")) { schedulerReady = true } else { echo '调度器未处理完成,等待5分钟后重试' sleep 300 // 5分钟 } } } */ } } stage('执行剩余400个测试用例') { steps { sh 'mvn test -Dcucumber.options="--tags @batch2"' } } } }
- 配置Jenkins任务:新建Pipeline任务,将Jenkinsfile上传到代码仓库或直接粘贴到任务中,指定对应slave标签。
方案2:在测试代码中加入等待逻辑
如果不想修改Jenkins任务结构,可以在Cucumber测试代码中添加计数和等待逻辑:
步骤:
- 创建测试计数器:用静态变量记录已执行的用例数量。
- 使用Cucumber After Hook:在每个用例执行完成后递增计数器,当达到100时触发等待。
import io.cucumber.java.After; public class TestHooks { private static int testCount = 0; @After public void afterTest() { testCount++; if (testCount == 100) { try { System.out.println("已执行100个用例,等待1小时"); Thread.sleep(3600000); // 1小时=3600000毫秒 } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException("等待被中断", e); } } } }
- 注意事项:这种方式会占用Jenkins slave的执行进程,等待期间slave资源无法被其他任务使用;如果前100个用例中有失败,仍会触发等待,建议配合失败终止逻辑。
方案3:拆分独立Jenkins任务(适合旧版Jenkins)
如果不使用Pipeline,可以拆分为两个独立任务:
- 任务A:执行前100个用例,执行成功后触发任务B(添加1小时延迟)
- 任务B:执行剩余400个用例
配置步骤:
- 创建任务A,配置执行前100个用例的命令。
- 在任务A的构建后操作中选择“Build other projects”,勾选“Trigger only if build is stable”,填写任务B名称,并设置“Trigger after delay”为1小时。
- 创建任务B,配置执行剩余400个用例的命令,指定同一个Jenkins slave。
内容的提问来源于stack exchange,提问作者NoNoNo
相关产品推荐
相关产品推荐

