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

如何在Cypress-GitHub Actions测试中调整baseURL或跳过服务验证

解决Cypress在GitHub Actions中baseURL的验证与修改问题

方案1:跳过baseURL的服务器状态验证

Cypress默认会在测试启动前发送HEAD请求验证baseURL的可达性,要跳过这个检查,最直接的方式是在运行命令中添加--skip-verify参数:

npx cypress run --skip-verify

在GitHub Actions的job里,直接把这个参数加到你的Cypress启动命令即可,这样不管baseURL对应的服务器状态如何,Cypress都会直接执行测试。

如果想用配置文件的方式,可以在cypress.config.js中通过setupNodeEvents禁用相关验证:

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      config.experimentalSkipDomainInjection = true;
      return config;
    },
    baseUrl: process.env.CYPRESS_BASE_URL,
  },
});

不过命令行参数的方式更简单直观,优先推荐。

方案2:验证后修改/截取baseURL

2.1 在GitHub Actions流程中预处理

如果需要先验证服务器状态,再提取IP部分传递给Cypress,可以在GitHub Actions的步骤中完成:

jobs:
  cypress-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - name: Validate server & extract base IP
        run: |
          # 验证服务器是否可达
          curl --head --fail ${{ env.TEST_SERVER_URL }}
          # 从baseURL中提取IP(例如从http://192.168.1.5:3000提取192.168.1.5)
          BASE_IP=$(echo "${{ env.TEST_SERVER_URL }}" | sed -E 's/^https?:\/\/([0-9\.]+):[0-9]+/\1/')
          # 将IP存入环境变量,供Cypress读取
          echo "CYPRESS_BASE_IP=$BASE_IP" >> $GITHUB_ENV
      - name: Run Cypress tests
        run: npx cypress run
        env:
          CYPRESS_BASE_URL: ${{ env.TEST_SERVER_URL }}

之后在Cypress测试中,直接通过Cypress.env('BASE_IP')获取IP,拼接不同端口发送请求:

const baseIp = Cypress.env('BASE_IP');
cy.request(`http://${baseIp}:8080/api/your-endpoint`);

2.2 在Cypress代码中动态处理

如果想在Cypress内部完成验证和baseURL修改,可以在全局前置钩子中处理(比如cypress/support/e2e.js):

before(() => {
  // 先验证原baseURL服务器是否运行
  cy.request({
    method: 'HEAD',
    url: Cypress.config('baseUrl'),
    failOnStatusCode: false,
  }).then((res) => {
    if (res.status !== 200) {
      throw new Error('Target server is not reachable');
    }
    // 解析baseURL,提取IP
    const urlObj = new URL(Cypress.config('baseUrl'));
    const baseIp = urlObj.hostname;
    // 存入环境变量供测试用例使用
    Cypress.env('BASE_IP', baseIp);
    // 若需修改全局baseUrl(谨慎使用,会影响所有默认请求)
    // Cypress.config('baseUrl', `http://${baseIp}`);
  });
});

测试用例中使用方式和上面一致,直接调用Cypress.env('BASE_IP')拼接端口即可。

内容的提问来源于stack exchange,提问作者RadekB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:33:11