Skip to main content
Cypress应用

Cypress.env

在测试中获取和设置环境变量。

info

环境变量指南说明了在测试之外设置环境变量的其他方法。

caution
作用域

使用Cypress.env设置的环境变量仅在当前测试文件中有效。

Cypress会隔离运行每个测试文件:浏览器会在不同测试文件之间退出。在一个测试文件中添加或修改的环境变量在其他测试文件中不可见。

caution
操作系统级环境变量与Cypress环境变量的区别

在Cypress中,"环境变量"是指可以通过Cypress.env访问的变量。这些与操作系统级环境变量不同。但是,可以通过操作系统级环境变量来设置Cypress环境变量

语法

Cypress.env()
Cypress.env(name)
Cypress.env(name, value)
Cypress.env(object)

参数

name (String)

要获取或设置的环境变量名称。

value (String)

要设置的环境变量值。

object (Object)

使用对象字面量设置多个环境变量。

示例

无参数

从Cypress配置中获取所有环境变量

const { defineConfig } = require('cypress')

module.exports = defineConfig({
env: {
foo: 'bar',
baz: 'quux',
},
})
Cypress.env() // => {foo: 'bar', baz: 'quux'}

名称

从Cypress配置中返回单个环境变量

caution
布尔值

通过命令行传递时,我们会自动规范化键和值。Cypress会自动将值转换为数字或布尔值。

CYPRESS_HOST=laura.dev CYPRESS_IS_CI=true CYPRESS_MY_ID=123 cypress run
Cypress.env('HOST') // => "laura.dev"
Cypress.env('IS_CI') // => true
Cypress.env('MY_ID') // => 123

名称和值

在测试中更改Cypress配置中的环境变量

caution
作用域

请记住,使用此API对环境变量所做的任何更改仅对同一测试文件中剩余的测试有效。

const { defineConfig } = require('cypress')

module.exports = defineConfig({
env: {
foo: 'bar',
baz: 'quux',
},
})
Cypress.env('host', 'http://server.dev.local')

Cypress.env('host') // => http://server.dev.local

对象

通过传递对象覆盖Cypress配置中的多个值

const { defineConfig } = require('cypress')

module.exports = defineConfig({
env: {
foo: 'bar',
baz: 'quux',
},
})
Cypress.env({
host: 'http://server.dev.local',
foo: 'foo',
})

Cypress.env() // => {foo: 'foo', baz: 'quux', host: 'http://server.dev.local'}

从插件中获取

以下示例使用Cypress.env访问在插件中动态设置的环境变量

使用此方法可以在运行任何测试之前一次性获取环境变量的值。

const { defineConfig } = require('cypress')

module.exports = defineConfig({
// setupNodeEvents can be defined in either
// the e2e or component configuration
e2e: {
setupNodeEvents(on, config) {
config.env.sharedSecret =
process.env.NODE_ENV === 'qa' ? 'hoop brick tort' : 'sushi cup lemon'

return config
},
},
})
// cypress/e2e/secrets.cy.js
describe('在插件中设置的环境变量', () => {
let sharedSecret

before(() => {
sharedSecret = Cypress.env('sharedSecret')
})

it.only('可以在测试中访问。', () => {
cy.log(sharedSecret)
})
})

注意事项

为什么需要使用环境变量?

环境变量指南说明了常见的使用场景。

可以通过命令行传递环境变量吗?

可以。您可以通过命令行传递环境变量,还有其他更多方法。

环境变量指南说明了为测试设置环境变量的其他方法。

为什么是Cypress.env而不是cy.env

一般来说,从Cypress调用的任何内容都会影响全局状态。从cy调用的任何内容都会影响局部状态。

由于Cypress.env添加或更改的环境变量仅对当前测试文件有效,您可能会认为应该是cy.env而不是Cypress.env...您是对的。Cypress.env影响局部状态是API随时间演变的产物:Cypress.env曾经影响全局状态——在一个测试文件中添加的环境变量在其他测试文件中也可见——但Cypress团队在3.0.0中明智地使每个测试文件隔离运行,那时Cypress.env已经是公开API了。

另请参阅