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

如何在单台Jenkins机器上并行运行Cypress测试?

单台Jenkins机器并行执行Cypress测试解决方案

一、为什么自由风格任务会串行?

Cypress的--parallel参数要生效得满足两个前提:一是依赖Cypress Dashboard分发测试用例,二是Jenkins能同时启动多个Cypress实例。自由风格任务默认单进程执行,哪怕加了--parallel,也只会跑一个Cypress实例,自然是串行的。

二、Jenkins本机节点配置(无需额外节点)

单台机器只要调整执行器数量,就能支持多任务并行:

  • 进入Jenkins主页 → 管理Jenkins → 管理节点和云 → 点击本机节点(通常叫master)
  • 点击「配置」,找到「执行器数量」,设置为你需要的并行数(建议根据机器CPU核心数来,比如4核机器设3-4,8核设6-8,避免资源耗尽)
  • 保存配置,这样本机就能同时运行多个任务实例了

三、Pipeline并行执行示例

方式1:依赖Cypress Dashboard自动拆分(推荐)

这种方式会自动把45个spec平均分配到各个并行实例,不用手动分组:

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                checkout scm // 拉取你的代码仓库
            }
        }
        stage('安装依赖') {
            steps {
                sh 'npm install'
            }
        }
        stage('并行执行测试') {
            parallel {
                // 这里的stage数量要和Jenkins执行器数量匹配
                stage('Cypress实例1') {
                    steps {
                        sh 'npx cypress run --record --key abc --parallel --ci-build-id ${BUILD_NUMBER}'
                    }
                }
                stage('Cypress实例2') {
                    steps {
                        sh 'npx cypress run --record --key abc --parallel --ci-build-id ${BUILD_NUMBER}'
                    }
                }
                stage('Cypress实例3') {
                    steps {
                        sh 'npx cypress run --record --key abc --parallel --ci-build-id ${BUILD_NUMBER}'
                    }
                }
                stage('Cypress实例4') {
                    steps {
                        sh 'npx cypress run --record --key abc --parallel --ci-build-id ${BUILD_NUMBER}'
                    }
                }
            }
        }
    }
    post {
        always {
            // 可选:收集JUnit格式的测试报告
            junit 'cypress/reports/junit/*.xml'
        }
    }
}

⚠️ 注意:--ci-build-id ${BUILD_NUMBER}必须加,Cypress靠这个识别同一个构建的并行实例,才能正确拆分spec文件。

方式2:手动拆分Spec(无需Dashboard)

如果不想用Cypress Dashboard,可以手动把spec分成多组,或者用脚本自动拆分:

pipeline {
    agent any
    def specGroups = []
    stages {
        stage('自动拆分测试用例') {
            steps {
                script {
                    // 获取所有spec文件,分成4组(可改成你要的并行数)
                    def allSpecs = findFiles(glob: 'cypress/e2e/**/*.spec.js').collect { it.path }
                    def groupSize = (allSpecs.size() / 4).ceil()
                    specGroups = allSpecs.collate(groupSize)
                }
            }
        }
        stage('拉取代码') { steps { checkout scm } }
        stage('安装依赖') { steps { sh 'npm install' } }
        stage('并行执行测试') {
            parallel {
                specGroups.eachWithIndex { group, index ->
                    stage("测试组${index+1}") {
                        steps {
                            def specList = group.join(',')
                            sh "npx cypress run --spec \"${specList}\""
                        }
                    }
                }
            }
        }
    }
}

四、如何指定并行线程数?

  1. Dashboard方式:线程数由Jenkins执行器数量 + Pipeline中并行stage的数量决定,比如执行器设4,Pipeline写4个stage,就会跑4个并行线程。
  2. 手动拆分方式:直接调整自动拆分的组数(比如把上面的4改成6),或者增加并行stage的数量即可。

五、额外注意事项

  • 机器资源:每个Cypress实例大概占1-2核CPU、2GB内存,并行数别超过机器承载能力,否则会卡顿甚至崩溃。
  • 端口冲突:并行数多的时候,建议给每个实例指定不同端口,比如在循环里加--port 300${index}。
  • 依赖复用:把npm install放在并行stage之前,避免每个实例重复安装,节省时间。
  • 报告合并:手动拆分的话,推荐用cypress-mochawesome-reporter插件合并多个测试报告,方便查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:11