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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:54:27