─“测试架构工程化”就是把测试从“开发自己跑一下”变成“每次改代码都自动验证正确性、兼容性、性能和可上线性”。────────── 下面给你一套─Hyperf 可直接落地─的完整方案。─────────────────────────────────────────────────────────────────────────── ---1)目标先定清楚 你要的不是“测试多”,而是这5件事:1. 改动能被快速发现问题(分钟级反馈)2. 关键链路不被回归破坏3. 服务间接口变更不会偷偷炸别人4. 上线前知道性能有没有退化5. 失败可定位、可复现、可修复 ---2)测试分层(Hyperf 推荐金字塔) 按投入产出比排序:1. 单元测试(最多) 测业务规则、领域逻辑、工具函数。2. 集成测试(中等) 测 DB/Redis/MQ/外部依赖接入。3. 契约测试(必须) 测上下游 API / 事件 schema 兼容。4. 端到端测试(少但关键) 测“下单-支付-回调”这种完整链路。5. 性能与稳定性测试(发布门禁) 测 P95、错误率、连接池、内存漂移。 ---3)Hyperf 项目目录建议(工程化关键) tests/ Unit/ Integration/ Contract/ E2E/ Performance/ Fixtures/ 再加三类基础设施: - docker-compose.test.yml:起 MySQL/Redis/MQ 测试依赖 - phpunit.xml:分 testsuite(Unit/Integration/Contract/E2E) - Makefile:统一命令入口(make test-unit 等) ---4)每层怎么测(落地口径) A. 单元测试(快、稳定) - 只测纯业务逻辑,不连真实外部系统 - 重点覆盖:金额计算、状态机流转、幂等判定、风控规则 - 要求:执行快、可并行、无随机失败 B. 集成测试(真实依赖) - 连真实 MySQL/Redis/MQ(测试容器) - 验证:事务、索引、连接池、重试、死信 - Hyperf重点:协程场景下并发访问是否正确 C. 契约测试(防“联调炸”) - HTTP/gRPC:请求响应字段、类型、错误码 - MQ:事件名、必填字段、版本兼容 - 原则:提供方和消费方都要跑契约测试 D. E2E(关键业务闭环) - 覆盖 Top3核心链路 - 不追求多,追求“上线必经路径必测” - 例如:创建订单 ->扣库存 ->发起支付 ->回调成功 E. 性能/稳定性(上线前必跑) - 基线压测 + 回归压测 - 指标:P95/P99、错误率、连接池等待、MQ backlog、worker重启率 - 长稳1-2 小时观察内存趋势(常驻进程必须做) ---5)CI/CD 流水线门禁(从“可测”到“可上线”) 推荐顺序:1. 静态检查(lint/phpstan)2. Unit(快速)3. Integration(依赖容器)4. Contract(兼容门禁)5. E2E(关键链路)6. Performance Smoke(短压测)7. 构建镜像 + 安全扫描8. 预发冒烟 + 灰度发布 门禁规则示例: - Unit 或 Contract 失败 ->直接阻断合并 - 性能回归超过阈值(例如 P95 恶化>20%)->阻断发布 - E2E 核心用例失败 ->阻断发布 ---6)Hyperf 专项测试清单(最容易漏)1. 单例是否持有请求态数据(协程串数据)2. Context 透传是否正确(trace_id/user_id)3. 连接池参数边界(池耗尽、超时等待)4. 消费者重试与幂等(重复消息)5. 优雅退出(发布重启时是否丢任务)6. 定时任务并发冲突7. 内存持续增长(泄漏迹象) ---7)测试数据与环境治理 - 每次集成测试前准备独立库 schema - Fixture 固定化,避免“今天能过明天不过” - 外部依赖分两类: - 关键依赖:测试环境真实服务 - 非关键依赖:可替身,但要有契约保障 - 测试环境配置和生产差异要可见可追踪 ---8)Flaky Test(偶发失败)治理 规则要硬:1. 发现 flaky 立刻标记2. 同一用例7天内 flaky 超过阈值,禁止作为发布门禁3. 指定 owner 限时修复4. 周会清理 flaky 清单 不治理 flaky,团队会慢慢不信测试。 ---9)指标体系(衡量工程化是否有效) 核心看这8个: - 测试总时长(PR 到结果) - 单测/集成/契约覆盖率(按模块) - 关键链路 E2E 覆盖率 - Flaky rate - 发布前拦截缺陷数 - 线上回归事故数 - 缺陷修复前置率(上线前发现占比) - 变更失败率(DORA) ---10)90天落地计划(务实版)0-30 天 - 建测试目录和统一命令 - 跑通 Unit + Integration 基础流水线 - 补齐核心模块单测31-60 天 - 建 Contract 测试体系(HTTP + MQ) - 加 E2E Top3关键链路 - 把测试结果接入 PR 门禁61-90 天 - 加性能回归门禁(短压测 + 基线对比) - 建 flaky 治理机制 - 出测试质量周报并持续优化 --- 最后一句 Hyperf 测试架构工程化的最佳做法是:分层测试 + 自动门禁 + 协程专项校验 + 性能回归基线。 做到这四点,测试就不是“写给自己看”,而是“真正保护上线质量的生产系统”。