如何在GitHub Actions中动态指定NODE_ENV执行Playwright E2E测试
解决GitHub Actions中复用E2E测试工作流切换环境的问题
以下是几种实用的实现思路,无需为每个环境单独编写重复的工作流:
方案1:使用手动触发的工作流输入参数(最灵活)
通过workflow_dispatch定义可选择的环境参数,手动触发测试时指定目标环境,同时动态匹配对应环境的密钥。
步骤1:修改工作流YAML
name: E2E Tests on: workflow_dispatch: inputs: environment: description: '选择测试环境' required: true default: 'test' type: choice options: - test - staging - production jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: npm ci - name: Install Playwright browsers run: npx playwright install --with-deps - name: Run E2E tests env: # 根据选择的环境动态匹配对应密钥 TENANT_PASSWORD: ${{ secrets[format('TENANT_PASSWORD_{0}', inputs.environment)] }} # 其他环境密钥同理,比如 API_KEY: ${{ secrets[format('API_KEY_{0}', inputs.environment)] }} run: npm run playwright:${{ inputs.environment }}
步骤2:配置环境对应密钥
在GitHub仓库的Settings > Secrets and variables > Actions中,按统一命名规范创建各环境密钥:
TENANT_PASSWORD_TEST(对应test环境)TENANT_PASSWORD_STAGING(对应staging环境)TENANT_PASSWORD_PRODUCTION(对应production环境)
步骤3:触发测试
进入GitHub仓库的Actions页面,找到该工作流,点击"Run workflow",选择目标环境即可执行对应测试。
方案2:使用矩阵策略(适合自动触发场景)
如果需要结合分支、标签自动触发对应环境测试,或者批量运行多环境测试,可以用矩阵配合条件判断实现:
name: E2E Tests on: push: branches: - main # 推送到main分支时运行staging测试 - develop # 推送到develop分支时运行test测试 release: types: [published] # 发布版本时运行production测试 jobs: test: runs-on: ubuntu-latest strategy: matrix: environment: [test, staging, production] steps: - uses: actions/checkout@v4 - name: Install dependencies run: npm ci - name: Install Playwright browsers run: npx playwright install --with-deps - name: Run E2E tests # 通过条件过滤,只执行当前触发场景对应的环境测试 if: | (github.ref == 'refs/heads/develop' && matrix.environment == 'test') || (github.ref == 'refs/heads/main' && matrix.environment == 'staging') || (github.event_name == 'release' && matrix.environment == 'production') env: TENANT_PASSWORD: ${{ secrets[format('TENANT_PASSWORD_{0}', matrix.environment)] }} run: npm run playwright:${{ matrix.environment }}
可选优化:简化package.json脚本
当前三个脚本逻辑重复,可以合并为一个,通过环境变量控制运行环境,减少冗余:
"scripts": { "playwright:env": "cross-env NODE_ENV=$ENVIRONMENT playwright test" }
之后在工作流中只需运行:
run: ENVIRONMENT=${{ inputs.environment }} npm run playwright:env
这样新增环境时无需修改脚本,只需补充对应密钥和环境参数即可。
内容的提问来源于stack exchange,提问作者Stiley
相关产品推荐
相关产品推荐

