如何在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
相关产品推荐
相关产品推荐

