如何在cypress.config.js中使用Jenkins环境变量执行Cypress测试
直接在Cypress配置文件中使用Jenkins环境变量的方案
完全可以直接在cypress.config.js中读取Jenkins的环境变量来替代硬编码的账号密码,下面是具体实现步骤:
1. 在Jenkins中注入账号密码为环境变量
不管是用全局环境变量还是withCredentials插件,只要把账号密码暴露为Jenkins的环境变量即可。比如用withCredentials的示例Jenkinsfile片段:
pipeline { agent any stages { stage('Run Cypress Tests') { steps { withCredentials([usernamePassword( credentialsId: 'test-account', usernameVariable: 'TEST_USERNAME', passwordVariable: 'TEST_PASSWORD' )]) { // 这里运行Cypress测试的命令或容器 } } } } }
上面的代码会把凭据中的账号密码分别注入为TEST_USERNAME和TEST_PASSWORD两个环境变量。
2. 在cypress.config.js中读取环境变量
在Cypress配置文件里,直接通过Node.js的process.env对象读取Jenkins传递过来的环境变量,有两种方式:
方式一:直接在env配置项中定义
const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { baseUrl: '你的测试域名', env: { username: process.env.TEST_USERNAME, password: process.env.TEST_PASSWORD } } })
方式二:在setupNodeEvents中动态注入
如果需要更灵活的配置逻辑,可以在事件钩子中添加环境变量:
const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { // 从Jenkins环境变量中读取并添加到Cypress配置 config.env.username = process.env.TEST_USERNAME config.env.password = process.env.TEST_PASSWORD return config } } })
3. 确保环境变量传递到Cypress容器
因为你使用的是自定义的cypress/included:12.0.0镜像,在Jenkins启动容器时,必须把Jenkins的环境变量传递到容器内部。比如用Docker Pipeline插件的示例:
agent { docker { image '你的自定义cypress/included:12.0.0镜像地址' args '-v /e2e:/e2e' // 挂载本地npm模块目录 environment { TEST_USERNAME = "$TEST_USERNAME" TEST_PASSWORD = "$TEST_PASSWORD" } } }
这样容器内的Cypress就能读取到这两个环境变量了。
4. 在测试用例中使用变量
登录测试用例里直接通过Cypress.env()获取变量,配合session复用:
it('完成登录并复用session', () => { cy.session('user-login-session', () => { cy.visit('/login') cy.get('#username-input').type(Cypress.env('username')) // 密码输入时隐藏日志,避免敏感信息泄露 cy.get('#password-input').type(Cypress.env('password'), { log: false }) cy.get('#login-btn').click() // 验证登录成功的断言 cy.contains('欢迎登录').should('be.visible') }) }) // 后续测试用例自动复用session it('访问用户中心', () => { cy.visit('/user-center') cy.contains('用户信息').should('be.visible') })
注意事项
- 环境变量名称大小写敏感,确保Jenkins和Cypress配置中的变量名完全一致
- 用
withCredentials时,插件默认会屏蔽密码的日志输出,避免敏感信息泄露 - 容器启动时必须显式传递环境变量,否则Cypress无法读取到Jenkins的环境变量
内容的提问来源于stack exchange,提问作者varsha
相关产品推荐
相关产品推荐

