如何在Cypress中根据URL条件跳过测试并按环境执行用例
在Cypress中根据baseURL条件性跳过测试的两种方案
嘿,针对你在Cypress 6.2.0里遇到的「QA环境(标识为"abc")的测试不能在生产环境(标识为"xyz")执行」的需求,我整理了两种实用方案,一起来看看:
方案一:动态检查baseURL并跳过测试(符合你想要的beforeEach/测试内判断逻辑)
你可以直接在beforeEach钩子或者测试用例内部,通过检查baseURL是否包含"xyz"来决定是否跳过测试。这里需要注意必须使用普通的function()而非箭头函数,这样才能访问Cypress测试上下文的this对象,调用this.skip()来跳过测试。
修改后的代码示例:
方式1:在beforeEach里统一判断跳过
beforeEach(function() { const baseUrl = environment.getBaseUrl(); // 或者直接用Cypress内置的配置获取:Cypress.config('baseUrl') // 如果是生产环境(baseURL含xyz),直接跳过当前测试用例 if (baseUrl.includes('xyz')) { this.skip(); } // 非生产环境才执行登录和访问操作 login.loginByUser('TomJones'); cy.visit(`${baseUrl}${route}`); }); it('test page', function () { // 这段代码只会在非生产环境执行 cy.intercept('GET', '**/some-api/v1/test*').as('Test'); cy.get('#submitButton').click(); // 后续添加你的断言逻辑... });
方式2:在单个测试用例内判断跳过
beforeEach(() => { login.loginByUser('TomJones'); cy.visit(`${environment.getBaseUrl()}${route}`); }); it('test page', function () { const baseUrl = environment.getBaseUrl(); if (baseUrl.includes("xyz")) { this.skip(); // 生产环境直接跳过 } // 非生产环境执行测试逻辑 cy.intercept('GET', '**/some-api/v1/test*').as('Test'); cy.get('#submitButton').click(); });
方案二:你已验证可行的CLI+文件夹结构分组方案
这种方案通过文件夹结构将不同环境的测试用例物理隔离,再结合CLI命令过滤执行,适合大规模测试套件的管理,结构更清晰。
步骤说明:
按环境拆分测试文件夹:
整理你的测试文件结构,将QA和生产环境的测试分别放到对应文件夹:cypress/integrations/smokeTest/ ├── QA/ # 仅QA环境运行的测试用例文件 └── Prod/ # 仅生产环境运行的测试用例文件配置npm脚本:
在项目的package.json中添加对应的执行脚本(修正了你原命令里的拼写错误):"scripts": { "cy:filter:qa": "cypress run --spec \"cypress/integration/smokeTests/QA/*-spec.ts\"", "cy:filter:prod": "cypress run --spec \"cypress/integration/smokeTests/Prod/*-spec.ts\"", "cypress:open:all": "cypress open --spec \"cypress/integration/smokeTests/*/*-spec.ts\"" }执行对应命令:
- 运行QA环境测试:
npm run cy:filter:qa - 运行所有环境的测试(QA+生产):
npm run cypress:open:all - 运行生产环境测试:
npm run cy:filter:prod
- 运行QA环境测试:
内容的提问来源于stack exchange,提问作者Dominique M.
相关产品推荐
相关产品推荐

