如何在Cypress的JSON配置文件中引用已导出的环境变量?
在Cypress配置文件中引用系统环境变量的实现方法
直接在JSON配置文件里写"UserID": "${CYPRESS_USER_ID}"是无效的——JSON本身不支持变量插值语法。下面提供两种可行的实现方案:
方案一:通过cypress.config.js加载并替换配置变量
在Cypress主配置文件中读取dev.json,手动解析并替换其中的环境变量占位符,步骤如下:
- 修改
cypress.config.js,添加配置读取与变量替换逻辑:
const { defineConfig } = require('cypress'); const fs = require('fs'); const path = require('path'); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { // 获取命令行传入的configFile参数,默认用dev const configFileName = config.env.configFile || 'dev'; // 拼接配置文件路径 const configFilePath = path.resolve(__dirname, `./${configFileName}.json`); // 读取并解析JSON配置 const customConfig = JSON.parse(fs.readFileSync(configFilePath, 'utf8')); // 遍历env字段,替换变量占位符 if (customConfig.env) { Object.entries(customConfig.env).forEach(([key, value]) => { if (typeof value === 'string' && value.match(/^\${.*}$/)) { // 提取环境变量名 const envVarName = value.slice(2, -1); // 用系统环境变量替换,找不到则保留原占位符 customConfig.env[key] = process.env[envVarName] || value; } }); } // 合并自定义配置到Cypress全局配置 config = { ...config, ...customConfig }; return config; }, }, });
- 保持
dev.json内容不变:
{ "env": { "UserID": "${CYPRESS_USER_ID}" } }
- 运行测试命令
npx cypress open --env configFile=dev,Cypress会自动将${CYPRESS_USER_ID}替换为你export的环境变量值。
方案二:直接使用Cypress自动加载的环境变量
Cypress会自动识别所有前缀为CYPRESS_的系统环境变量,并注入到Cypress.env()中(自动去掉前缀)。比如你export的CYPRESS_USER_ID,可以直接在测试代码中通过Cypress.env('USER_ID')获取,无需在dev.json中配置。
如果一定要在dev.json的env字段中保留UserID键,可将其设为空值或默认值,Cypress会自动用系统环境变量覆盖:
{ "env": { "UserID": "" } }
运行测试时,Cypress.env('UserID')会自动读取CYPRESS_USER_ID的值。
内容的提问来源于stack exchange,提问作者Jonathan Viana
相关产品推荐
相关产品推荐

