You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins中实现Selenium Java+Cucumber测试执行100用例后等待1小时再续跑?

实现方案

方案1:Jenkins Pipeline 分阶段执行(推荐)

这是最灵活且易维护的方式,通过Pipeline将测试拆分为三个阶段:执行前100个用例、等待调度器处理、执行剩余用例。

步骤:

  1. 分组测试用例:给前100个Cucumber用例添加统一标签(比如@batch1),剩余400个添加@batch2标签,也可以按feature文件目录拆分。
  2. 编写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"'
            }
        }
    }
}
  1. 配置Jenkins任务:新建Pipeline任务,将Jenkinsfile上传到代码仓库或直接粘贴到任务中,指定对应slave标签。

方案2:在测试代码中加入等待逻辑

如果不想修改Jenkins任务结构,可以在Cucumber测试代码中添加计数和等待逻辑:

步骤:

  1. 创建测试计数器:用静态变量记录已执行的用例数量。
  2. 使用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);
            }
        }
    }
}
  1. 注意事项:这种方式会占用Jenkins slave的执行进程,等待期间slave资源无法被其他任务使用;如果前100个用例中有失败,仍会触发等待,建议配合失败终止逻辑。

方案3:拆分独立Jenkins任务(适合旧版Jenkins)

如果不使用Pipeline,可以拆分为两个独立任务:

  • 任务A:执行前100个用例,执行成功后触发任务B(添加1小时延迟)
  • 任务B:执行剩余400个用例

配置步骤:

  1. 创建任务A,配置执行前100个用例的命令。
  2. 在任务A的构建后操作中选择“Build other projects”,勾选“Trigger only if build is stable”,填写任务B名称,并设置“Trigger after delay”为1小时。
  3. 创建任务B,配置执行剩余400个用例的命令,指定同一个Jenkins slave。

内容的提问来源于stack exchange,提问作者NoNoNo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:17:44