如何在Azure DevOps部署构建前触发Cypress自动化测试?
在Azure DevOps部署构建前触发Cypress测试的实现步骤
核心思路
把Cypress测试作为独立阶段插入到构建完成后、部署开始前,通过阶段依赖规则确保只有测试全部通过才会启动部署流程。
1. 调整流水线阶段顺序
修改你的Azure DevOps流水线YAML,新增Test阶段,放在原有Build和Deploy阶段之间:
stages: - stage: Build jobs: - job: BuildJob steps: # 保留你原有的构建步骤(比如npm install、项目打包、上传构建产物等) - stage: Test jobs: - job: RunCypressTests steps: # 下文配置Cypress测试的执行步骤 - stage: Deploy jobs: - job: DeployJob dependsOn: Test # 明确部署阶段依赖测试阶段 condition: succeeded() # 仅当测试阶段成功时才执行部署 steps: # 保留你原有的部署步骤
2. 配置Cypress测试执行步骤
在Test阶段的RunCypressTests任务中,添加以下步骤确保测试环境和执行逻辑:
steps: # 安装与本地匹配的Node.js版本 - task: NodeTool@0 inputs: versionSpec: '18.x' # 替换成你本地使用的Node版本 displayName: '安装Node.js' # 安装项目所有依赖(包括Cypress) - script: npm install displayName: '安装项目依赖' # (可选)后台启动测试依赖的服务(如果你的测试需要访问后端/前端服务) - script: npm run start:test & displayName: '启动测试依赖服务' # 运行Cypress无头模式测试 - script: npx cypress run displayName: '执行Cypress自动化测试'
- 若测试不需要依赖额外服务,直接删除启动服务的步骤即可。
- 如需指定测试用例或环境,可给
cypress run加参数,比如npx cypress run --spec "cypress/e2e/login.spec.js"。
3. 验证流水线逻辑
提交修改后的YAML到Azure DevOps仓库,手动触发一次流水线:
- 观察阶段执行顺序:Build → Test → Deploy
- 故意让一个测试用例失败,确认Deploy阶段会被自动跳过,只有测试全部通过才会进入部署环节。
4. 可选:上传测试报告到Azure DevOps
为了更直观查看测试结果,可配置Cypress生成JUnit格式报告并上传到流水线:
- 安装依赖:
npm install cypress-junit-reporter --save-dev - 修改
cypress.config.js添加报告配置:
module.exports = defineConfig({ e2e: { reporter: 'junit', reporterOptions: { mochaFile: 'cypress/reports/junit/results-[hash].xml', toConsole: true } } });
- 在流水线YAML的测试步骤后添加上传任务:
- task: PublishTestResults@2 inputs: testResultsFormat: 'JUnit' testResultsFiles: '**/cypress/reports/junit/*.xml' failTaskOnFailedTests: true # 测试失败时直接标记任务失败 displayName: '上传测试结果到Azure DevOps'
内容的提问来源于stack exchange,提问作者user16902331
相关产品推荐
相关产品推荐

