如何在单台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}\"" } } } } } } }
四、如何指定并行线程数?
- Dashboard方式:线程数由Jenkins执行器数量 + Pipeline中并行stage的数量决定,比如执行器设4,Pipeline写4个stage,就会跑4个并行线程。
- 手动拆分方式:直接调整自动拆分的组数(比如把上面的
4改成6),或者增加并行stage的数量即可。
五、额外注意事项
- 机器资源:每个Cypress实例大概占1-2核CPU、2GB内存,并行数别超过机器承载能力,否则会卡顿甚至崩溃。
- 端口冲突:并行数多的时候,建议给每个实例指定不同端口,比如在循环里加
--port 300${index}。 - 依赖复用:把
npm install放在并行stage之前,避免每个实例重复安装,节省时间。 - 报告合并:手动拆分的话,推荐用
cypress-mochawesome-reporter插件合并多个测试报告,方便查看。
内容的提问来源于stack exchange,提问作者Areesha Altaf
相关产品推荐
相关产品推荐

