测试平台-09-NexTest从立项到成熟可用还差什么
第九章前面几篇,已经分别把测试平台真正难的几块拆开了:
- 后端骨架
- 模块边界
- 权限模型
- 调度与执行引擎
- 环境管理
- 报告系统
- Jenkins 与告警
写完这些之后,再回头看一个具体项目,会更容易判断它现在到底处在什么阶段。
这篇就不写抽象的平台方法论了,而是直接回到一个具体项目:
NexTest。
这次分析不只是参考之前那篇老的设计文,也把仓库本体拉下来过了一遍。
从仓库状态看,它现在更准确的判断不是“已经有一个待打磨的平台”,而是:
还处在立项和骨架铺设阶段,离成熟可用还有一段明显距离。
这篇文章就只讲这个问题:
NexTest 现在离成熟可用到底差什么,应该先补哪条最小可用链路,而不是继续把目录和概念往外铺。
一、先说结论:它现在更像“设计草图仓库”,还不是“平台产品仓库”
为什么会这样判断?
因为一个成熟可用的测试平台,至少要满足下面一条最小闭环:
- 能定义任务
- 能触发执行
- 能真正跑起来
- 能回传结构化结果
- 能形成报告
- 能被团队重复使用
但从 NexTest 当前仓库状态看,很多部分还停留在:
- 目录先铺开
- 文件先占位
- 接口名先写上
- 前后端入口先留着
这对于立项阶段当然有价值,因为它帮你把想做的东西都列出来了。
但它和“成熟可用”之间差的,恰恰不是再补几个目录,而是:
把最小可用链路真正跑通。
二、现在最明显的信号:范围很大,但真正闭合的链路很少
先看仓库的第一感觉,它会显得“很完整”:
- 有
api - 有
internal - 有
pkg - 有
cmd - 有
web - 有
model - 有
config
README 里也列了大量模块:
- API 测试
- Web 测试
- App 测试
- 报告
- 调度
- 通知
- 权限
- 环境
- 集成
但问题在于:
模块被列出来,不等于能力已经闭环。
当前仓库最明显的状态是:
- 概念覆盖面很大
- 真实可运行能力很薄
这类项目最容易给团队造成一种错觉:
- 好像框架已经很全了
- 再慢慢补实现就行
但平台类项目最怕的恰恰就是这种“先铺很大,再长期补不上核心路径”的节奏。
因为越往后,仓库会越像一个完整产品;但真正能被团队依赖的能力,可能始终只有很小一块。
三、从仓库现状看,至少有 5 个成熟度缺口已经非常明显
1. 控制面入口还没有形成真正的平台入口
从 cmd/api/main.go 看,当前服务入口很轻,真正注册出来的路由基本只有:
//login/protected/logout
这里有两个很直接的问题。
第一,平台能力本身并没有真正挂出正式 API 路由。
README 里列了很多 handler,但路由层并没有把这些能力组织成真实接口入口。
第二,认证中间件被全局挂载在 router 上,而登录路由本身也在这条链路里。
这意味着从当前代码结构判断,登录入口本身就可能先被 token 校验拦住。
这类问题说明什么?
说明系统现在还不是“一个已形成平台控制面”的状态,而更像:
- Gin 服务先起起来
- 安全和中间件先挂一遍
- 真正的业务入口还没完成闭环
2. Handler 和 Service 的语义已经开始出现“写了骨架,但还没对齐”
例如 api/handlers/api_testing.go 这个文件里,方法名和返回内容明显还是偏占位状态:
CreateAppTestUpdateAppTestDeleteAppTestListAppTests
但文件本身讲的是 API 测试。
这类现象在平台初期很常见,它暴露出来的不是命名小问题,而是更底层的一件事:
对象边界和执行路径还没有真正收稳。
因为一旦任务对象、接口对象、运行对象还没被想清楚,代码里就会出现:
- 名字借来借去
- 逻辑先占坑
- 返回先写成功
短期看没什么,长期就会很危险。
因为平台类项目一旦边界不稳,后面调度、报告、权限、环境都会被一起带歪。
3. 执行引擎还不是执行引擎,只是 worker 雏形
从 cmd/worker/main.go 看,当前 worker 更像一个示意性进程:
- 收信号
- 起 goroutine
- 循环打印
- 睡眠
这距离真正的平台执行引擎还有非常大的差距。
一个成熟可用的执行引擎,至少要回答:
- 任务从哪来
- 资源怎么分配
- 状态怎么回传
- 日志怎么流式采集
- 超时和失联怎么回收
- 失败是否允许重试
而当前仓库里,这条链路还没有形成:
- 执行协议
- 心跳机制
- 任务租约
- 结果回调
- 超时收敛
这意味着 NexTest 现在还没有最关键的一条平台生命线:
不是“能描述任务”,而是“能可信地跑任务”。
4. 报告、项目、配置等模块有目录,但很多文件还处在空壳或轻实现阶段
这次看仓库时,一个很强的信号是:
- 部分文件已经有名有位
- 但内容仍然是空文件或明显占位实现
例如:
web/src/App.vue是空的web/src/views/Home.vue、About.vue等也是空的web/package.json是空的pkg/config/config_loader.go是空的api/handlers/project.go是空的internal/reporting/generator.go是空的
这类信号说明,项目现在更像是在做:
- 模块地图铺设
而不是在做:
- 功能闭环收敛
平台项目最怕这种节奏。
因为当目录很大、文件很多时,团队会天然产生一种“进展很多”的感觉;但从可用性视角看,它可能还没有跨过第一道门槛。
5. 前端现在几乎还没有形成真正可操作的控制台
测试平台和普通后端服务不一样。
它最终会面对这几个实际问题:
- 用户怎么创建任务
- 怎么选环境
- 怎么看执行过程
- 怎么看报告和趋势
- 怎么处理失败和重试
如果前端控制台没有形成基本页面,平台在团队里的真实使用方式就会退化成:
- 直接调接口
- 直接进 Jenkins
- 直接查数据库
- 直接翻日志目录
而这恰恰是平台最不该回去的状态。
从当前仓库情况看,NexTest 前端还明显处在“占位准备阶段”,还谈不上可操作的控制台产品。
四、NexTest 现在最需要的,不是继续扩功能,而是先定义“成熟可用”的标准
很多平台项目做不成熟,不是因为人不努力,而是因为“成熟可用”这个目标太模糊。
如果没有一个更硬的判断标准,团队就很容易一直在做下面这些事:
- 再补一个模块
- 再补一组模型
- 再补一个目录
- 再补一个文档
但真正的成熟可用,至少要满足下面这些条件。
1. 一个新任务能完整走完定义到报告的链路
例如 API 回归任务至少要能做到:
- 在平台里创建
- 选择环境和参数
- 真正触发执行
- 收到结构化结果
- 生成可追溯报告
2. 平台状态和执行现场要一致
不能出现:
- 平台显示运行中
- 实际任务已经死掉
也不能出现:
- Jenkins 结束了
- 平台没有收回结果
3. 环境和权限不能只是“有模型”,而要真正进入执行链路
否则平台再大,也只是把脚本入口放到页面上。
4. 至少要有一个团队能连续使用,而不是只能演示
平台真正成熟的标准不是:
- demo 能通
而是:
- 一个团队愿意连续三周都用它,而不绕回手工流程
五、如果要把 NexTest 拉到“成熟可用”,更合适的做法是按 4 个阶段推进
第一阶段:先收 MVP,只做 API 任务闭环
这一步最重要。
不建议上来同时做:
- API
- Web
- App
- 调度
- 报告
- 通知
- 大前端控制台
这样很容易全面铺开、全面不闭环。
更合理的第一阶段应该只收一条最小链路:
- 任务定义
- 环境选择
- 执行下发
- 结果回调
- 报告沉淀
并且先只支持一种任务类型,例如:
- API 回归任务
因为如果连最简单的 API 闭环都没形成,后面引入 Web、App 只会把不成熟的结构进一步放大。
第二阶段:把执行引擎补成真正的平台引擎
这一步要补的不是更多 handler,而是下面这些基础能力:
- 执行实例状态机
- worker 心跳
- 超时回收
- 资源租约
- 结构化日志和产物回传
只有这一步补上,平台才会从“服务骨架”开始变成“执行系统”。
第三阶段:把报告、Jenkins、告警接成真正可协作的控制面
这一步不是简单接 webhook,而是要让团队能在平台里完成下面这些动作:
- 发起任务
- 看实时进度
- 看失败证据
- 区分环境失败和业务失败
- 收到少而准的告警
这一步做成之后,平台才开始真正有“协作价值”。
第四阶段:再扩 Web / App / 复杂调度
这是最后一步,不是最前一步。
因为:
- Web 自动化会引入浏览器资源和稳定性问题
- App 自动化会引入设备池、录屏、采证、回收问题
如果底层执行链路还不成熟,这两类能力只会把平台拖进更复杂的状态。
六、最小可执行实践:如果现在接手 NexTest,先改什么
如果只给一个迭代周期,优先级通常不会落在补 README,也不会先把前端页面全部搭出来。
更适合优先做下面 6 件事。
1. 先收缩范围,只保留 API 任务
把第一阶段目标写死:
- 只做 API 自动化任务闭环
其他能力先不做产品承诺。
2. 重写入口层,把正式路由和匿名路由分开
先把:
- 登录
- 健康检查
- 正式业务接口
三类入口分开,别让全局中间件先把登录自己拦死。
3. 定义执行实例状态机
至少先明确:
- pending
- queued
- running
- success
- failed
- timeout
- lost
4. 做一个真正可用的 worker 协议
先别做复杂调度,先让 worker 支持:
- 拉任务
- 回心跳
- 回日志
- 回结果
5. 报告先做结构化 JSON 和最小页面
不用一开始追求很强的前端展示,但至少要保证:
- 结果能落盘
- 结果能查询
- 失败能看到证据
6. 前端先只做 3 个页面
- 任务列表
- 执行详情
- 报告详情
这 3 个页面打通之后,再谈完整平台 UI。
七、真实案例型段落:一次“看起来已经有平台骨架”的项目,最后真正卡住的不是代码量
场景
在很多平台立项初期,团队都会很快把仓库铺得很完整:
- 有后端目录
- 有前端目录
- 有模型
- 有中间件
- 有 worker
- 有配置
看到这里时,一个自然的判断是:
- 已经起了一个很不错的平台底子
执行
但一旦真的往“让一个测试团队开始用”这个目标推进,现场马上会暴露几组问题:
- 任务入口还不完整
- 执行链路还没闭合
- 状态和结果对不上
- 前端没有形成最低可用页面
- 报告没有沉淀成结构化资产
现象
这时候最典型的现象是:
- 仓库看起来很大
- 模块名称很多
- 但真正能演示和能长期使用的能力很少
团队会越来越频繁地回到:
- 手工触发
- Jenkins 直接跑
- 查日志目录
- 群里补说明
排查
继续往下排,最后通常会发现问题不在于“写得不够多”,而在于:
- 最小闭环没有先成立
- 范围控制失败
- 用目录替代了执行链路
也就是说,项目不是缺更多模块,而是缺:
一个能被反复使用的核心路径。
修复
真正有效的修法通常不是继续扩,而是先收:
- 收任务类型
- 收前端页面
- 收执行模式
- 收状态机
- 收结果模型
等最小可用链路成立后,再逐步扩 Web、App、调度、告警和趋势分析。
八、对 NexTest 当前阶段的判断
如果只给一句判断,可以概括为:
NexTest 现在是一个有明确方向的立项仓库,但还不是一个成熟可用的测试平台。
它的问题不是没有想法,而是:
- 想覆盖的范围已经很大
- 但真正成熟的平台生命线还没有补齐
所以当前最重要的,不是继续证明它“未来可以做很多事”,而是尽快证明一件更关键的事:
它能不能先把一条最小平台闭环做成,让团队愿意真的用起来。
如果这一点做成了,后面再扩 Web、App、调度、告警、趋势,都是顺着长。
如果这一点做不成,目录再完整,最后也很容易停留在:
一个看起来很像平台、但团队还是绕开使用的仓库。