我希望将 Azure 库中的变量传递给 cypress,这样我就可以拥有多个阶段(暂存&生产)
我尝试了以下方法:
通过一个名为 environment.json 的文件使用固定装置,该文件看起来像这样:
{
WEB_APP_BASE_URL": "https://blight-town.com" // 像我这样的迷失者的"默认"URL
}
在 Azure 中,我有一个包含变量 "; WEB_APP_BASE_URL",其值为 "https://not-my-website.com"。
我的 yaml 文件看起来是这样的:
- task:Npm@1
displayName:NPM run cy:run-smoke-tests
输入:
workingDir: 'webapp
command:自定义
customCommand:run cy:run-smoke-tests'//这只是为特定规格文件运行 cypress
env:
web_app_base_url:$(web_app_base_url)
我们本希望由此覆盖默认的基础 url,并使用库中的值,但遗憾的是,我们没有成功。各位有什么想法?
遇到的问题在于,Cypress 在 Azure Pipelines 的 Node.js 环境中运行,它无法直接访问 Azure 库中的变量。
为了解决这个问题,需要将 Azure 库变量传递到 Cypress 环境中。 以下是两种常用的方法:
1. 使用环境变量:
- 在 Azure Pipelines 的 YAML 文件中,使用
echo
命令将 Azure 库变量设置为环境变量: ```yaml- script: | echo ##vso[task.setvariable variable=CYPRESS_BASE_URL]$(web_app_base_url) displayName: '设置 Cypress 环境变量' ```
- 在 Cypress 测试代码中,可以通过
Cypress.env()
访问环境变量:javascript describe('我的测试', () => { it('访问正确的 URL', () => { cy.visit(Cypress.env('BASE_URL')); }); });
2. 使用 Cypress 配置文件:
- 创建一个 Cypress 配置文件 (例如
cypress.env.json
),并在其中定义一个占位符变量:json { "baseUrl": "YOUR_BASE_URL_HERE" }
- 在 Azure Pipelines 的 YAML 文件中,使用
sed
或Replace
任务将 Azure 库变量替换到配置文件中: ```yaml- task: ReplaceTokens@5 inputs: rootDirectory: './' targetFilePatterns: 'cypress.env.json' tokenPrefix: '{' tokenSuffix: '}' actionOnMissing: 'warn' env: YOUR_BASE_URL_HERE: $(web_app_base_url) ```
- 在 Cypress 测试代码中,baseUrl 将自动从配置文件中加载。
一些额外的建议:
- 确保在 Cypress 命令(
cy:run-smoke-tests
)中没有覆盖 baseUrl。 - 使用有意义的变量名称,例如
CYPRESS_BASE_URL
,以清楚地区分 Cypress 环境变量和其他环境变量。 - 可以使用类似的方法传递其他 Azure 库变量到 Cypress 环境中。
通过以上方法,就可以将 Azure 库变量传递给 Cypress,并在不同的环境中使用不同的配置运行测试。
标签:azure,azure-devops,azure-pipelines,cypress,azure-pipelines-yaml From: 78544853