You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:05:26