测试平台-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 这个文件里,方法名和返回内容明显还是偏占位状态:

  • CreateAppTest
  • UpdateAppTest
  • DeleteAppTest
  • ListAppTests

但文件本身讲的是 API 测试。

这类现象在平台初期很常见,它暴露出来的不是命名小问题,而是更底层的一件事:

对象边界和执行路径还没有真正收稳。

因为一旦任务对象、接口对象、运行对象还没被想清楚,代码里就会出现:

  • 名字借来借去
  • 逻辑先占坑
  • 返回先写成功

短期看没什么,长期就会很危险。
因为平台类项目一旦边界不稳,后面调度、报告、权限、环境都会被一起带歪。

3. 执行引擎还不是执行引擎,只是 worker 雏形

cmd/worker/main.go 看,当前 worker 更像一个示意性进程:

  • 收信号
  • 起 goroutine
  • 循环打印
  • 睡眠

这距离真正的平台执行引擎还有非常大的差距。

一个成熟可用的执行引擎,至少要回答:

  • 任务从哪来
  • 资源怎么分配
  • 状态怎么回传
  • 日志怎么流式采集
  • 超时和失联怎么回收
  • 失败是否允许重试

而当前仓库里,这条链路还没有形成:

  • 执行协议
  • 心跳机制
  • 任务租约
  • 结果回调
  • 超时收敛

这意味着 NexTest 现在还没有最关键的一条平台生命线:

不是“能描述任务”,而是“能可信地跑任务”。

4. 报告、项目、配置等模块有目录,但很多文件还处在空壳或轻实现阶段

这次看仓库时,一个很强的信号是:

  • 部分文件已经有名有位
  • 但内容仍然是空文件或明显占位实现

例如:

  • web/src/App.vue 是空的
  • web/src/views/Home.vueAbout.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、调度、告警、趋势,都是顺着长。
如果这一点做不成,目录再完整,最后也很容易停留在:

一个看起来很像平台、但团队还是绕开使用的仓库。