Cypress如何配置本地与CI双URL并按条件调用cy.ntlm
多环境baseUrl配置方案
Cypress原生支持动态加载配置,不需要额外安装插件就能实现本地/CI两套环境隔离,选以下任意一种方案即可:
- 轻量方案:单配置文件+启动参数覆盖
在cypress.config.js中默认配置本地环境地址,生产地址通过启动参数动态传入,配置示例:
const { defineConfig } = require("cypress"); const { ntlmAuth } = require('cypress-ntlm-auth/plugin'); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { // 注册ntlm插件必需逻辑 on('task', ntlmAuth); return config; }, // 默认本地开发环境baseUrl,本地启动自动加载 baseUrl: "http://localhost:3000", env: { // 可预存生产环境地址,也可以完全通过命令行传入 prodBaseUrl: "https://你的生产环境域名" } }, });
本地测试直接执行常规启动命令即可,默认使用localhost地址:npx cypress open 或 npx cypress run
CI环境执行测试时,通过参数直接覆盖baseUrl即可,不需要修改代码:npx cypress run --config baseUrl=https://你的生产环境域名
- 多配置文件方案(适合两环境差异配置较多的场景)
分别创建cypress.dev.config.js和cypress.prod.config.js两个独立配置文件,各自写入对应环境的baseUrl、其他专属配置。启动时通过--config-file参数指定加载的配置文件即可,CI启动示例:npx cypress run --config-file cypress.prod.config.js
条件调用cy.ntlm的实现逻辑
不要在单个测试用例里重复写判断,直接在全局前置钩子中统一处理,所有用例执行前自动判断环境,逻辑一次编写全局生效。
打开cypress/support/e2e.js(旧版本对应cypress/support/index.js),加入以下全局前置逻辑:
// 每个用例执行前自动运行 beforeEach(() => { // 读取当前运行环境生效的baseUrl const activeBaseUrl = Cypress.config('baseUrl'); // 精准判断:当前地址为生产环境地址时才触发NTLM认证 // 如果需要更宽松的判断,也可以用 !activeBaseUrl.includes('localhost') 作为条件 if (activeBaseUrl === Cypress.env('prodBaseUrl')) { cy.ntlm( [activeBaseUrl], Cypress.env('NTLM_USERNAME'), // NTLM账号不要硬编码,存在CI环境变量/本地.env文件中 Cypress.env('NTLM_PASSWORD'), Cypress.env('NTLM_DOMAIN') ); } // 本地localhost环境会自动跳过ntlm调用,直接访问即可 });
注意:NTLM认证的账号、密码、域名信息不要硬编码在代码仓库中,本地测试不需要配置这些参数,CI环境中将对应值配置到CI平台的加密环境变量中即可,Cypress会自动读取注入。
内容的提问来源于stack exchange,提问作者fleks95
相关产品推荐
相关产品推荐

