104 lines
6.7 KiB
Plaintext
104 lines
6.7 KiB
Plaintext
================================================================================
|
||
EasyGoAdmin 后端开发者文档 · 16 测试与质量保障
|
||
================================================================================
|
||
|
||
--------------------------------------------------------------------------------
|
||
1. 现状(封板时点,如实说明)
|
||
--------------------------------------------------------------------------------
|
||
仓库当前不含 *_test.go 单元/集成测试文件(find 全仓为 0)。
|
||
质量保障依赖以下四层手段;测试补齐方向见第 5 节(待补齐建议,未实施)。
|
||
|
||
--------------------------------------------------------------------------------
|
||
2. 静态质量门禁(每次提交前必跑)
|
||
--------------------------------------------------------------------------------
|
||
go build ./... 编译(生成器产物、service 接口同步的第一道闸)
|
||
go vet ./... 静态分析
|
||
gofmt -l . 格式检查(无输出=通过;生成器产物已统一 gofmt)
|
||
Windows 无 make 时直接执行上述命令;有 make 时:
|
||
make vet / make fmt / make build / make test(test 目前为空跑)
|
||
|
||
--------------------------------------------------------------------------------
|
||
3. 接口响应黄金样本回归(hack/golden 体系)
|
||
--------------------------------------------------------------------------------
|
||
3.1 目录与用途
|
||
hack/golden/ 34 个响应 JSON —— 当前回归基线(比对基准)
|
||
hack/after_all/ 31 个响应 JSON —— 全量接口终态快照(覆盖各域 page/list/
|
||
detail/user_detail 等,含 tag_* 等扩展样本)
|
||
hack/before_c/ 12 个 —— c 轮改造前快照(对照组)
|
||
hack/after_b/ 5 个 —— b 轮改造后样本
|
||
hack/after_c/ 12 个 —— c 轮改造后样本
|
||
hack/after/ 12 个 —— 早期轮次样本
|
||
命名规律:{模块}_{动作}.json(如 user_page.json、level_list.json、
|
||
city_list_pc.json 带场景后缀)。
|
||
|
||
3.2 比对流程(规范)
|
||
1) 录制/回放均须带录制参数对齐:分页接口固定 pageSize=3 等小值,
|
||
否则 total/list 长度随数据漂移造成大量伪 DIFF。
|
||
2) 请求以管理员身份(admin)发起,保证数据集稳定;筛选条件固定。
|
||
3) DIFF 归因三分类后再决定处理:
|
||
A. 预期变更(本次改动引起)→ 更新对应 golden 样本并说明
|
||
B. 动态值漂移(id 递增、时间戳、consume_time、ip/location)→
|
||
归一化后比较,不更新
|
||
C. 非预期回归 → 修代码,禁止改样本
|
||
4) 样本与代码同库提交,review 时随 diff 一并审阅。
|
||
|
||
--------------------------------------------------------------------------------
|
||
4. 运行期可观测性(替代部分测试的兜底)
|
||
--------------------------------------------------------------------------------
|
||
启动自检:cmd/wireDependencies 校验 IdentityLoader/TenantLoader/LogSink
|
||
接线(缺失启动 Warning);cache.Init 探测 Redis;调度器 DaemonInit
|
||
统计挂载数。
|
||
运行探针:
|
||
GET /api/health 存活(免登录、不限流)
|
||
GET /api/server/info 运行时/磁盘/DB/缓存/调度器健康(mounted≥expected)
|
||
GET /api/cache/info 缓存模式与命中率
|
||
GET /api/job/daemonStatus 调度条目
|
||
GET /api.json 路由全集(与 gmeta 注解一致性自查)
|
||
日志信号:
|
||
启动期依赖缺失 Warning;Redis 降级 Warning;操作日志通道满丢弃计数 Warning;
|
||
调度器任务挂载失败 Warning;panic 堆栈 Error(Response recover)。
|
||
|
||
--------------------------------------------------------------------------------
|
||
5. 测试补齐建议(当前未实施,给出优先级)
|
||
--------------------------------------------------------------------------------
|
||
P0 hooks 集成测试(sqlite 内存库):
|
||
Insert 盖章(审计列/租户填充/平台默认租户)、Update 盖章、
|
||
Delete 软删改写、ApplyCtx 过滤(del_flag + 租户 IN)。
|
||
P0 ModuleSpec 流水线测试:Like/Eq/Keyword 零值跳过、Keyword OR 参数化、
|
||
树形挂根、FillTextFields 反射计划、唯一规则 Group 语义。
|
||
P1 migrate 渲染器单测:五方言 Column/CreateTable/CreateIndex 金样对比
|
||
(纯字符串函数,无需数据库);normalizeType/parsePgIndexCols 解析用例。
|
||
P1 utility 单测:crypto(bcrypt 往返)、excel(ReadSheet/WriteSheet tmpfs)、
|
||
upload(SaveFromTemp 幂等与外站跳过)、captcha.Verify 一次性、
|
||
ua/ip2region 解析。
|
||
P2 auth 集成:登录→refresh 轮换→黑名单失效→强退双拉黑闭环(需 Redis 或
|
||
内存降级模式)。
|
||
建议目录:internal/**/**_test.go 与包同置;sqlite 用例通过
|
||
database.default.type=sqlite 临时配置注入;MySQL 集成用例以环境变量门控
|
||
(无环境时 t.Skip)。
|
||
|
||
--------------------------------------------------------------------------------
|
||
6. 变更回归最小集(改动映射到必查项)
|
||
--------------------------------------------------------------------------------
|
||
改动类型 最小回归
|
||
------------------------ --------------------------------------------------
|
||
中间件/认证 login→带token请求→401路径→refresh→logout 黑名单
|
||
权限/菜单 getMenus/getUser/403 接口/角色保存后即时生效
|
||
某模块 CRUD 该模块 page/detail golden 比对 + 唯一冲突路径
|
||
hooks/dao 相邻两租户数据隔离抽查 + 软删后 list 不可见
|
||
生成器 -preview 清单核对 → 生成 → go build → 新路由 200
|
||
调度/任务 daemonStatus 挂载数 + 手动 runOnce + job/log 状态
|
||
迁移器 行数校验 PASS + 随机抽行值比对 + 序列插入测试
|
||
配置 启动日志 + health + 对应功能开关路径
|
||
|
||
--------------------------------------------------------------------------------
|
||
7. 发布前检查清单
|
||
--------------------------------------------------------------------------------
|
||
1) go build ./... && go vet ./... && gofmt -l .(无输出)
|
||
2) 关键接口黄金样本回归(带录制参数)
|
||
3) 配置核对:jwt.secret / captcha.bypassCode 空 / app.demo=false /
|
||
app.errorMsg=false / file.uploadDir 与 domainUrl / rateLimit 生产值
|
||
4) /api/health、/api/server/info(调度器 mounted=expected、缓存 mode=redis)
|
||
5) 登录→菜单加载→任一 CRUD 冒烟;操作日志页有新记录
|
||
6) LogClean/CleanTemp 两个内置调度已挂载(daemonStatus/gcron 条目)
|