Files
Artemis-Plugins/plugins/artemis-device-test/skill/references/tool-routing.md
T

84 lines
15 KiB
Markdown
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.
# 全工具路由与判定边界
读取场景:选择执行器、确认一个用例需要哪些证据,或排查“有工具却仍不能判定”的情况。机器可读的逐行映射在 [case-routing.json](../assets/case-routing.json),本机可执行文件配置与探测在 [团队部署](team-setup.md),手机任务交接在 [Artemis 工作流](artemis-workflow.md)。
## 范围与状态
来源是 `家庭安防多形态终端软件测试用例(移动看家2.0)20260623_自动化分类.xlsx`,结合 `review_all.json`、`kept_records.json` 和 `工具分析报告.md`。原有分类记录 861 行中排除“无法实现”504 行,保留 357 行:工具辅助163、人工介入125、可适用69。以工作表与 Excel 行号作为唯一来源,不按原编号去重。357 是保留记录行数,不是已自动化或已通过的场景数。
全工具入口负责发现、路由、调用现成能力、关联证据。平台和内部工具保留原产品、业务通道及权限;三方/通用工具可在能力等价且不改变被测条件时替换。仅标注“PC端”不能推出具体软件或API,提供入口路由不表示已有端到端脚本。人工场景、校准、硬件、后台权限等缺口保留在每条映射中。
路由结果与测试判定分开:工具正常退出或 Artemis `completed` 不等于通过。`passed` 要求所有适用断言有证据;`failed` 表示观察到明确违背预期;`inconclusive` 表示已执行但证据不足或冲突;`blocked` 表示必要依赖、权限、身份或前置条件未满足。映射文件中的 `not_run` 只是未执行状态,不是第五种业务判定。
## 平台与内部工具:保留业务入口
|路由|实际调用形式|可完成的环节|调用前要确认的缺口|
|---|---|---|---|
|移动视联PC|原Windows客户端;用户人工登录后,由宿主原生GUI能力或已验证的UIA/Win32控件驱动操作|直播/回放、分屏、云台、OSD、告警、端侧AI参数与上报|客户端实际版本、人工登录完成后的业务页与权限、控件可访问性及多客户端/多设备资源;安装程序不能当作已运行客户端;视频画布需另取码流或外部证据|
|mainThread/杭研网络信息查询候选|已取得真实“端侧数据采集工具.exe”,静态确认Python3.8/PyQt5原生GUI;通过当前窗口进入查询页,无已验证CLI|周期基础数据、拓扑、已有设备日志地址查询;可作为1设备绑定!18(1.46)的候选取证入口|原用例仅称“杭研软件”,与该程序的用例对应关系、查询权限和目标数据仍须核实;包下载、程序启动或控件静态识别不等于业务通过|
|移动看家客诉处理系统|真实网站的浏览器页面;用户人工登录后继续自动操作,经核实的正式API才可选用|在离线、编码延时、modelid、发声打点、日志、重启、网络检测记录|由本地profile提供URL;确认业务页和目标查询权限。账号、密码、短信/图形验证码及协议确认均由用户完成;不读取或复制账号统计表|
|连楹平台(材料也写“联楹”)|原智慧家庭门户/终端管理网站;用户人工登录后通过browser自动操作|modelid、版本/注册信息、首次及后续24小时上报|确认平台实际产品、环境及当前查询权限,不用老DM替代;记录查询条件、服务器时区、事件时间与设备别名|
|老DM/终端管理平台|原管理平台browser;正式API有文档和权限时可用|首次注册、心跳及48小时持续记录|地址和身份待确认;20 DM测试!6的24/48小时矛盾须在执行前解决|
|内部配置工具|原EapilCameraConfigurer PC GUI;`device_adapter.py` 按 `--protocol` 驱动|V1/V2 搜索、身份与版本查询、显式固件下发;原GUI实际支持的配置|先查 `capabilities` 与 [协议范围](protocol-support.md)。V1 [接口](v1-protocol.md) 使用 TCP4941/2170/MD5+ROM;默认只预检,显式执行最多一次传包。软件V2.x不代表设备协议V2。视频设置继续原GUI或原表要求的APP|
|firmware_encrypt|对应SDK随包工具,CLI参数以该版本帮助/说明为准|9系统设置!20(9.15-3)的规定OTA包生成|工具和SDK缺失时`blocked`;不猜加密算法/参数,不用通用压缩或加密替代。保留包摘要、SDK版本、命令脱敏记录和双分区证据|
|软探针、参数/日志后台|原网站browser或已核实的正式接口|开关、参数、指标、事件、日志上传与时间对应关系|原资料未给出全部入口;不可编造API路径,不将客诉网站自动视为所有后台|
|算法OTA平台|原管理网站browser或已核实的下发/回滚接口|云化AI算法应用下发、启用、回滚、版本检查|平台身份、算法包、授权、适用白盒设备和回滚证据;APP提示成功不能证明算法真正生效|
|其他既有管理/编码/升级/1400入口|保持原平台或原协议取证通道,先识别产品再选browser/PC GUI/正式API|原生参数、编码控制、协议事件、升级与日志取证|“既有PC平台”“厂商平台”仅是依赖描述;身份未确认时保留`blocked`,不映射成虚构统一服务|
网页路由先观察现有页面,再用可访问元素定位。PC GUI路由先确认宿主确实允许原生桌面控制;仅有浏览器自动化不能操作Windows程序。无支持的GUI能力时保留人工操作与截图交接,不声称已驱动客户端。登录态是运行时条件,旧文档中的授权或历史登录不自动授权本次外部写入。
客诉、联楹与移动视联的登录交接:先观察当前可访问的标签页或客户端窗口,已有有效会话则直接复用。确实显示登录页时,将准确页面/窗口交给用户,等待用户自行完成账号、密码、验证码、短信和协议步骤,不自动代填、发送短信、点击登录或读取账号表。用户完成后重新观察业务导航与目标查询权限,按当前授权的设备范围继续自动查询和取证;“用户说已登录”与“观察到可用业务页面”分别记录。仅当登录失效或权限不足时再次交接,不为已授权的后续步骤反复询问。浏览器未连接或窗口不可访问属于会话可观察性问题,不能推断为未登录。报告分别记录“等待人工登录”“登录状态未确认”“已登录但目标权限不足”和实际工具故障;人工登录是既定前置步骤,不是工具缺失或用例失败。
mainThread 原生查询页的静态定位线索:主菜单“进入查询端侧数据采集功能”对应 `enterReportButton`,输入框为 `snEdit`、`macEdit`、`deviceIdEdit`,输出框为 `getReportResult`。只读查询按钮为 `getAnddgsReport`(周期基础数据)、`getDevTopoReport` / `getDevTopoReportV4`(拓扑)及 `getLogURL`(已有日志地址)。这些对象名来自已取得程序的静态结构,实际自动化必须重新观察当前窗口,不能假设它们已暴露给 UIA。
查询使用当前确认的设备标识和程序正常鉴权,保留查询时间、条件与响应,不提取内置鉴权信息或绕过 GUI 猜测后台调用。“进入本地调试功能”会进入不同的 CoAP 工作模式,缺少监听端口不能用于判定查询页故障。`openSelfCheck`、`openLog`、`openLogAll` 分别会触发自检或日志上报,不属于只读报告查询;手册示例值也不是当前测试凭据或授权。平台及路由器的登录态、权限与业务能力以本次实际观察为准,历史登录页证据不代表当前状态。
## 三方与通用工具:可替换的执行与取证
|工具/能力|真实调用形式及封装入口|证据与限制|
|---|---|---|
|Codex|宿主编排;browser、原生GUI、CLI和MCP分别路由|Codex不代替码流传感器、物理场景或原业务平台;原图“76”分配不能复核,不能作为自动化覆盖率|
|Artemis|MCP `mobile_workspace`、`mobile_run_task`、`mobile_batch` 等|手机APP界面执行、观察、原生报告;不是PC GUI/浏览器执行器。Appium等既有移动框架可按团队实际保留,不能据映射声明两者已互通|
|Wireshark / dumpcap / TShark|Wireshark PC GUI;CLI `dumpcap`抓包、`tshark -r`分析;封装 `capture`、`analyze-pcap`|保存原始pcap及采集点/过滤条件/时钟。TLS密文不能证明业务权限、双向认证或设备日志脱敏;13.15需授权矩阵及端点证据|
|Nmap|CLI;封装 `scan --host <单个IP> --ports <逗号端口>`|封装只做最多128个明确TCP端口的连接扫描,不做服务版本探测、UDP或NSE;端口名称不是经探测确认的服务身份。完整验收另补服务识别、全部约定TCP/UDP、IPv4/IPv6及工作状态,不能把默认列表扫描当全端口证明|
|Binwalk|正式 `firmware-scan --input <镜像>`;配置 `runtimes.binwalk_python` 时固定 `python -I -m binwalk`,否则使用原生入口;独立临时用户配置|已用隔离Python3.11及Binwalk2.3.2验证合成签名正例及一次真实固件扫描;后者无已知签名。当前封装只扫描、不解包或执行提取物;解包与熵分析另行验证,签名或高熵不能证明设备flash加密|
|ffmg原名 / FFmpeg / ffprobe|原“ffmg”名称待核实;FFmpeg/ffprobe CLI,封装 `probe --input <原始媒体>` 或 `--rtsp-env <环境变量名>`|实际编码、分辨率、帧率/时间戳、音视频轨道;帧级GOP分析需取得帧类型与时间戳,普通probe摘要不足。屏幕录制重编码不能证明设备原始GOP|
|MediaInfo|正式 `media-info --input <本地媒体>`,通过 `libraries.mediainfo` 配置本机DLL;在有时限子进程读取固定字段;原GUI另走桌面能力|已验证MediaInfoLib21.09本地样本解析,GUI交互未由此验证;9.54/9.132可用ffprobe替换可比参数读取。Duration为毫秒;需原始流/导出文件,名义帧率不等于每段实测帧率|
|SecureCRT / 串口|原PC GUI;可选`pySerial`;已封装 `serial --port COMx --baud <值> --duration <秒> --output <日志>`实际调用PowerShell串口脚本|真实串口与正确电气连接/参数;封装仅被动读取,不发送登录命令。SSH仅在设备本来支持且不改变被测条件时使用;关闭串口验收不得为了日志而打开|
|路由器配置|原管理网站browser,或已核实的厂商CLI/API;适用OpenWrt可使用SSH上的UCI/ubus|网络模式、DHCP/DNS/MTU、双栈等需配置回读及真实连接验证;先保存恢复配置。OpenWrt不冒充指定路由器/光猫/移动闪联能力|
|OpenCV / OCR / Python统计|CLI脚本或库API,读取固定样本/标注真值|OSD、画面特征、事件时间匹配与成功率;必须定义阈值、时窗、重复告警处理和真值,不能让另一模型判定充当唯一真值|
|外部音视频采集、光照/声音/距离测量与实体工装|真实采集装置和已标定工具;其输出由CLI脚本解析或人工复核|带屏设备真实显示、声音/对讲、距离/角度/照度、准确率与物理云台必须保留实测。模拟器或屏幕播放不自动等价于规定的实物场景|
## 配置工具9行的独立断言
|来源与原编号|必需判定|不能代替它的证据|
|---|---|---|
|9系统设置!22 / 9.15-5|已知不兼容包升级失败,并按原预期证实回滚到原版本,或正常包恢复成功且上线|单纯版本未变化、命令报错或事后能查询设备|
|9系统设置!95 / 9.131|覆盖所支持编码、分辨率、码率类型、帧率、I帧、智能编码、AOV;配置成功且实际流符合|只点击保存或只验证一个参数|
|9系统设置!96 / 9.132|适用设备默认H265,H264/H265双向切换后实际流codec正确|界面显示编码或一次probe成功|
|9系统设置!98 / 9.134|默认VBR、CBR和能力上下界;区分VBR峰值与CBR口径,并关联9.101—9.106|仅比较文件平均码率|
|9系统设置!99 / 9.135|支持档位下的实际帧率、H264/H265直播/云/卡回放和对讲质量|名义fps、APP设置值或单片段无卡顿|
|12性能!8 / 12.18|1000次升级失败率严格小于1/1000,完整记录每次尝试、耗时、失败及上线状态|少量冒烟或一次最终版本一致;不能因脚本异常丢弃失败尝试|
|12性能!9 / 12.19|全部规定功能开启形成较高内存负载,1000次升级无变砖,负载与设备状态持续留证|无负载循环、12.18结果、最终一次在线|
|13安全!11 / 13.10|受控篡改包被设备校验拒绝;记录篡改类型、摘要、拒绝原因及合法包对照|网络失败、工具缺依赖、超时或版本未变化;单个失败不能推导全部签名/大小/版本校验都满足|
|13安全!12 / 13.11|规定的厂商通用固件因未授权被拒绝,结合匹配型号授权固件对照|不兼容型号包失败、网络中断或仅版本保持原值|
正向升级的 `verify-version` 只验证任务指定的固件字段,不能给以上9行整体判通过;V1 原生字段与 inner/outer 不自动映射。负向升级应按拒绝原因和恢复断言独立判定。17稳定性!11另有设备数、时序与循环矩阵,不能与12.18/12.19合并结果。
9.15-3单独按现网OVD-SDK版本选择包:1.42.0及以上使用SDK规定的 `firmware_encrypt` 包;1.41.0及以下不使用该工具生成包;首次对接1.42.0及以上也需规定陪测包。执行前核实具体SDK说明与双分区条件。
## 必须保留的安全与测量语义
- 13安全!10(13.9)的预期是**无本地web开放**。确认存在本地Web即不符合;有认证不改变此判定。只扫80/443、某地址不可达或过滤状态不足以证明无Web。
- 13安全!5(13.3)要求**固件在设备中加密保存**。需要真实flash/分区存储证据与厂商实现材料;OTA包扫描只属辅助。缺专用证据记`inconclusive`,缺采集权限或镜像记`blocked`。
- 13.18需设备日志/配置内容证据;13.15、13.17需受控授权/认证行为证据,不能由pcap单独判通过。
- 9.136需原始编码流中I帧类型和相邻时间戳;VFR/AOV不能只用帧数除名义帧率;关键帧不直接等同全部I帧。
- 11管理版!13执行端(PC还是APP)、!34主/子码流预期矛盾,以及20 DM测试!6的24/48小时冲突未澄清前不固化矛盾断言。
- 保留重复编号与合并续行;9系统设置!83的 `9.10500000000001` 按源值保留,不自行改写源文件。
## 映射文件约定
`case_id` 使用稳定工作表序号与Excel行号;`source.sheet`、`source.row`、`source.original_id`保留来源。`required_tools_original`是前次分析中的依赖名称,`route_ids`是本参考文档的路由,不保证当前全部可执行。`suggested_method`与`remaining_dependencies`保持分析依据;`assertion_profile`标记不能套通用通过规则的条目。执行前仍需读取原行完整步骤、预期、设备适用性和量测阈值。
所有工具输出按来源独立归档;外部CLI/GUI/browser证据关联到同一个`case_id`,但不得伪造为Artemis原生截图、日志或报告内容。