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

Github Actions搭配PHPUnit与MySQL运行测试速度极慢问题求助

GitHub Actions MySQL + PHPUnit 运行缓慢优化方案

核心问题根因

你遇到的速度问题基本来源于默认MySQL容器的磁盘IO瓶颈:官方MySQL镜像默认开启了完整的事务持久化校验,所有数据写入都会强制刷盘,同时数据目录挂载在宿主机机械/云硬盘上,IO性能极低,导致每个数据库操作耗时被拉长数十倍。

优化方案

1. 调整MySQL服务配置,规避IO瓶颈

给MySQL服务新增内存挂载、关闭不必要的持久化校验,直接把数据库运行在内存中,测试结束后自动销毁数据,完全符合CI场景需求:

services:
  mysql:
    image: mysql:5.6
    env:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: testing
    ports:
      - 33306:3306
    # 将MySQL数据目录挂载到内存tmpfs,完全跳过磁盘IO
    tmpfs:
      - /var/lib/mysql
    options: >-
      --health-cmd="mysqladmin ping"
      --health-interval=10s
      --health-timeout=5s
      --health-retries=3
      --entrypoint sh -c "
      mysqld
      --skip-innodb-flush-log-at-trx-commit
      --sync-frm=0
      --innodb_flush_method=O_DIRECT_NO_FSYNC
      --innodb_buffer_pool_size=1G
      "

2. 补全并优化工作流执行步骤

你当前贴出的精简配置缺少代码检出、依赖安装等必要步骤,完整配置建议增加依赖缓存、关闭不必要的调试特性进一步提速:

steps:
  - name: 检出代码
    uses: actions/checkout@v4

  - name: 配置PHP环境
    uses: shivammathur/setup-php@v2
    with:
      php-version: '替换为你的项目实际PHP版本'
      extensions: mbstring, xml, ctype, json, mysqlnd, pdo_mysql
      coverage: none # 无覆盖率统计需求时务必关闭,可减少30%以上的测试耗时

  - name: 缓存Composer依赖
    uses: actions/cache@v3
    with:
      path: vendor
      key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
      restore-keys: |
        ${{ runner.os }}-composer-

  - name: 安装项目依赖
    run: composer install --prefer-dist --no-progress --no-interaction

  - name: 执行测试
    run: vendor/bin/phpunit
    env:
      DB_PORT: 3306
      DB_USERNAME: root
      DB_PASSWORD: password
      DB_DATABASE: testing
      DB_HOST: mysql

3. PHPUnit 侧适配优化

  • 拆分测试类型:单元测试优先使用内存SQLite运行,仅需要MySQL特性的集成测试才连接数据库
  • Laravel项目开启RefreshDatabase trait的事务回滚特性,避免每个测试用例都重建表结构
  • 关闭PHPUnit的进程隔离配置,避免每个测试用例都启动新的PHP进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:54:00