10. 对SKILL进行一次全新尝试,改为框架+细节方式的实践及验证:二次联调(3)——jet-user-web流程搭建与日志排查
上一期把前端 jet-admin-web 的问题过了一遍,这期转到另一个前端 jet-user-web。相比 admin-web 那种「入口删了连权限一起删」的粗放错误,user-web 这边更多是流程性的磨炼:测试用例脚本写了一遍又一遍、操作日志死活存不进去、SQL 和删目录的老毛病反复发作。
这套联调本质是在打一场持久战:后端我已经启动,AI 只能测不能编译;所有流程要一条条走通、闭环记录到测试脚本;日志、权限、重复 bug 这些重复过多次的问题,也一次次冒出来。每一处都逼着我把文档和 SKILL 翻出来对照,才算稍有进展。
这篇把 jet-user-web 前半段的联调过程记录下来:从测试用例脚本的准备、走通流程,到运行方式与冒烟,再到操作日志为空的攻坚,重点看 AI 在流程测试和日志落库上的表现。
一、测试用例脚本的准备
这一轮先从测试用例脚本入手,把要覆盖的流程、角色和用户先理清楚,为后面的逐条闭环测试打底。
jet-user-web (为主)jet-admin-web(为附)
前面说无效的密码应该是2a,2b的问题,这个修改后端代码。
前面专门写过一个测试用例脚本.md
现在要细化,每一条都要完事闭环。
比如说,入库某部件,审批等流程,最后出库到哪里。如果有告警也是要的。一条一条的写。
全部测试可能也是麻烦。先做基础准备工作。
1、各种用户搞齐,每个人角色不同登录的菜单肯定也不同。这一块要搞好,每个角色至少2个用户,各种不同角色要建齐。每个人登录等任何操作都要有记录在测试用例脚本中。前面说过这个脚本就是最终用户手册,当然比用户手册要丰富得多。
2、先走通一两个流程,就以入库这个吧。
入库某部件,审批等流程,最后出库到哪里。如果有告警也是要的。一条一条的写。
结果是:
1、优化测试用例脚本
2、前端代码有问题要优化
3、后端代码问题先列出来,如果不改就进行不下去,则停止,告诉我,修改后再进行。
a
二、走通流程:缺什么补什么
脚本的思路定下后,开始真正走通入库流程,AI 却动不动就想停下来问,只能一遍遍压着它缺什么补什么。
操,你他妈的不是说了wms具体的我不知道,你按网上或正常逻辑添加上。不要再停止了。
只要是缺的就补上,不用再一步一步的问了。
虽然前面没说要做的,但走不通肯定要补上的。
走不通的就补上,不用管前面说的流程。只要是缺的都补上。但要严格按文档和SKILL来,别随ai瞎飘。
后端已运行,进行下一步
先停止
我启动了后端 ,先测试验证再修改
我运行的后端,你编译是不行的,后端问题只能先提出来。
三、运行方式与冒烟流程
运行方式固定下来后,先跑一轮运行时冒烟做终验,确认改了后端后怎么重新打包、复制、重启才顺。
补充一点记录memory的知识
E:\jet-wms\jet-wms\doc\run
autorun.cmd 可以运行网关等三个jar。如果你调试源码,则将target中的jar复制到此处,然后关闭,运行。
下次修改后端后,package后,复制到上面目录。
我已启动,跑运行时冒烟(建 In 草稿→审核→查 stock_log 是否增入库流水;Issue 发料→查出库流水;Return 验收→查入库流水)做终验。
不是告诉你了,可以自己重启吗?
启动好了
后端代码缺失功能都编好了吗
测试用例脚本一定要编写好,可行的。因为以后我会逐条按那个执行的。
我已启动后端,接着前面任务
四、操作日志为空的问题
这一章正式碰最头疼的一块:操作日志死活为空,前后端反复重启排查,绕了很久才抓到根因。
为什么操作日志还是空的?
为什么保存没有生成操作日志?还是你通过sql插入数据的?不应该啊,也做了新增,删除操作吧。这个查一下。
@RecordOperLog(...) 保存删除都是有记录的,查一下为什么数据库里面也是空的。
菜单管理 怎么没有按钮的显示了
又没有启动好是吧,
我重启了
你要的是将编译的 target 中的 jar文件复制到 当前目录 jet-wms\doc\run 下,然后关闭重启。
我运行好了后端,接着测试吧
重启了,接着测试,先将前面任务完成就可以了。
要不这样,你直接调试后端代码,通过接口操作,不用界面,将operlog调通再说
4.1 直接运行源码定位
先放下界面,改为直接运行源码,目标就一个:让 jet-oper-log 里有数据。
你不用复制到doc/run,直接运行源码,最终结果是jet-oper-log有数据。
我已重启后端
1、测试一下 operlog
2、前面还有没有完成的任务
List<OperLog> buffer = new ArrayList<>(BATCH);
while (!Thread.currentThread().isInterrupted()) {
String json;
try {
// 阻塞 1s 取一条(rightPop 带超时,避免连接被长阻塞)
json = redisTemplate.opsForList().rightPop(KEY, Duration.ofSeconds(1));
try {
OperLog entity = mapper.readValue(json, OperLog.class);
fillAudit(entity);
buffer.add(entity);
if (buffer.size() >= BATCH) {
flushWithRetry(buffer);
}
} catch (Exception e) {
// 单条解析/校验失败:重新投递回队列头部,保证不丢、稍后重试
log.warn("oper-log 解析失败,重新投递: {}", e.getMessage());
reEnqueue(json);
}
保存日志怎么能这样写,不可以监听事件吗?还循环,循你妈呀。
并且不要批量保存,或者批量保存要增加个时间,比如,超过2秒,则不管batch是否满都必须保存
日志的问题,最终还是靠我自己来修改,如果不是我来查找,可能使用200积分也不一定能解决。AI写程序是严谨,但该严谨的地方却不全局看代码。什么意思?就是AI知道,一定要给Id赋值,但没想到,代码里面save时却是通过id的null来判断是新增还是修改的。唉。全局代码量才是王道啊。
4.2 根因:强行给 id 赋值导致更新而非插入
定位到最后,问题出在我说的这个细节:给 id 强赋值,把插入变成了更新。
问题出在强行给id赋值,导致保存时是更新而不是插入
if (e.getId() == null) {
e.setId(Sid.nextShort());
} 操你妈,问题出在这,你妈的不看源码吗?我已修改,操
五、重复错误:clientType 与 status 为空
日志刚有眉目,重复错误又冒出来了:说过不要的 clientType,和不能为空的 status,原样又来一遍。
操你妈,重复错误要多少次啊,
全部是以前的重复错误。说过登录不要clientType
太多,改过的bug又出现了。操
### SQL: INSERT INTO jet_dept ( id,created_by,created_time,del_flag,description,extro,leader,level,name,parent_id,phone,remark,sort,status,updated_by,updated_time ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'status' cannot be null
; Column 'status' cannot be null
这个问题,应该在数据库中处理一下,同样的问题一直出现 ,还有前面登录clientType问题,一次性搞定啊猪。操
六、重写测试用例脚本
日志之外,测试用例脚本也得按照规范重写,交互过程暴露了 AI 死记模板、连示例名字都不带改的毛病。
重写测试用例脚本
jet-wms 业务流程黑盒测试用例脚本
你的这个写的不行要求:
1、第一章,数据准备
只要执行04 -test 就可以了,所有的用户,角色都自动导入(可以有说明,但不是主要内容,前面说每个角色二个用户,可以列个表格)
最终用户列表如下:(这些数据要一次性初始化好,还有用户手机号是全局唯一要使用删除还能插入的那个主键方式)
人员 手机号 单位(现在是部门,这是举例) 说明 (真实的是我们自己定的标题)
胡勇 13855551111 乌什二期 电场 电场人员
何斌 13855555555 乌什二期 电场 乌什二期审批人员
...
2、从第二章开始
2.1 每一条都是一个大流程,里面有分支
2.1.1 完全正确流程
2.1.2 (这个2.1.2,3,4,可能多个,是不同流程的,如2.1.2 是获取不到数据,抛出异常等)
2.2
2.3
3、倒数第二章,补充说明
4、最后一章:小结
操你妈,我给的是实例,不是叫你全部抄啊,操
乌什二期电场电场人员(现场 / 查询)
还都用这个,我不是写了个单位/部门吗?这些叫你按真实的部门来。
前面我是给个实例,他妈的,竟然连名字都不改。
操你妈,不是拣配员(本人)吗?难道没有自己的部门?仓管员(本部门)没有部门,操
https://www.jiandaoyun.com/blog/article/1170914/ 这里有完事的部门
七、小结
jet-user-web 前半段的联调,最耗费心力的是日志落库和重复错误:
- 流程要能闭环:把入库、审批、出库、告警一条条写进测试用例脚本,还要求这脚本能当最终用户手册用,AI 却常把示例当真抄、部门名字都不改。
- 走通要缺什么补什么:后端我已启动,AI 只能测不能编译;缺的就直接补上,但必须严格按文档和 SKILL 来。
- 操作日志的问题只能靠我自己排查:AI 写代码够严谨,但看不到全局——强行给 id 赋值,导致 save 按 id 判空时走了更新而不是插入,日志就存不进去了。
- 直接运行源码定位根因:最终要么靠接口操作、要么靠代码审阅逐行找,才能把 oper-log 调通。
下一篇继续处理 jet-user-web 后半段的 SQL 与数据库问题,再转入 screen 大屏和全量运行收尾。