如何通过环境变量让Cypress指定测试仅在CI环境运行?
Cypress实现测试仅在CI环境运行的方法
问题背景
Cypress官方文档中关于测试启用/禁用的章节提到以下特性:
- 在测试名称后追加
.skip以排除该测试 - 在测试名称后追加
.only以排除测试套件中的其他所有测试
希望实现某个测试仅在CI流水线中运行,本地运行时自动排除,计划通过识别CI环境变量动态控制测试启用/禁用,询问Cypress是否支持该功能。
解决方案
Cypress完全支持这种动态控制需求,以下是几种实用实现方式:
1. 利用Cypress内置的CI检测
Cypress会自动识别运行环境,在CI流水线中Cypress.config('isCI')返回true,本地运行时返回false,可直接基于此判断:
it('仅在CI环境执行的测试', () => { if (!Cypress.config('isCI')) { this.skip(); // 本地环境跳过该测试 } // CI环境执行的测试逻辑 cy.visit('/dashboard'); cy.get('.stats-card').should('be.visible'); });
2. 自定义环境变量控制
如果需要更灵活的触发条件,可自定义环境变量:
- CI流水线中启动Cypress的命令示例:
CYPRESS_RUN_CI_ONLY=true npx cypress run - 测试代码中判断并控制:
it('仅CI环境执行的测试', () => { if (Cypress.env('RUN_CI_ONLY') !== 'true') { cy.log('本地环境跳过该测试'); this.skip(); } // 编写CI专属测试步骤 });
3. 批量管理CI专属测试文件
若有大量仅CI运行的测试,可将它们放在单独目录(如cypress/e2e/ci-only),通过配置文件动态过滤:
// cypress.config.js const { defineConfig } = require('cypress'); module.exports = defineConfig({ e2e: { specPattern: Cypress.config('isCI') ? ['cypress/e2e/**/*.cy.js', 'cypress/e2e/ci-only/**/*.cy.js'] : ['cypress/e2e/**/*.cy.js', '!cypress/e2e/ci-only/**/*.cy.js'] } });
内容的提问来源于stack exchange,提问作者Dónal
相关产品推荐
相关产品推荐

