在 github actions 中按 php 版本分目录上传 phpunit xml、phpstan json、覆盖率报告和 phpcompatibility csv 等结构化工件,命名含版本号,失败时仍执行上传以便跨版本人工或脚本对比分析。

直接在 GitHub Actions 中上传测试工件,是实现 PHP 多版本行为对比分析的关键一环——它让每次测试的原始输出(如 PHPUnit 的 XML 报告、PHPStan 的 JSON 结果、覆盖率数据)可追溯、可下载、可横向比对。
明确要上传哪些测试工件
不是所有测试产物都值得上传,重点保留能反映“版本差异”的结构化输出:
-
PHPUnit 的 JUnit XML 报告:用
--log-junit ./test-results/phpunit.xml生成,便于对比各 PHP 版本下哪些用例失败/跳过/耗时突增 -
PHPStan 分析结果(JSON 格式):加
--error-format=json --generate-baseline,可识别某版本下新增的类型推导警告 -
代码覆盖率报告(HTML 或 Clover XML):如
phpunit --coverage-html ./coverage,用于观察高版本 JIT 是否影响分支覆盖稳定性 -
PHPCompatibility 扫描日志:用
phpcs --report=csv --report-file=./compat-report.csv,快速定位 7.4 和 8.4 对同一段代码的兼容性判定差异
按 PHP 版本分目录上传,避免混叠
必须为每个 strategy.matrix.php-version 值单独上传工件,命名体现版本号,否则无法区分来源:
- 在 job 步骤中使用
name: Upload PHPUnit Results for PHP ${{ matrix.php-version }} - 上传路径设为
./test-results/php-${{ matrix.php-version }}/,再把 XML、CSV 等文件移入该目录 - 工件名建议统一前缀:
test-results-php-${{ matrix.php-version }},方便在 Actions 页面按名称筛选
上传后如何做跨版本对比
工件本身不自动对比,但提供了人工或脚本分析的基础:
- 进入 Actions 页面 → 点击某次运行 → 在 “Artifacts” 区域下载多个版本的
phpunit.xml,用 diff 工具逐行比对失败用例 - 将各版本的
compat-report.csv导入 Excel,用条件格式标出仅在 8.2+ 出现的PHP 8.2+ incompatible条目 - 写一个简单 Python 脚本,解析所有 PHPStan JSON,统计各版本下
error数量变化趋势,识别升级拐点
注意上传时机与失败阻断逻辑
上传工件不能掩盖失败,而是服务于失败归因:
- 确保上传步骤放在测试命令之后、但仍在同一 job 内,即使测试失败也执行(加
if: always()) - 但上传本身失败(如路径不存在)不应影响门禁判断——真正的阻断点仍是 PHPUnit 或 PHPStan 的退出码
- 不要上传
vendor/或composer.lock这类构建中间产物,它们不参与行为对比
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











