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

如何配置Jenkins Pipeline推送代码时单命令运行指定Cypress测试目录

Cypress + Jenkins 按指定目录执行测试配置方案

1. 改造Cypress运行命令支持动态传参

打开项目根目录package.json,在scripts节点新增支持接收目录参数的运行指令,避免每次改动配置:

{
  "scripts": {
    "cy:run": "cypress run",
    "cy:run:folder": "cypress run --spec \"cypress/integration/$TEST_FOLDER/**/*.js\""
  }
}

如果需要兼容Windows执行环境,先安装cross-env做跨平台环境变量处理,把上面的cy:run:folder脚本改成:
"cy:run:folder": "cross-env cypress run --spec \"cypress/integration/$TEST_FOLDER/**/*.js\""

2. 编写参数化Jenkins Pipeline

在项目根目录新建Jenkinsfile,核心逻辑是通过构建参数控制要执行的测试目录,既支持手动选择目录触发,也支持代码推送时自动匹配目录:

pipeline {
  agent any
  // 定义可选测试目录参数
  parameters {
    choice(
      name: 'TEST_FOLDER',
      choices: ['', 'pulse', 'apps'],
      description: '选择要执行的测试目录,留空则执行全量用例'
    )
  }
  stages {
    stage('拉取代码&安装依赖') {
      steps {
        checkout scm
        sh 'npm ci'
      }
    }
    // 自动触发场景下,根据代码变更路径自动匹配测试目录
    stage('自动匹配测试目录(webhook触发专用)') {
      when {
        not { triggeredBy 'UserIdCause' } // 手动触发时跳过该逻辑
      }
      steps {
        script {
          def changedPaths = currentBuild.changeSets.collect { cs ->
            cs.items.collect { it.affectedPaths }
          }.flatten()
          // 按代码改动路径匹配对应测试目录,可根据自己的业务代码路径调整规则
          if (changedPaths.any { it.startsWith('src/pulse/') }) {
            params.TEST_FOLDER = 'pulse'
          } else if (changedPaths.any { it.startsWith('src/apps/') }) {
            params.TEST_FOLDER = 'apps'
          } else {
            params.TEST_FOLDER = '' // 公共配置/依赖改动默认跑全量
          }
        }
      }
    }
    stage('执行Cypress测试') {
      steps {
        script {
          if (params.TEST_FOLDER?.trim()) {
            sh "npm run cy:run:folder"
          } else {
            sh "npm run cy:run"
          }
        }
      }
    }
    stage('归档测试产物') {
      steps {
        archiveArtifacts artifacts: 'cypress/screenshots/**/*,cypress/videos/**/*', allowEmptyArchive: true
      }
    }
  }
}

3. 单命令触发指定目录测试

配置好Pipeline后,不管是本地触发、CI系统联动还是推送代码自动触发,都可以通过参数控制执行范围:

  • 手动在Jenkins面板触发时,直接在参数下拉框选目标目录即可
  • 命令行触发pulse目录测试:
curl -X POST 你的Jenkins地址/job/你的流水线任务名/buildWithParameters?TEST_FOLDER=pulse --user 你的Jenkins用户名:你的Jenkins API Token
  • 配置Git webhook触发时,在钩子逻辑里按改动路径带上TEST_FOLDER参数即可,推送pulse模块代码时自动传入TEST_FOLDER=pulse,对应目录用例自动执行,不用跑全量。

注意:如果你使用Cypress 10及以上版本,默认测试目录已经从cypress/integration调整为cypress/e2e,对应修改脚本里的spec路径匹配规则即可。后续如果新增其他测试目录,只需要在Jenkins参数的choices列表里加上对应目录名,再补充下自动匹配的路径规则就行,不需要改动核心执行逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:15:30