跳过 Swoole 编译测试需明确避开 make test 而非禁用;默认 make 和 make install 均不运行测试,仅 make test 触发;CI/CD 中应删除 make test 行,加 MAKEFLAGS="-j1" 防 OOM,并用轻量命令验证扩展加载。

跳过 Swoole 编译时的测试用例不是常规推荐操作,但确实存在两类真实需求:一是 CI/CD 流水线中为节省时间跳过耗时的 make test;二是本地低配机器(如 1G 内存 VPS)跑 make test 直接被 OOM-kill 导致编译中断。这时候你不需要“禁用测试”,而是要明确避开它——因为默认 make 不会自动运行测试,只有显式执行 make test 才会触发。
make install 本身不运行测试用例
很多人误以为 make && make install 会连带跑测试,其实不会。make 只编译目标文件,make install 只复制 swoole.so 到 extension_dir。测试是独立阶段,必须手动调用:
-
make test:运行全部 PHP 标准测试套件(耗时长,依赖完整环境) -
make test TESTS=tests/swoole_server/test.php:只跑单个测试文件(仍可能失败,但可控) - 不执行以上任一命令,就完全不会触发测试
CI 环境下安全跳过测试的实操方式
如果你在 GitHub Actions、GitLab CI 或 Jenkins 中构建,只需确保脚本里没写 make test。常见错误配置是照搬官方文档的“完整流程”,结果卡在 test 阶段超时。正确做法是:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 删掉所有
make test行,只保留make && make install - 加
MAKEFLAGS="-j1"防止多核并发编译导致内存溢出(尤其在 2G 以下机器) - 验证环节改用轻量检查:
/path/to/php -m | grep swoole或/path/to/php -r "echo extension_loaded('swoole') ? 'ok' : 'fail';"
为什么不要强行 patch 或 --disable-tests
Swoole 源码里没有 --disable-tests 这类 configure 选项,也不存在编译期开关来“关闭测试”。试图通过修改 Makefile 或注释 tests/ 目录只会让后续维护变混乱。更关键的是:make test 的失败通常暴露真实问题,比如:
- 你的 OpenSSL 版本太旧,导致
Co\Http\Client测试挂掉(但扩展本身能加载) - 系统缺少
libbrotli,HTTP/2 测试失败,而你又没开--enable-http2 - SELinux 或容器 namespace 限制了 socket 创建,server 启动测试直接 timeout
这些都不是“跳过就能解决”的问题,而是环境适配信号。真要跳,就跳得干净利落——不跑 make test,但保留对 swoole.so 是否可加载、基础类是否存在的最小验证。
真正容易被忽略的点是:很多自动化脚本把 make test 写在 make install 后面,却没加 || true 或条件判断。一旦测试失败,整个部署就中断。这不是 Swoole 的问题,是你脚本里没处理好“测试非必需”这个事实。

















