Files
EasyGoAdmin_GoFrame_EleVue/document/wiki/16_测试与质量保障.txt
T
2026-10-20 11:37:25 +08:00

104 lines
6.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================================================================================
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 条目)