# 功能测试报告_一键启停脚本与桌面入口_2026-09-19 ## 一、功能说明 1. **新增 `stop-dev.ps1`(项目根目录)**:与既有 `start-dev.ps1` 配套的一键停止脚本。 - 按「启动用的 cmd 父进程」整树结束:`cmd.exe /c mvn.cmd ... spring-boot:run`、`cmd.exe /c npm.cmd run serve`, 用 `taskkill /T /F` 连带子进程(maven java → app java;npm node → cmd → vue-cli-service node); - 兜底再按命令行特征精确匹配孤儿进程:`java.exe` 含 `TrafficAuditApplication`、`node.exe` 含 `vue-cli-service`; - 结束后校验 8090/8080 是否已释放; - 明确不碰其它 node/java 进程(如 Codex 的 `node_repl`)与用户自己开的 cmd 窗口。 2. **桌面一键入口**(工作区外,不入库): - `D:\桌面\启动交通审核系统.bat`:调用 `start-dev.ps1`(已在跑则跳过、不在跑则拉起并等待就绪),最后打开 `http://localhost:8080`; 带参数 `nobrowser` 可只启服务不弹浏览器。 - `D:\桌面\停止交通审核系统.bat`:调用 `stop-dev.ps1`。 ## 二、测试环境 | 项 | 值 | | --- | --- | | 日期 | 2026-09-19 00:4x–00:5x | | 项目 | `D:\文档\ChatGPT\traffic-audit` | | 服务 | 后端 8090(Spring Boot)、前端 8080(Vue)、MySQL 3308 | | 脚本编码 | `.ps1` = UTF-8 **with BOM**;`.bat` = **GBK(936) + CRLF**,首行 `chcp 936` | ## 三、用例表 | 编号 | 用例 | 输入/操作 | 预期 | 实际 | 结论 | | --- | --- | --- | --- | --- | --- | | T01 | 已在运行时启动(正向·幂等) | 服务在跑时执行 `启动交通审核系统.bat nobrowser` | 跳过启动,不新建重复进程 | 打印「后端已在运行(8090 有监听),跳过启动。」「前端已在运行(8080 有监听),跳过启动。」,随后校验「后端: OK,已就绪」「前端: OK,已就绪」 | ✅ 通过 | | T02 | 未运行时启动(正向) | 服务已停时执行 `启动交通审核系统.bat nobrowser` | 拉起前后端并等待就绪 | 新建后端链(cmd PID 8964 → java → app java)与前端链(cmd PID 26024 → node → cmd → node);`backend.log` 出现 `Tomcat started on port(s): 8090` 与 `Started TrafficAuditApplication`(00:48:33) | ✅ 通过 | | T03 | 停止服务(正向) | 执行 `停止交通审核系统.bat` | 两个进程树被结束,端口释放 | 后端 5 个进程、前端 5 个进程被结束;打印「端口 8090:已释放」「端口 8080:已释放」 | ✅ 通过 | | T04 | 启停闭环可用性(正向) | 停 → 启 之后访问页面接口 | 前端 8080、后端接口均正常 | 前端 `HTTP 200`;后端 `/api/import/batches` `HTTP 200`(能取到最近「市州单表批量导入(物流(物流园区)/8月)」批次) | ✅ 通过 | | T05 | 不误杀(负向) | 执行停止脚本期间观察 Codex 自身 | Codex 内核 `node_repl` 与其它 cmd 窗口不受影响 | 停止脚本仍在正常运行(本会话工具调用未中断),全程未匹配 `node_repl` | ✅ 通过 | ## 四、发现的问题与处置 | 编号 | 问题 | 根因 | 处置 | | --- | --- | --- | --- | | P01 | 第一版 `.bat` 运行时大量报 `'xx' is not recognized as an internal or external command`,且命令行被截断(如 `'xecutionPolicy'`) | 批处理文件必须使用 **CRLF** 换行,首版写成了 LF,cmd 逐行解析错位 | 改为按行数组 `-join "\`r\`n"` 写出,复测正常 | | P02 | 首版 `stop-dev.ps1` 报 `UnexpectedToken`/「字符串缺少终止符」,中文提示被读成乱码 | Windows PowerShell 5.1 读取**无 BOM** 的 UTF-8 脚本时按 ANSI(936) 解释,多字节序列被打断 | 改写为 **UTF-8 with BOM**(与既有 `start-dev.ps1` 一致),复测正常 | | P03 | 停止脚本按名称模糊停进程有误杀风险 | —— | 只按「启动用的 cmd 父进程 + 精确命令行特征」匹配,`taskkill /T` 结束整树,不按进程名批量杀 | ## 五、遗留与说明 1. 两个桌面 `.bat` 位于工作区外(`D:\桌面`),**不入 git**;`stop-dev.ps1` 已入库,与 `start-dev.ps1` 配套。 2. 服务仍以 `cmd /c ... > log` 方式常驻:**关掉启动窗口会带走服务**(本次报错即由此而来)。日常用桌面「启动」入口双击即可恢复。 3. 若端口未完全释放(极端情况),停止脚本会提示「仍在监听,请重跑一次」。 ## 六、结论 5 条用例全部通过:启动脚本幂等跳过、停止脚本按 PID 整树结束并释放 8090/8080、 启停闭环后页面与接口均正常,且不影响 Codex 自身进程。两个编码问题(LF 换行、缺 BOM)已定位并修复复测。