CosmoEdge 测试范围与测试用例说明书
本篇文档旨在为 QA 测试团队提供 CosmoEdge 边缘 AI 引擎 的测试指南。文档涵盖了系统的测试范围定义、测试环境准备、核心功能模块的详细测试用例设计、性能压力测试以及异常可靠性测试方案。
一、 测试范围规划 (Test Scope)
测试工作分为 核心功能测试、专项测试(性能与压力)、可靠性与自愈测试、平台兼容性测试 以及 集成测试 五大维度。
1.1 核心功能测试范围
- 用户认证与安全:用户登录、密码修改、Token(
mtk)鉴权机制,开发模式(跳过 SN 校验)与受限模式(SN 校验失败仅启动基础 HTTP 服务)的功能状态验证。 - 视频接入与媒体处理:离线视频上传播放、RTSP 网络视频流拉取、USB 摄像头识别;VPU 硬件解码、CPU 软解码;实时帧取图验证。
- 模型仓库管理:ONNX(x86)与 bmodel(Sophon)模型上传、元数据配置、版本切换、模型热加载与热替换流程。
- 可视化算法编排:基于 Web 端可视化画布(Vue Flow)的节点拖拽、连线(解码 -> 检测 -> 跟踪 -> 分类 -> 灵敏度过滤 -> 告警上报)、属性参数编辑、编排规则导出与导入。
- 场景任务配置:检测区域(ROI,多达 4 个六边形区域)绘制、运行调度策略配置、核心算法关键参数(如告警间隔、最大告警次数、静止目标去重、灵敏度阈值、最小过滤尺寸等)的动态生效。
- 实时分析与 OSD 渲染:WebRTC 实时画面预览(SRS 6.0 级联)、算法层级 OSD 叠加(预测框、标签置信度、区域边界、计数器)、耗时统计面板(Decode / Infer / OSD / Encode 延迟统计)。
- 端侧大模型(VLM & DINO):
- VLM(语言视觉大模型):提示词(Prompt)解析、取帧频率配置、ROI 裁剪、YES/NO/多分类结果推理稳定性、批量图片推理分析(PIC 任务)。
- DINO(开放词表检测):英文点分词(如
person.garbage)解析、零样本目标检测定位、OSD 检测框实时渲染。
- 事件中心与告警管理:告警截图抓拍与留存、严重等级分类、历史事件按通道/算法/时间过滤查询、告警记录 CSV 导出。
- 底库管理:人脸底库(图片上传、特征提取)、人体特征库、物品底库的增删改查。
- 语音与音频控制:音频文件上传、联动音柱设备广播、声光报警测试。
1.2 专项测试范围
- 并发性能测试:在 Sophon BM1688 边缘设备上进行多路(最高 16 路)CV 算法并发分析,共享解码流的多场景任务并发调度。
- 稳定性与内存泄露测试:72小时以上连续长周期视频压力测试(针对 200 个以上不同视频样本),监控内存、CPU、NPU 温度和利用率指标。
- 推理延迟与吞吐:记录从视频帧输入到 OSD 叠加/事件生成的 E2E 延迟,覆盖常规 CV 算法(YOLO)、DINO、VLM 等不同推理链路。
1.3 可靠性与自愈测试范围
- 看门狗自愈:模拟核心推理进程被 Kill 后系统自恢复拉起。
- 存储清理保护:磁盘空间满额时,历史图片/视频/日志的自动循环清理覆盖。
- 断网与恢复:RTSP 断线自动重连、MQTT/Webhook 发送失败时的重试与缓存策略。
二、 测试环境与验证准备
2.1 测试平台矩阵
| 平台类型 | 处理器 / 芯片 | 操作系统 / 运行时环境 | 目标用途 |
|---|---|---|---|
| 边缘生产端 | Sophon BM1688 NPU/VPU | Linux (aarch64) SDK V23.10 | 生产级部署,NPU 加速,高并发多路视频分析 |
| 开发测试端 | Intel/AMD x86_64 | Ubuntu 22.04 LTS (Docker) | 开源/集成级开发调试,ONNX Runtime (CPU) |
| 评估测试端 | Intel/AMD x86_64 | Windows 10/11 (Docker Compose) | 本地可视化评估,轻量调试 |
2.2 测试物料准备
- 测试视频源:
- 1080P/720P H.264/H.265 RTSP 模拟流(可使用 VLC 或 FFmpeg 循环推流)。
- 工地人员戴/不戴安全帽、离岗脱岗、消防柜开闭等场景的测试 MP4 文件。
- 大模型测试样本:
- 准备至少 10 张包含不同漂浮物的河道图片(正样本),以及 10 张干净的河道图片(负样本),用于 VLM 准确性回归。
- 底库图像:
- 用于人脸和人体检索验证的标准 JPG 图像。
三、 详细测试用例设计 (Test Cases)
3.1 用户认证与受限模式 (TC-AUTH)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-AUTH-001 | 用户认证 | 默认账号成功登录 | 系统正常启动,前端控制台就绪 | 1. 访问 http://localhost:80802. 输入默认账号 admin/admin3. 点击登录 | 1. 登录成功,跳转至系统仪表盘 2. 接口返回 mtk token,并存入 Cookie/LocalStorage |
| TC-AUTH-002 | 用户认证 | Token 鉴权失败与重定向 | 用户未登录,或持过期 Token | 1. 清除浏览器本地 mtk Token2. 尝试直接访问 /gtw/cwai/System/info 接口或内部页面 | 1. 接口返回 HTTP 401 或业务错误码 2. 前端页面拦截并重定向到登录页 |
| TC-AUTH-003 | 设备授权 | 设备 SN 校验与受限模式 | 系统使用非 COSMO_DEV_MODE 编译,且设备 SN 校验失败 | 1. 启动未授权设备的引擎程序 2. 访问系统 Web 页面 | 1. 系统进入 受限模式 2. 只启动基础状态及配置接口,所有推理服务和场景任务不可配置或置灰 |
| TC-AUTH-004 | 设备授权 | 开发模式豁免 SN 校验 | 系统使用 COSMO_DEV_MODE 编译 | 1. 在无授权文件环境下启动引擎 2. 访问系统功能页面 | 1. 系统完全正常启动,豁免 SN 校验 2. 场景任务与算法编排均可正常运行 |
3.2 视频接入与摄像头管理 (TC-CAM)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-CAM-001 | 视频接入 | 添加离线视频通道 | 准备好测试用 MP4 视频 | 1. 进入“视频接入”页面,点击“添加” 2. 接入类型选择“离线视频”,填写名称,上传 MP4 文件并保存 | 1. 保存成功,列表显示该通道 2. 状态为“在线”,能显示取图缩略图 |
| TC-CAM-002 | 视频接入 | 添加 RTSP 网络摄像机 | 可用的 RTSP 视频流地址已就绪 | 1. 添加通道,接入类型选择“RTSP” 2. 输入 RTSP 地址(如 rtsp://admin:123@ip:port)并保存 | 1. 保存成功 2. 系统成功建立 RTSP 链接并解码,通道状态正常 |
| TC-CAM-003 | 视频接入 | RTSP 视频源断线重连 | 通道正在正常解码分析中 | 1. 手动中断 RTSP 网络流(或关闭模拟推流源)持续 30 秒 2. 重新启动推流源,观察系统行为 | 1. 断开时,通道显示“离线”状态,任务暂停 2. 网络恢复后,系统自动重连解码,任务无缝恢复,无崩溃 |
3.3 模型仓库管理 (TC-MOD)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-MOD-001 | 模型管理 | 模型上传与格式校验 | 准备好 ONNX/bmodel 格式文件 | 1. 进入“模型管理”页面,点击“上传模型” 2. 选择对应的模型文件,配置元数据(框架类别、输入尺寸),提交 | 1. 上传成功,系统后台解析模型 Header 信息无误 2. 模型列表中出现该模型,状态可用 |
| TC-MOD-002 | 模型管理 | 模型热替换与版本管理 | 同一通道绑定了正在运行的场景任务 | 1. 将运行任务关联的模型版本从 v1.0 切换为 v2.0 2. 保存任务配置,观察实时画面 | 1. 推理引擎动态卸载旧模型并加载新模型,无需重启 cosmo-engine 进程 2. 切换过程无漏帧或画面长时间卡死 |
3.4 可视化算法编排 (TC-FLOW)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-FLOW-001 | 算法编排 | 编排规则有效性验证 | 可视化编排设计页面就绪 | 1. 拖入两个冲突的节点(例如将“人脸库”与“离岗检测”杂乱连接) 2. 尝试点击保存 | 1. 前端/后端规则校验器拦截并报错,提示组件类型不匹配或连线逻辑错误 |
| TC-FLOW-002 | 算法编排 | 组合式算法编排创建与导出 | 想要创建一个“未戴安全帽”流水线 | 1. 拖拽组件:解码 -> 目标检测 -> 目标跟踪 -> 安全帽分类 -> 告警上报 2. 配置各原子节点参数并保存 3. 点击“导出编排” | 1. 保存成功,算法服务列表新增自定义算法 2. 导出生成的 JSON 编排配置文件格式完整正确 |
3.5 场景任务与规则配置 (TC-TASK)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-TASK-001 | 场景任务 | 检测区域 (ROI) 绘制与生效 | 工地入口通道已分配“未戴安全帽”算法 | 1. 进入场景任务配置,点击“新增区域”,绘制局部六边形 ROI 2. 观察实时画面中,非 ROI 区域内的未戴帽人员是否告警 | 1. ROI 区域外的未戴帽人员被忽略,不进行推理分类 2. 只有 ROI 内的违规行为触发告警 |
| TC-TASK-002 | 场景任务 | 告警时间间隔与去重控制 | 任务参数配置页就绪 | 1. 将“告警时间间隔”修改为 10 秒并保存 2. 持续观察同一个未戴帽人员,记录告警频次 3. 开启“静止目标去重”并保存,观察海报等固定物体 | 1. 10 秒后触发第二次告警(每 10 秒一次) 2. 开启去重后,画面中静止不动的干扰目标不再重复产生告警 |
| TC-TASK-003 | 场景任务 | 时序阈值逻辑(离岗检测) | 通道分配“离岗检测”算法 | 1. 在参数中设置“离岗时间”为 30 秒,“最少在岗人数”为 1 人 2. 模拟岗位人员离开,计时 40 秒 3. 模拟人员在 20 秒时短暂返回后再次离开 | 1. 离开满 30 秒时触发离岗告警 2. 短暂返回后,时序判定计时清零,不触发告警,直至重新离开满 30 秒 |
3.6 实时分析与 OSD 渲染 (TC-LIVE)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-LIVE-001 | 实时展示 | 实时 WebRTC 画面拉流与预览 | 场景任务正处于运行状态 | 1. 进入控制台“实时展示”页面 2. 选择对应通道,开启 WebRTC 流预览 | 1. 视频流画面流畅播放,端到端拉流延迟(含 SRS/WebRTC 传输)低于 500ms 2. 控制台右上角实时叠加告警闪烁弹窗 |
| TC-LIVE-002 | 实时展示 | 算法 OSD 叠加与调试信息展示 | 算法处于分析状态 | 1. 在画面控制栏,勾选对应算法的 OSD 叠加 2. 开启“调试视图”开关 | 1. 视频画面的违规目标上正确框选并标注了类别标签和置信度 2. 调试视图展示原始跟踪 ID、分类概率以及左上角的 Pipeline 编排耗时统计 |
3.7 VLM 与 DINO 大模型测试 (TC-LLM)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-LLM-001 | VLM 分析 | VLM 文本提示词(Prompt)生效 | “河道漂浮物识别”算法使用 VLM 节点 | 1. 在大模型参数配置中,将 Prompt 设为:“画面中是否有落叶或垃圾?” 2. 设定“取帧频率”为 0.2(每5秒分析一帧) 3. 播放漂浮物视频流 | 1. 引擎每 5 秒截取一帧并调用 VLM 推理 2. 画面中有漂浮物时,事件面板输出 YES3. 耗时统计显示单帧推理耗时(通常在 1.5 - 3.5 秒之间) |
| TC-LLM-002 | VLM 分析 | VLM 批量图片离线推理 (PIC) | 创建了“图片分析”数据源类型的 VLM 任务 | 1. 进入“图片推理”页面,上传多张正负样本图片 2. 点击“开始分析”,等待推理结束 | 1. 批量分析执行顺利,无并发崩溃或内存耗尽 2. 能够正确识别有无对应状态,置信度输出正常 |
| TC-LLM-003 | DINO 分析 | DINO 开放词表目标定位 | 通道分配了 DINO 类算法 | 1. 编排提示词中配置 "garbage.person"2. 播放有行人和垃圾的视频流 | 1. 系统能够定位到非固定类别的“垃圾”和“人” 2. OSD 成功叠加检测框,并在告警中心生成对应的目标结构化数据 |
3.8 告警事件与推送集成 (TC-ALARM)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-ALARM-001 | 事件中心 | 告警数据查询与 CSV 导出 | 系统已产生一定量的历史告警 | 1. 访问“事件中心 -> 检测/分析”页面 2. 组合筛选:选择指定通道、安全帽算法、今天 3. 点击“数据导出” | 1. 列表能精确过滤出符合条件的告警数据 2. CSV 文件正常下载,内容包含通道名、算法、告警时间、逻辑结果、截图路径,无乱码 |
| TC-ALARM-002 | 告警推送 | MQTT 结构化数据推送 | MQTT 代理服务已就绪,并在系统配置中填好 | 1. 启动场景任务,触发一次“未戴安全帽”告警 2. 监听对应的 MQTT topic(设备→平台上报走 /d2p/aibox,详见 MQTT 接入参考) | 1. MQTT 客户端实时收到结构化 JSON 消息 2. 消息内容符合 MsgSendHead 及 ChinaMobile 兼容格式,包含图片 Base64/路径及事件明细 |
| TC-ALARM-003 | 告警推送 | HTTP Webhook 事件推送 | 配置好 Webhook URL(可使用内置的测试推送服务) | 1. 触发系统告警 2. 检查 Webhook 接收端接收到的 HTTP POST 请求 | 1. 接收端成功收到 JSON 数据包,状态码 200 响应 2. 数据包内包含告警事件 ID、截图 URL、报警判定状态等 |
3.9 系统管理与异常自愈 (TC-SYS)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-SYS-001 | 系统管理 | 网络与连通性配置 | 网络配置页面就绪 | 1. 更改网卡 IP 地址或 DNS 配置 2. 点击“网络连通性测试”,输入外网地址或代理 | 1. 配置成功修改并应用到系统底层文件 2. 连通性测试能准确反馈网络质量与 Ping 延迟 |
| TC-SYS-002 | 故障自愈 | 核心推理进程崩溃恢复(看门狗) | 任务正在运行 | 1. 在后台终端,强行 Kill 掉主力推理进程 cosmo-engine | 1. Watchdog 服务侦测到进程不存在 2. 在设定时间(如 10 秒)内自动重新拉起引擎并恢复先前的运行任务 |
| TC-SYS-003 | 存储保护 | 磁盘满额自动清理 | 配置了磁盘存储上限(如 90%) | 1. 模拟磁盘空间达到上限(可填充大文件或调低上限阈值) 2. 触发新告警产生截图 | 1. 系统成功触发清理机制,自动删减最老的一批告警抓拍图 2. 新告警截图正常保存,系统不报“磁盘空间不足”错误 |
3.10 性能压力测试用例 (TC-PERF)
| 用例编号 | 测试模块 | 测试标题 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|
| TC-PERF-001 | 性能测试 | 16路并发 CV 推理压力测试 | Sophon BM1688 设备,多路视频流就绪 | 1. 开启 16 路 H.264 视频流通道接入 2. 对 16 路视频全部绑定常规 YOLOv8n 检测与追踪算法 3. 开启 OSD 渲染与 WebRTC 推流 | 1. 16 路画面稳定运行,FPS 达到预期(如 3 FPS/路) 2. 单帧 Decode→OSD→Encode 流水线延迟(不含网络传输)控制在 32-68ms 3. CPU、内存和 NPU 利用率与温度在安全范围,无死机 |
| TC-PERF-002 | 性能测试 | 72小时稳定性与泄露监控 | 16路全负荷开启 | 1. 保持系统高负载状态持续运行 72 小时 2. 编写脚本每半小时记录 cosmo-engine 进程的虚拟内存与物理内存消耗(Resident Set Size) | 1. 运行 72 小时无系统崩溃或重启 2. 内存占用曲线平缓,不存在持续向上发散的内存泄露迹象 |
四、 测试用例执行与测试报告产出要求
4.1 质量门禁要求 (Regression Strategy)
在每次提测或代码合并(Pull Request)前,必须通过以下质量门禁:
- 单元测试:
- 在编译目录下运行
./build_cpu/cosmo-tests,确保所有 Catch2 单元测试用例全部通过(100% Pass)。
- 在编译目录下运行
- 代码规范与静态分析:
- 执行
bash scripts/format_check.sh --check,代码格式需符合.clang-format规范。 - 执行
bash scripts/static_analysis.sh --cppcheck,无高风险 Warning。
- 执行
- 冒烟测试:
- 使用
docker compose -f docker-compose.x86.windows.yml up -d --build一键拉起,确保首次体验路径(登录 -> 视频接入 -> 分配安全帽检测 -> 实时展示 OSD 成功)通畅。
- 使用
4.2 测试结果输出规范
测试完成后,测试组需提交《测试报告》,内容必须包含:
- 用例执行汇总:总用例数、通过数、失败数、豁免数、通过率(目标:功能测试通过率 100%)。
- 遗留 Bug 列表:按严重等级(Blocker、Critical、Major、Minor)分类。
- 性能基准数据表:记录在 BM1688/x86 下,不同通道数时的 CPU 占用、内存占用、平均 E2E 延时、FPS 抖动率。
- 稳定性监控图表:72小时的内存消耗曲线(证明无 Memory Leak)。
