如何在单个Jenkins Job中并行运行Cypress回归与冒烟测试套件
最优Jenkins Pipeline实现方案
核心思路
- 采用声明式Pipeline,结构清晰、维护成本低
- 利用并行阶段同时执行多环境测试,大幅压缩总运行时间
- 统一配置无头Chrome运行参数,保证测试执行环境一致性
- 将测试套件、目标环境抽为可复用变量,后续调整需求无需改动核心执行逻辑
完整Pipeline代码
pipeline { agent any environment { // 定义需执行的测试套件 TEST_SUITES = ['smoke', 'regression'] // 定义目标测试环境 TEST_ENVS = ['int', 'prd', 'prd01'] // Cypress无头Chrome运行基础参数 CYPRESS_BASE_ARGS = '--headless --browser chrome --no-exit false' } stages { stage('安装依赖') { steps { script { // 用npm ci保证依赖版本与lock文件完全匹配,避免环境差异 sh 'npm ci' // 验证Cypress安装状态,提前规避运行报错 sh 'npx cypress verify' } } } stage('并行执行测试') { parallel { // 遍历所有环境,为每个环境创建独立并行阶段 for (env in TEST_ENVS) { stage("测试 - ${env}环境") { steps { script { // 遍历所有套件,依次执行当前环境下的套件测试 for (suite in TEST_SUITES) { echo "启动${env}环境的${suite}测试..." sh """ npx cypress run \ ${CYPRESS_BASE_ARGS} \ --env environment=${env} \ --spec "cypress/integration/${suite}/**/*.js" """ } } } post { always { // 收集JUnit格式报告,Jenkins可直接展示测试结果 junit 'cypress/results/*.xml' // 归档测试截图、录屏,方便排查失败用例 archiveArtifacts artifacts: 'cypress/screenshots/**, cypress/videos/**', allowEmptyArchive: true } } } } } } } post { success { echo '所有测试执行通过!' } failure { echo '部分测试失败,请查看报告及归档文件排查问题。' } } }
关键细节说明
- 并行执行效率:通过
parallel块循环生成各环境测试阶段,int、prd、prd01三个环境的测试同时运行,比串行执行节省至少2/3的时间 - 配置可维护性:所有可变项集中在
environment块,后续新增环境或套件只需修改数组,无需调整核心执行代码 - 无头Chrome适配:
--headless --browser chrome专门针对CI无图形界面场景配置,避免因缺少显示服务导致测试崩溃 - 依赖一致性:
npm ci严格按照package-lock.json安装依赖,杜绝不同环境依赖版本不一致引发的测试失败 - 结果留存与排查:
junit插件直观展示测试通过率与失败用例,归档的截图、录屏可快速定位用例失败原因 - 环境参数传递:通过
--env environment=${env}将当前测试环境传给Cypress,测试代码中可通过Cypress.env('environment')获取,动态切换接口地址等配置
注意事项
- 确保Jenkins节点已安装Node.js和Chrome浏览器;若使用Docker节点,推荐官方镜像
cypress/browsers:node18.12.0-chrome108,自带所有依赖 - 若测试套件实际路径与
cypress/integration/${suite}不符,需调整--spec参数适配真实目录结构 - 若不同环境需配置独立基础URL,可在
environment块新增对应变量,或在cypress.config.js中根据environment变量动态设置
内容的提问来源于stack exchange,提问作者Rasamalla Pavan kumar
相关产品推荐
相关产品推荐

