Skip to content

FNOS-021 测试用例 ​

字段内容
需求编号FNOS-021
关联需求FNOS-021 Midscene 库能力对齐与接入简化
关联计划PLAN-FNOS-021 Midscene 库能力对齐与接入简化
测试状态通过(整体验收完成;11 条用例未执行且不阻塞结论)
执行环境本地构测、DSH Web(本地 8070)、DSH Desktop(开发态)

测试范围与需求分析 ​

覆盖 功能列表 中 FNOS-021-01 至 FNOS-021-08 全部功能:

功能模块树 ​

text
FNOS-021
├─ 库基线
│  ├─ catalog 与安装等待期豁免列表
│  ├─ 导出面兼容(test / web / e2e-kit)
│  └─ 既有 e2e 与桥冒烟回归
├─ 接入配置生成
│  ├─ 四职责模型选择(默认/定位/规划/理解)
│  ├─ 按职责推导家族
│  ├─ 专用职责变量的出现条件
│  └─ 留空继承默认模型
├─ 桥行为
│  ├─ 思考意图 → reasoningEffort
│  ├─ 档位未命中不传
│  └─ 协议声明与误配指引
├─ 家族推断
│  ├─ 规则顺序(AutoGLM / UI-TARS / 豆包)
│  ├─ 白名单与上游一致
│  └─ 未知模型不猜
├─ 技能分发
│  ├─ 快照版本与哈希登记
│  └─ 环境说明注入不被覆盖
└─ 说明页
   ├─ 配置项与界面字段
   ├─ 端点行为与端口描述
   └─ 不支持能力说明

系统形态识别与专项章节启用 ​

专项是否启用依据
接口测试✅ 启用桥提供 GET /v1/models、GET /v1/health、GET /v1/midscene-env、POST /v1/chat/completions 四个端点,本次新增协议指引分支与多职责字段
安全测试(OWASP)✅ 启用(子集)桥是回环 HTTP 服务 + 接入密钥 + 会落盘图片,涉及 A01 访问控制、A02 敏感数据、A05 配置错误、A09 日志、A10 SSRF
权限测试✅ 启用设置端点的同源校验、密钥显示与重新生成
易用性测试✅ 启用(子集)设置页由一行变四行,需核对留空语义可理解、不存在模型有提示
兼容性测试✅ 启用(子集)双客户端(DSH Web / DSH Desktop)+ 既有 .env 升级不失效
性能测试❌ 未启用本次改动不引入新的性能路径;思考开关的影响以「行为验证」而非指标验证(见 TC-036 备注)
移动端测试❌ 未启用插件本体无移动端界面;插件分发的 Android/iOS/HarmonyOS 技能是文档,不产生客户端行为
AI/算法测试❌ 未启用(以边界用例替代)插件不训练、不调参、不评测模型效果;模型效果属 Midscene 上游。本次只验证「意图传递是否正确」,见 TC-028~TC-036
数据迁移测试❌ 未启用无数据迁移;配置项为增量,旧字段语义不变(TC-013 覆盖旧配置兼容)
灰度发布测试❌ 未启用插件按版本整体发布,无灰度机制
ERP 专项❌ 未启用非 ERP 系统

关键风险点 ​

  • 升级引入「判定变严」而非真实回归:1.16.0 起强化了资源清理语义、1.16.5 又引入环境准备/清理超时,既有 e2e 可能出现新的失败。判定时必须区分「产品坏了」与「框架判得更严」,否则会误改被测应用(TC-012 专为此设计)。
  • 留空语义被误解:四行配置若把「留空」呈现得像「未配置完成」,用户会以为必须填满,反而回到手写 .env 的老路(TC-016、TC-024 守住)。
  • 思考档位「看起来传了」:宿主不接受未声明的档位并会在发请求前报错。TC-031/TC-032 用反向断言守住「未命中就不要传」。
  • 家族修正可能反向打坏既有映射:调整规则顺序会改变匹配结果,glm-4.6v 之类必须仍是 glm-v(TC-004 反向断言)。
  • 倒退风险高于缺陷风险:最容易犯的错误不是「没兼容新字段」,而是「为了兼容新字段把现有可用路径改坏」。response_format 自 1.15.1 起就被桥忽略且全部验收通过,若改成报错会把今天能跑的功能推成失败(TC-038 专为此守卫,TC-042a 守住「全部 provider 可调用」)。

测试环境 ​

目标环境按需求的验收环境范围划分;执行方式遵循测试环境执行方式。

功能目标环境
FNOS-021-01、FNOS-021-03、FNOS-021-04、FNOS-021-06本地构测(单测 + 桥端点断言)
FNOS-021-02、FNOS-021-05、FNOS-021-07DSH Web(pnpm run start -- --web,DSH_HOME=<repo>/.dsh)+ DSH Desktop(开发态,CDP)

不需要真实 NAS:本需求不涉及 fnOS 宿主能力。

版本基线(执行时填写):DSH 0.2.1-rc.2 / 插件 @tnnevol/dsh-midscene@<待填> / 应用 5.9.0;额外记录 Midscene 库版本(应为 1.16.5)。

测试用例 ​

FNOS-021-04 模型家族推断准确性 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-001FNOS-021-04AutoGLM 系列判为 auto-glmAC-01—对 autoglm-phone、auto-glm-multilingual、codebuddy/autoglm 三个标识依次调用家族推断三者均返回 auto-glm 或 auto-glm-multilingual(不含 glm-v)P0缺陷场景(修复前实测为 glm-v)
TC-002FNOS-021-04豆包系 UI-TARS 判为对应 UI-TARS 家族AC-01—对 doubao-1.5-ui-tars、ui-tars-1.5 调用家族推断前者为 vlm-ui-tars-doubao-1.5,后者为 vlm-ui-tars-doubao-1.5;均不为 doubao-visionP0缺陷场景(修复前实测为 doubao-vision)
TC-003FNOS-021-04豆包 Seed 与旧视觉家族不被 UI-TARS 规则抢走AC-01—对 doubao-seed-2.1、doubao-vision-pro 调用家族推断分别为 doubao-seed 与 doubao-visionP1回归保护
TC-004FNOS-021-04GLM 视觉模型仍判为 glm-vAC-01—对 glm-4.6v、glm-5v-turbo、zhipu/glm-4.6v 调用家族推断三者均为 glm-vP1回归保护(防止规则顺序修正反向打坏)
TC-005FNOS-021-04白名单与上游一致AC-02已安装 @midscene/shared@1.16.01. 读取插件导出的白名单;2. 逐项与上游 TModelFamily 比对两者逐项一致(含 jev),且共 21 项P0新增行为,无回归基线
TC-006FNOS-021-04未知模型仍回落通用协议并标注AC-03—对 codebuddy/hy3 调用家族解析返回通用家族 glm-v 且 exact: false;理由为「不在适配器名单内」P1基线:FNOS-013 的通用协议结论
TC-007FNOS-021-04推断结果始终落在白名单内AC-02准备 20 个真实模型标识遍历调用家族推断,凡是返回结果的都必须能在白名单中找到无一项落在白名单外P1回归保护

FNOS-021-01 Midscene 库基线升级 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-008FNOS-021-01三个直接依赖均为 1.16.5AC-01已执行安装1. 读取 node_modules/@midscene/{web,test}/package.json;2. 核对 workspace catalog 三行与豁免列表 6 行三包版本均为 1.16.5;catalog 与豁免列表均为 1.16.5;锁文件内无 1.16.0 残留P0新增行为,无回归基线
TC-009FNOS-021-01锁文件与目录一致AC-01已执行安装在冻结模式下重新安装安装成功、锁文件无变更P0新增行为,无回归基线
TC-010FNOS-021-01插件类型检查与单测通过AC-02已升级执行插件 check(类型检查 + 单测)全部通过,无新增失败P0基线:升级前全绿
TC-011FNOS-021-01桥接冒烟在新版本下通过AC-03DSH Web 运行中、Chrome 已装扩展、目标页已打开执行插件 test:bridge 冒烟冒烟通过;每步以页面内状态独立核实P0基线:FNOS-013 的冒烟脚本结论
TC-012FNOS-021-01既有 e2e 用例在新版本下通过或失败可归因AC-03同上执行插件 tests/e2e 全量全部通过;若有失败,逐条判定是「产品回归」还是「框架判定变严」,后者登记后不阻塞P0基线:升级前 e2e 通过记录
TC-013FNOS-021-01既有接入配置升级后仍可用AC-03保留升级前生成的 .env(单模型四行)1. 升级插件;2. 不修改 .env;3. 在运行目录执行 Midscene 定位与断言请求成功,无需重新拉取配置P0基线:FNOS-013 的四行固定配置
TC-014FNOS-021-01共享装配包与同类插件类型检查不回归AC-02已升级依次执行 packages/dsh-e2e-kit、plugins/dsh-failover-search-plugin、plugins/dsh-codebuddy-plugin、apps/fn-deepseek-harness/tests 的类型检查全部通过P1回归保护

FNOS-021-02 多职责模型的接入配置 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-015FNOS-021-02设置页出现四行模型选择AC-01DSH Web 运行、插件已启用1. 打开插件管理页;2. 进入本插件详情页;3. 查看设置区块可见「默认模型」「定位模型」「规划模型」「页面理解模型」四行,且每行都有留空提示P1新增行为,无回归基线
TC-016FNOS-021-02四行全部留空时接入配置与升级前一致AC-02四行均未选择1. 读取 /v1/midscene-env 的 content;2. 与升级前保存的 .env 逐行比对除端口/密钥等动态值外逐行一致;不出现任何 MIDSCENE_{LOCATE,PLANNING,INSIGHT}_* 变量P0基线:FNOS-013 的四行固定配置
TC-017FNOS-021-02仅指定定位模型时只多出该职责变量AC-03目录中至少两个识图模型1. 定位模型选 A,其余留空;2. 读取接入配置出现 MIDSCENE_LOCATE_MODEL_{BASE_URL,API_KEY,NAME,FAMILY} 与 MIDSCENE_LOCATE_MODEL_STREAM_MODE;不出现 Planning / Insight 变量P0新增行为,无回归基线
TC-018FNOS-021-02专用职责家族按自己的模型推导AC-03目录中有不同系列的两个识图模型(如 GLM 系与 DeepSeek 系)1. 默认模型选 GLM 系;2. 定位模型选 DeepSeek 系;3. 读取接入配置默认家族为 glm-v,定位家族为 deepseek;两者不串用P0新增行为,无回归基线
TC-019FNOS-021-02四个职责各选不同模型时互不影响AC-03目录中至少四个识图模型四行分别选择不同模型后读取接入配置四组变量各自独立,模型名与家族均为对应行的取值P1新增行为,无回归基线
TC-020FNOS-021-02留空的专用职责不写入变量AC-02仅默认模型有值读取接入配置并搜索 MIDSCENE_PLANNING_MODEL_ 与 MIDSCENE_INSIGHT_MODEL_两者均不出现(上游语义:未配置时使用完整默认模型配置)P0新增行为,无回归基线
TC-021FNOS-021-02指定目录中不存在的模型时如实提示AC-04已通过配置或旧版本写入一个目录中不存在的模型1. 打开设置页;2. 查看该行界面标出「目录中不存在」类提示并保留原选择;不静默改选其它模型P1基线:FNOS-013 的单行行为
TC-022FNOS-021-02下拉只列识图模型AC-01目录中同时存在纯文本与识图模型展开四行下拉并核对选项每行选项均为 vision: true 的模型;无纯文本模型P1基线:FNOS-013 的能力门控
TC-023FNOS-021-02不存在识图模型时给出提示而非空下拉AC-01精简 profile 或临时使目录无识图模型打开设置页查看模型相关行显示「需要先安装并登录一个提供方」类提示;不渲染空下拉P2基线:FNOS-013 的空态设计
TC-024FNOS-021-02「留空=跟随」的语义在界面上可理解AC-01—阅读三行专用职责的留空提示文案明确写出「留空则使用默认模型」;不出现「未配置完成」类误导P2新增行为,无回归基线
TC-025FNOS-021-02四行修改即时作用于运行中的桥AC-01桥在运行1. 修改定位模型;2. 不重启 DSH,重新读取接入配置返回新的定位模型与家族P1基线:FNOS-013 的热更新行为
TC-026FNOS-021-02接入配置预览按职责分段且可整体复制AC-03至少指定一个专用职责1. 查看设置页的接入配置预览;2. 复制内容默认四行在前、专用职责在后;复制结果可直接作为 .env 使用P2新增行为,无回归基线
TC-027aFNOS-021-02未配置专用职责时接入配置只出四行AC-02插件已装、桥在运行1. 保持全部职责未配置;2. 拉取接入配置;3. 提取其中所有 MIDSCENE_ 开头的行恰好 4 行(基址、密钥、模型名、家族),且不含任何 MIDSCENE_{LOCATE,PLANNING,INSIGHT}_MODEL_;与升级前逐字符一致P0新增守卫(守住「零感知」)
TC-027bFNOS-021-02四个职责的模型名互不相同AC-03—拉取接入配置,读取四个职责各自写入的模型名四个值互不相同。共名会让桥无法分辨请求属于哪个职责,专用职责的模型永远不被用上P0设计不变量(路由前提)
TC-027cFNOS-021-02职责名不影响「提供方/模型」老路径AC-03—以 codebuddy/glm-5.3-flash 形式发补全请求仍按「提供方/模型」解析并调用该模型,不被当成职责名P0回归保护(老路径不得失效)
TC-027dFNOS-021-02专用职责的请求打到该职责自己的模型AC-03目录含两个识图模型1. 默认配模型 A、定位配模型 B;2. 分别以默认职责与定位职责的模型名发补全请求两次调用分别落到 A 与 BP0新增守卫(职责分工的核心)
TC-027eFNOS-021-02专用职责未配置或模型失效时回落默认AC-02同上1. 不配定位模型,以定位职责的模型名发请求;2. 配一个目录中不存在的定位模型后重发两次均成功,实际调用的是默认职责的模型(不报错、不另挑一个)P0对齐上游「_NAME 为空即用默认配置」
TC-027fFNOS-021-02未配置的职责既不生成变量也不登记实际使用AC-02仅默认职责配置了模型拉取接入配置,核对变量字典与各职责实际使用模型只有默认职责的 4 个变量;未配置的职责既无变量、也不出现在「实际使用」里(否则界面会误报该职责已单独配置)P0新增守卫
TC-027FNOS-021-02多职责配置端到端可用AC-03已生成多职责接入配置1. 写入运行目录 .env;2. 执行一次含定位与断言的 Midscene 任务任务成功;桥日志显示各职责分别打到对应「提供方/模型」P0新增行为,无回归基线

FNOS-021-03 模型原生思考开关如实传递 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-028FNOS-021-03thinking.type=disabled 解析为「关思考」意图AC-01—构造带 thinking: { type: 'disabled' } 的请求体,调用意图解析意图为「关思考」P0新增行为,无回归基线
TC-029FNOS-021-03enable_thinking=false 解析为「关思考」意图AC-01—构造带 enable_thinking: false 的请求体意图为「关思考」P1新增行为,无回归基线
TC-030FNOS-021-03显式 reasoning_effort 解析为指定档位意图AC-01—构造带 reasoning_effort: 'high' 的请求体意图为「指定档位 high」P1新增行为,无回归基线
TC-031FNOS-021-03模型声明可选档位时按命中档位下发AC-01桩模型声明 efforts 含 off1. 发「关思考」请求;2. 观察宿主收到的调用参数传入的档位为宿主声明的关闭档位,非硬编码字符串P0新增行为,无回归基线
TC-032FNOS-021-03模型未声明档位时不传、且请求成功AC-02桩模型不声明 reasoning 能力发「关思考」请求请求成功(不返回 UNSUPPORTED_REASONING_EFFORT);调用参数不含档位P0新增行为,无回归基线
TC-033FNOS-021-03意图档位不在可选集合内时不传AC-02桩模型只声明 ['low','high']发「指定档位 minimal」请求请求成功;不传该档位P0新增行为,无回归基线
TC-034FNOS-021-03能力查询失败时降级为不传AC-02使 resolveModelInfo 抛错或超时发任意带思考意图的请求请求照常发出并成功;日志记录一次降级说明P1新增行为,无回归基线
TC-035FNOS-021-03无思考字段的请求行为不变AC-03—发不含任何思考字段的请求调用参数与升级前一致;响应正常P0基线:FNOS-013 的补全行为
TC-036FNOS-021-03思考行为在真实任务中与 Midscene 设定一致AC-01DSH Web、可选模型1. 用默认设置跑一次三步任务;2. 在 Midscene 报告中查看推理内容与耗时无额外推理内容产出(与 Midscene 默认「关思考」一致);任务成功P1新增行为,无回归基线(定性判定,不设耗时阈值)
TC-037FNOS-021-03图片与工具调用不受思考映射影响AC-03含图片的请求与含工具的请求各一份分别发送两类请求图片按原顺序与门控处理;工具 schema 与调用行为与升级前一致P0基线:FNOS-013 的转换规则

FNOS-021-06 接入配置显式声明协议并指引误配 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-038FNOS-021-06携带 response_format 的请求仍成功(保持忽略)AC-03桥在运行、持有有效密钥POST 带 response_format: { type: 'json_object' } 的补全请求状态码 200,正常返回内容;行为与升级前一致。这条是防止本次改动倒退的守卫P0基线:1.15.1 起该字段即被忽略且功能正常
TC-039FNOS-021-06接入配置显式声明协议AC-01—读取 /v1/midscene-env 的 content含协议为 Chat Completions 的说明;用户无需自行判断该配哪种协议P1新增行为,无回归基线
TC-040FNOS-021-06误配 Responses 协议时拿到可读指引AC-02同上POST /v1/responses404;错误体说明「本桥只提供 Chat Completions」并提示设置 MIDSCENE_MODEL_PROTOCOL=openai-chat,而非无上下文 404P1缺陷场景(修复前只有通用 404)
TC-041FNOS-021-06System One 路径提示 Jev 不经本桥AC-02同上POST /v1/systemone404;错误体说明 Jev 使用私有协议、不经本桥P2新增行为,无回归基线
TC-042FNOS-021-06指引响应不泄漏内部实现细节AC-02同上检查两条 404 响应体只含面向用户的说明与替代做法;不含堆栈、内部路径、宿主错误类名P1安全要求(见 TC-050)
TC-042aFNOS-021-06全部已配置 provider 均可经桥调用AC-04桥在运行、至少 5 个 provider 已配置逐一对其模型 POST 一次最小补全请求(文本即可)每个返回正常内容,或返回该 provider 自身的明确错误(如 QUOTA);不出现协议/路由类错误。这条直接验证「DSH 全部模型都能给 Midscene 用」P0新增行为,无回归基线(实测依据:2026-10-20 实桥逐 provider 通过)

FNOS-021-05 内置技能内容与上游同步 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-043FNOS-021-05技能文件与登记哈希一致AC-01已同步上游快照执行技能守卫测试(比对 SOURCE.md 中登记的 sha256)全部文件哈希一致;上游文件数由 21 变为 22(新增 github-actions.md)P0基线:FNOS-013 的哈希守卫
TC-044FNOS-021-05技能描述覆盖新版本能力AC-01同上检索 midscenejs 技能中的多职责模型、Jev 边界与 CI 集成说明出现四职责(默认/定位/规划/理解)、Jev 适用边界(不能作默认模型)、github-actions 索引P1新增行为,无回归基线
TC-045FNOS-021-05环境说明仍被注入且不与上游原文冲突AC-02插件已启用1. 在会话中加载 midscenejs 技能;2. 检查正文开头正文以环境说明开头(模型由桥提供、不索要第三方密钥),其后为上游原文P0基线:FNOS-018 的注入说明
TC-045aFNOS-021-05包内技能与上游快照逐字节一致AC-01已克隆上游 tnnevol/skills对 skills/midscenejs/ 执行 diff -rq 与上游同名目录比对无差异(零本地补丁)P0基线:FNOS-013 的「不打补丁」原则
TC-046FNOS-021-05卸载插件后技能同步消失AC-01可卸载的测试 profile1. 禁用插件;2. 查看技能目录插件分发的技能不再出现;用户自装同名技能不受影响P2基线:FNOS-013 的技能生命周期
TC-046aFNOS-021-05新增技能文件进入发布产物AC-01已构建检查 npm pack 产物清单中的 skills/ 条目含 skills/midscenejs/references/midscene-test/github-actions.md;产物技能文件共 24 个P1新增行为,无回归基线

FNOS-021-07 说明页与实现一致 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-047FNOS-021-07说明页不再出现不存在的配置项与参数AC-01—全文检索 defaultProvider、familyWarning、?model=、以及「占用即报错」均无命中(或在明确的「历史变更」上下文中出现)P1缺陷场景
TC-048FNOS-021-07说明页的端点与字段与实现一致AC-02—逐项核对说明页列出的端点、配置项、设置页字段与 bridge-server.ts / config.ts / 设置区块实现逐项一致P1缺陷场景
TC-049FNOS-021-07不支持能力在说明页被明确列出AC-02—检索说明页的「当前不支持」小节明确列出 Responses 协议、结构化输出、Jev 三项及其替代做法P2新增行为,无回归基线

FNOS-021-08 1.16.5 新增测试编排契约的对齐 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-061FNOS-021-08全仓 e2e 配置不再使用已被移除的 maxConcurrencyAC-01已安装 @midscene/test@1.16.5grep -rn "maxConcurrency" --include=midscene.config.ts 扫全仓(5 处配置文件)无字段赋值残留(仅允许解释性注释);5 处均出现 maxConcurrentFiles 与 maxConcurrentProjects,取值均为 1P0缺陷场景(1.16.5 运行期会显式拒绝旧字段)
TC-062FNOS-021-081.16.5 下 e2e 配置类型检查通过AC-01同上1. 全仓 pnpm run typecheck;2. 对不在 CI 图内的两处(dsh-e2e-desktop、应用 tests)单独跑 tsc --noEmit两者均通过。若保留旧字段会报 TS2353: 'maxConcurrency' does not exist in type 'TestOptions'P0新增行为,无回归基线
TC-063FNOS-021-08并发语义与升级前一致AC-02同上1. 读取 TestOptions 对两字段的说明;2. 核对配置文件取值两字段默认值均为 1(null 才是不限);显式写 1 后 e2e 仍串行跑同一浏览器窗口P1基线:1.16.0 的 maxConcurrency: 1
TC-064FNOS-021-08扩展未连接时得到可诊断的 SETUP_TIMEOUTAC-03Chrome 已装扩展但未连接(或不启动 Chrome)执行一次 e2e在 setupTimeout 上限内失败并报 SETUP_TIMEOUT(含 timeoutMs),而不是无限挂起P1新增行为(1.16.0 下为无限等待)
TC-065FNOS-021-08「可用但不采用」项均有结论登记AC-04—检索需求「不在本次范围内」与计划决策 D6/D7defineFileSetup/FileSetupContext/TProjectContext 与 AUTH_MODE=siwc 各有「不采用」的理由,无悬空项P2新增行为,无回归基线
TC-066FNOS-021-081.16.5 全量回归:单测与构建AC-01已安装 1.16.5执行插件 check(typecheck + 单测)与 build211 条单测全绿、构建通过;桥行为与 1.16.0 一致(家族/职责变量/思考字段复核结论见需求调研结论)P0基线:1.16.0 下 211 条全绿

安全与异常专项(OWASP Top 10 2021 子集) ​

用例ID类别场景关联验收Payload / 构造预期防御
TC-050A01 访问控制未带密钥调用补全端点FNOS-021-06 AC-01POST /v1/chat/completions,不带 Authorization401,code: invalid_api_key;不产生任何上游调用
TC-051A01 访问控制错误密钥调用补全端点同上Authorization: Bearer 0000…401;比较为定长比较,响应耗时无明显差异(改用错误长度密钥亦为 401)
TC-052A01 访问控制设置写端点被跨站触发FNOS-021-02 AC-01POST /plugins/dsh-midscene-plugin/settings/update 带 Origin: https://evil.example403 untrusted origin;配置未被修改
TC-053A02 敏感数据接入密钥不出现在日志同上触发一次设置读取与一次补全请求后检索宿主日志日志中无 32 位十六进制密钥;只有请求摘要(模型、流式/缓冲、消息条数)
TC-054A05 配置错误端点只监听回环地址FNOS-021-01 AC-03从另一台机器访问桥端口无法连接(仅 127.0.0.1)
TC-055A09 日志监控请求日志可诊断且不含消息内容FNOS-021-06 AC-04发一条消息含敏感串的请求(含一次误配协议路径的请求)有可诊断日志;日志不含消息正文与图片数据,也不含接入密钥
TC-056A10 SSRFimage_url 为远程 URLFNOS-021-06 AC-02{"type":"image_url","image_url":{"url":"http://169.254.169.254/latest/meta-data/"}}400;桥不发起任何外部请求(说明只接受 base64 数据 URI)

兼容性与易用性专项 ​

用例ID维度场景关联验收测试步骤预期结果优先级
TC-057双客户端设置页四行在 DSH Desktop 同样可用FNOS-021-02 AC-01以开发态 Desktop(项目 .dsh profile、CDP 9333)复跑 TC-015~TC-019与 DSH Web 一致;无渲染差异导致的字段缺失P1
TC-058兼容性旧版本插件配置升级后不掉字段FNOS-021-02 AC-02用旧版本配置文档启动新版本插件model 字段仍生效为默认模型;三个新字段取默认空值;接入密钥不变P0
TC-059易用性四行留空与已选状态可区分FNOS-021-02 AC-01观察默认、已选、已选但不存在三种状态三种状态在视觉与文案上可区分;已选可一键清空回到「跟随默认」P2
TC-060兼容性精简 profile(无设置服务)下桥仍可用FNOS-021-01 AC-03在不含 settings/webServer 的 profile 加载插件桥正常启动;仅缺少设置界面,接入配置仍可生成(或按既有规则走配置文件)P2

测试执行结果 ​

执行日期 2026-10-22 至 2026-10-23(两轮:先在 1.16.0 上验收,后按上游最新推进到 1.16.5 复跑,并于 10-23 补充 DSH Web 与真实 Chrome 验收)。版本三元组:DSH 运行时 0.2.1-rc.2、插件 0.2.1-rc.2.15(功能提交 c6822e1;后续 c7c37a9 仅改版本号)、应用 5.9.0-0.2.1-rc.2.15;Midscene 库由 1.15.1 升至 1.16.5。

汇总:75 条用例,64 条通过,0 条失败,11 条未执行。 需求提出人于 2026-10-23 确认 FNOS-021 整体验收通过;11 条未执行用例保留原状、不计作通过,且不阻塞整体验收结论。

已执行(本地构测环境) ​

包级单测 211 条全绿(12 个测试文件):typecheck 通过、build 通过、全仓 typecheck 11/11 通过。

用例ID功能点执行环境结果执行日期备注
TC-001FNOS-021-04本地单测✅ 通过2026-10-22autoglm-phone、auto-glm-multilingual、zhipu/autoglm-phone 均判为 auto-glm(修复前为 glm-v)
TC-002FNOS-021-04本地单测✅ 通过2026-10-22doubao-1.5-ui-tars、ui-tars-1.5 均为 vlm-ui-tars-doubao-1.5;doubao-ui-tars 为 vlm-ui-tars
TC-003FNOS-021-04本地单测✅ 通过2026-10-22doubao-seed-2-1-turbo → doubao-seed;doubao-vision-pro → doubao-vision(规则重排未扩大范围)
TC-004FNOS-021-04本地单测✅ 通过2026-10-22glm-5.3、codebuddy/glm-5.3-flash 等仍为 glm-v
TC-005FNOS-021-04本地单测✅ 通过2026-10-22白名单 21 项,与上游 MODEL_FAMILY_VALUES 逐项一致(含 jev)
TC-006FNOS-021-04本地单测✅ 通过2026-10-22codebuddy/hy3 → 通用 glm-v,exact: false,理由含「通用协议」
TC-007FNOS-021-04本地单测✅ 通过2026-10-22遍历真实模型标识,推断结果全部落在白名单内
TC-008FNOS-021-01本地✅ 通过2026-10-22已安装版本实测 1.16.5;catalog 三行与豁免列表 6 行均为 1.16.5;锁文件内 1.16.0 残留为 0
TC-009FNOS-021-01本地✅ 通过2026-10-22pnpm install 成功,锁文件随 catalog 更新
TC-010FNOS-021-01本地单测✅ 通过2026-10-22check(typecheck + 单测)211 条全绿;build 成功
TC-014FNOS-021-01本地✅ 通过2026-10-22全仓 pnpm run typecheck 11/11 通过(含 dsh-e2e-kit)
TC-016FNOS-021-02本地单测✅ 通过2026-10-22不传专用职责时四个变量行与升级前逐字符一致,且不含任何 MIDSCENE_{LOCATE,PLANNING,INSIGHT}_MODEL_*
TC-017FNOS-021-02本地单测✅ 通过2026-10-22仅配定位时只出现该职责 5 行(含 STREAM_MODE="non-stream"),无 Planning / Insight
TC-018FNOS-021-02本地单测✅ 通过2026-10-22默认 GLM 家族 glm-v、定位 DeepSeek 家族 deepseek,互不串用
TC-019FNOS-021-02本地单测✅ 通过2026-10-22四职责各配不同系列,四组变量与家族各自独立
TC-020FNOS-021-02本地单测✅ 通过2026-10-22留空的专用职责不写入变量
TC-025FNOS-021-02本地单测✅ 通过2026-10-22liveConfig 每次读取取当前值,热更新无需重启
TC-027aFNOS-021-02本地单测✅ 通过2026-10-22守住「零感知」:全部留空时变量行逐字符不变
TC-027bFNOS-021-02本地单测✅ 通过2026-10-22四个模型名 dsh-model / @locate / @planning / @insight 互不相同
TC-027cFNOS-021-02本地单测✅ 通过2026-10-22codebuddy/glm-5.3-flash 仍按「提供方/模型」解析,不被当成职责名
TC-027dFNOS-021-02本地单测✅ 通过2026-10-22dsh-model@locate 打到定位职责配置的模型,dsh-model 打到默认职责
TC-027eFNOS-021-02本地单测✅ 通过2026-10-22专用职责未配置、或旧 .env 仍发 @locate 时回落默认且返回 200
TC-027fFNOS-021-02本地单测✅ 通过2026-10-22未配置的职责既不生成变量,dedicated 也为 false(界面不会误报已单独配置)
TC-028FNOS-021-03本地单测✅ 通过2026-10-22thinking.type=disabled → 关思考意图
TC-029FNOS-021-03本地单测✅ 通过2026-10-22enable_thinking=false → 关思考意图
TC-030FNOS-021-03本地单测✅ 通过2026-10-22reasoning_effort: 'high' → 指定档位意图;'none' → 关思考
TC-031FNOS-021-03本地单测✅ 通过2026-10-22模型声明 off/low/high 时下发 off(取自宿主披露的 id,非硬编码)
TC-032FNOS-021-03本地单测✅ 通过2026-10-22模型不声明 reasoning 时请求 200 且不含 reasoningEffort
TC-033FNOS-021-03本地单测✅ 通过2026-10-22只声明 low/high 而意图为最低档时不传,请求成功
TC-034FNOS-021-03本地单测✅ 通过2026-10-22resolveModelInfo 抛错时降级为不传,请求照常成功
TC-035FNOS-021-03本地单测✅ 通过2026-10-22无思考字段的请求不传档位,其余字段转换与升级前一致
TC-037FNOS-021-03本地单测✅ 通过2026-10-22图片与工具请求的转换用例全绿,未受思考链路影响
TC-038FNOS-021-06本地单测✅ 通过2026-10-22倒退守卫:带 response_format 仍返回 200,且该字段不出现在宿主调用入参里
TC-039FNOS-021-06本地单测✅ 通过2026-10-22接入配置头部显式写「协议:OpenAI Chat Completions(openai-chat)——本桥只提供这一种协议」
TC-040FNOS-021-06本地单测✅ 通过2026-10-22/v1/responses → 404,错误体含「Chat Completions」与 openai-chat 指引
TC-041FNOS-021-06本地单测✅ 通过2026-10-22/v1/systemone → 404,错误体含「Jev」与「System One」
TC-042FNOS-021-06本地检查✅ 通过2026-10-22两条指引只含用户向说明与替代做法,无堆栈、内部路径、宿主错误类名
TC-043FNOS-021-05本地单测✅ 通过2026-10-22哈希守卫 22 条通过;上游文件数 21 → 22
TC-044FNOS-021-05本地检查✅ 通过2026-10-22midscene-config.md 含 8 处 LOCATE_MODEL、11 处 Jev;github-actions.md 已入包
TC-045FNOS-021-05本地单测✅ 通过2026-10-22分发内容以环境说明开头,其後为上游原文
TC-045aFNOS-021-05本地✅ 通过2026-10-22diff -rq 与上游 tnnevol/skills@b3f7fd6 零差异
TC-046aFNOS-021-05本地✅ 通过2026-10-22pnpm pack 产物含 skills/midscenejs/references/midscene-test/github-actions.md,技能文件共 24 个
TC-047FNOS-021-07本地检查✅ 通过2026-10-22defaultProvider 0 次、familyWarning 0 次、「占用即报错」0 次;?model= 仅出现在「不接受该参数」的否定说明中
TC-048FNOS-021-07本地检查✅ 通过2026-10-22端点、6 项配置、设置页字段、鉴权行为逐项核对一致(详见变更记录)
TC-049FNOS-021-07本地检查✅ 通过2026-10-22新增「能力边界」小节,明确列出结构化输出、Responses、Jev 三项及替代做法
TC-050安全本地单测✅ 通过2026-10-22补全端点不带密钥 → 401 invalid_api_key
TC-051安全本地单测✅ 通过2026-10-22错误密钥 → 401;比较为定长比较
TC-056安全本地单测✅ 通过2026-10-22远程 image_url 被拒(桥不做任意 URL 抓取),只接受 base64 数据 URI
TC-058兼容性本地单测✅ 通过2026-10-22老配置缺三个新字段时按「未配置」处理,model 语义不变,接入密钥不变
TC-061FNOS-021-08本地检查✅ 通过2026-10-22全仓 5 处 e2e 配置均已迁移:dsh-midscene-plugin、dsh-codebuddy-plugin、dsh-failover-search-plugin、dsh-e2e-desktop、fn-deepseek-harness/tests;字段赋值零残留(dsh-codebuddy-plugin 目录被 .gitignore 忽略,该处只在本机)
TC-062FNOS-021-08本地✅ 通过2026-10-22全仓 pnpm run typecheck 11/11 通过;dsh-e2e-desktop 与应用 tests 单文件 tsc --noEmit 均 exit=0。迁移前先复现了 TS2353(BUG-021-03)
TC-063FNOS-021-08本地检查✅ 通过2026-10-221.16.5 的两字段默认值均为 1(null 才不限),显式写 1 与升级前 maxConcurrency: 1 语义一致
TC-065FNOS-021-08本地检查✅ 通过2026-10-22defineFileSetup 等三项与 AUTH_MODE=siwc 已在需求「不在本次范围内」与计划决策 D6/D7 各有理由
TC-066FNOS-021-08本地✅ 通过2026-10-221.16.5 上重跑 check 与 build:211 条单测全绿、构建成功;家族白名单/职责变量/jev 限制/思考字段形态复核与 1.16.0 一致
TC-052安全本地 DSH Web 实测✅ 通过2026-10-23带 Origin: https://evil.example 写设置端点 → 403;同源回环请求 → 200。会话令牌与配置未被跨站改动
TC-054安全本地 DSH Web 实测✅ 通过2026-10-23桥监听项为 127.0.0.1:8791(仅回环);从本机 LAN IP 192.168.124.177 访问 → 连接失败
TC-011FNOS-021-01DSH Web + 真实 Chrome + 扩展✅ 通过2026-10-23test:bridge 冒烟在 1.16.5 下通过(cli 侧 1.16.5 / 浏览器侧 1.16.2):首页断言: 通过、是否进入插件列表: true、插件列表断言: 通过;每步均以页面内状态独立核实,未采信 act 自述
TC-012FNOS-021-01DSH Web(Midscene Test)全量✅ 通过2026-10-23tests/e2e 全量 4/4 通过(8m44s,90.5k tokens):TC-034a、TC-034c、TC-051、TC-052。升级到 1.16.5 后无「框架判定变严」导致的系统性失败;期间 3 次失败均已定位为用例资产缺陷(文案/选择器),不是产品回归
TC-015FNOS-021-02本地 DSH Web(CDP 断言)✅ 通过2026-10-23设置区块渲染出 四个职责 Tab(默认/定位/规划/页面理解),且恰好 4 个下拉
TC-021FNOS-021-02本地 DSH Web(CDP 断言)✅ 通过2026-10-23把「定位」配成不存在的模型后,该 Tab 显示橙色「目录中已不存在」标签并列出该模型名,不静默改选;后端同时回落默认且不写 LOCATE 变量组
TC-022FNOS-021-02本地 DSH Web(CDP 断言)✅ 通过2026-10-23下拉展开 24 个选项;与设置端点的 availableModels 数量一致且全部 vision: true —— 只列识图模型
TC-024FNOS-021-02本地 DSH Web(CDP 断言)✅ 通过2026-10-23默认 Tab 占位文案「未指定(跟随 DSH 会话模型)」;三个专用 Tab 为「未指定(沿用默认职责)」—— 留空语义在界面上可读
TC-026FNOS-021-02本地 DSH Web(CDP 断言)✅ 通过2026-10-23接入配置预览可见、含协议声明行,且有「复制接入配置」按钮
TC-059FNOS-021-02本地 DSH Web(CDP 断言)✅ 通过2026-10-23留空与已选可区分:已选(即使模型已不存在)Tab 内显示配置值 + 「当前实际使用:…(沿用默认)」,留空则只有占位文案

未执行(保留记录,不阻塞整体验收) ​

用例ID未执行原因
TC-027需按「多职责端到端」形状专门跑一轮 e2e(本轮 e2e 只覆盖界面用例,未含多职责编排)
TC-013单测已固定「四行逐字符不变」;真实 Midscene 定位/断言未跑
TC-023需构造「目录里没有可识图模型」的状态(清空全部提供方),验证界面给提示而非空下拉
TC-036需真实任务与报告观察(定性判定)
TC-042a需真实提供方凭据逐 provider 冒烟
TC-064需「Chrome 已装扩展但未连接」的真实场景,验证 SETUP_TIMEOUT 取代无限等待
TC-046需可卸载的测试 profile
TC-053、TC-055需检查宿主运行日志
TC-057需 DSH Desktop(开发态、CDP)复跑
TC-060需精简 profile(无 settings/webServer)

Bug 记录 ​

执行期间发现并已修复 2 个缺陷(均由本轮新增用例抓出):

编号发现用例现象根因修复
BUG-021-01TC-027b(/v1/midscene-env 变量字典)content 里有专用职责的变量,但 variables 字典里取不到 MIDSCENE_LOCATE_MODEL_NAMEObject.fromEntries(dedicated.map(...)) 里 map 每一项返回的是「键值对数组」而不是「键值对」,被当成非法条目丢弃改为 flatMap 返回键值对数组
BUG-021-02TC-042(未知路径 404)未带密钥访问未知路径得到 401 而非 404鉴权在路由之前(既有设计,且是有意的:不向未授权调用者披露端点清单)不改实现;修正用例前置条件为「带密钥」
BUG-021-03TC-062(升级到 1.16.5 后的类型检查)plugins/dsh-midscene-plugin/tests/e2e/midscene.config.ts 报 TS2353: 'maxConcurrency' does not exist in type 'TestOptions';即使绕过类型检查,运行期也会被 Midscene config test.maxConcurrency is no longer supported. 直接拒绝上游 1.16.5 把 maxConcurrency 拆成 maxConcurrentFiles/maxConcurrentProjects,并显式拒绝旧字段(属破坏性变更;1.16.0 不会暴露)。首次只修了本插件,全仓 typecheck 立刻抓出 dsh-failover-search-plugin 的同类写法,grep 后确认共 5 处迁移为 maxConcurrentFiles: 1 + maxConcurrentProjects: 1(两字段默认值均为 1,语义不变),并在配置注释里写明这条破坏性变更

另有一处版本线记录:@midscene/* 上游在 2026-10-21~10-22 发布了 1.16.1、1.16.2、1.16.5。首轮验收基于 1.16.0;随后按用户确认把基线推进到 1.16.5 并复跑。实测仓库的 minimumReleaseAge 门槛为 24 小时(1.16.1 距 30h 免豁免;1.16.2 22.2h、1.16.5 3.2h 均被拦),因此 1.16.5 显式登记进 minimumReleaseAgeExclude。逐项复核确认 1.16.5 与 1.16.0 的家族白名单、四职责变量名、jev 限制、专用职责不继承与思考字段形态完全一致,唯一需要改代码的是 maxConcurrency 的移除(BUG-021-03),其余为增量能力(AUTH_MODE、defineFileSetup、setupTimeout),取舍已登记。

测试结论 ​

  • 结论:通过(需求提出人于 2026-10-23 确认整体验收通过)
  • 已执行部分:64/64 通过,0 失败;包级单测 211 条全绿,全仓类型检查 11/11 通过,构建成功。
  • 未执行部分:11 条用例仍依赖特定界面、浏览器扩展、凭据或 profile 场景,具体见上表;它们保持「未执行」事实,不虚报为通过。需求提出人确认这些未执行项不阻塞 FNOS-021 整体验收。
  • 一句话结论:FNOS-021 整体验收通过;库基线、多职责接入、思考开关、家族推断、技能同步与说明页纠偏均按已确认结论验收。未执行用例作为非阻塞记录保留。

覆盖率分析 ​

按功能覆盖 ​

功能用例数正向逆向边界权限数据一致性说明
FNOS-021-017✅✅✅—✅「权限」不适用(依赖升级无权限面)
FNOS-021-0219✅✅✅✅✅权限由 TC-052 覆盖
FNOS-021-0310✅✅✅—✅「权限」不适用(桥内转换逻辑)
FNOS-021-047✅✅✅—✅「权限」不适用(纯函数)
FNOS-021-056✅✅✅——无数据一致性面
FNOS-021-066✅✅✅✅✅权限由 TC-050~TC-052 覆盖;TC-042a 跨 provider 覆盖数据一致性(全部路由可达)
FNOS-021-073✅✅———文档用例无边界与数据面
FNOS-021-086✅✅✅—✅「权限」不适用(测试编排配置);边界覆盖「默认值 1 与显式 1 等价」「超时上限」

未启用章节与原因 ​

章节原因
性能测试改动不新增性能路径;思考开关的效果以行为判定(TC-036),不设耗时阈值,避免把模型侧波动误读成插件性能
移动端测试插件本体无移动端界面
AI/算法测试插件不训练、不调参;模型效果归上游。本次只验意图传递(TC-028~TC-034)
数据迁移测试无迁移;配置为增量,兼容性由 TC-013、TC-058 覆盖
灰度发布测试无灰度机制
ERP 专项不适用

风险提示 ​

  1. TC-012 的判定成本最高:升级后 e2e 若失败,需要人工区分「产品回归」与「框架判定变严」。若 1.16.0 的清理语义造成既有用例系统性失败,应在计划中以「接受判定变严 + 调整用例」登记,而不是回退升级。
  2. TC-031/TC-032 依赖桩模型:档位命中/未命中的判定需要可控的模型能力声明(宿主按模型各自声明的档位集合校验)。若无法构造桩,可退化为对能力查询结果的单测断言,但会失去端到端覆盖。
  3. TC-036 是定性判定:以「无额外推理内容产出」为判据,不测耗时。若需要量化收益,应另立性能需求,且必须在同一模型、同一任务、多次取中位数才有可比性。
  4. TC-051 的时序判定不宜过度依赖:定长比较的实现保证的是逻辑上无提前返回,实测耗时差异受运行时噪声影响,建议只把它作为实现核对项而非量化门禁。

变更记录 ​

日期变更说明
2026-10-20初始登记建立 FNOS-021 测试用例文档,共 60 条用例:家族推断 7 条、库基线 7 条、多职责接入 13 条、思考透传 10 条、协议指引 5 条、技能 4 条、说明页 3 条、安全与异常 7 条、兼容与易用 4 条。按系统形态识别未启用性能/移动端/AI 算法/数据迁移/灰度/ERP 六类专项,原因已逐项登记。
2026-10-20更正 FNOS-021-06 用例方向并新增跨 provider 用例原 TC-038 断言「带 response_format 返回 400」。复核确认该字段自 1.15.1 起就被桥忽略、现有 58 条验收在此状态下全部通过,且 Midscene 有 callAiAndParseWithRetry 语义重试兜底——按原设计会把可用功能推成失败。修订:TC-038 反转为「仍返回 200」作为倒退守卫;TC-039 改为「接入配置显式声明协议」;TC-040/041/042 收敛到「误配时给可读指引」;新增 TC-042a「全部已配置 provider 均可经桥调用」,直接验证「DSH 全部模型都能给 Midscene 用」这条核心承诺(依据 2026-10-20 实桥逐 provider 实测)。用例总数 60 → 61。
2026-10-20补充 6 条多职责守卫用例新增 TC-027a~TC-027f,钉住「默认只出四行」「四职责模型名互不相同」「提供方/模型 老路径不受影响」「专用职责打自己的模型」「未配置/失效回落默认」「未配置职责不登记实际使用」六条不变量,该功能用例数 13 → 19,总数 63 → 69。断言只写行为(不规定模型名取值与内部函数名),实现方案由计划阶段决定。
2026-10-22回填首轮执行结果(本地构测环境;当时基线 1.16.0、用例 69 条,次日推进到 1.16.5 / 75 条)库基线升至 1.16.0(catalog 3 行 + 豁免列表 6 行)。包级单测由 152 增至 211 条全绿(新增 reasoning.spec.ts 15 条、intent-models.spec.ts 7 条,并扩充 config/settings-routes/settings-rpc/bridge-server 的份额);typecheck、build 与全仓 typecheck(11/11)通过。回填 69 条用例中的 24 条通过、0 失败、45 条未执行(未执行项均依赖 DSH Web/Desktop 界面、真实 Chrome 与扩展、真实提供方凭据,已逐条登记阻塞原因)。执行期抓出并修复 BUG-021-01(/v1/midscene-env 的 variables 字典丢失专用职责键,map 误用为 flatMap);BUG-021-02 为用例前置条件错(鉴权先于路由,实现不改)。另登记上游 1.16.1/1.16.2/1.16.5 已发布但未纳入基线的理由(发布未满 minimumReleaseAge,且家族白名单与职责变量名与 1.16.0 完全一致)。
2026-10-22基线推进到 1.16.5,补登 FNOS-021-08 的 6 条用例首轮验收基于 1.16.0;按用户确认把基线推进到 1.16.5 并在其上复跑。新增 FNOS-021-08 用例 TC-061~TC-066(并发字段迁移、类型检查、并发语义等价、SETUP_TIMEOUT 可诊断、新能力取舍登记、全量回归),用例总数 69 → 75。执行结果 29 通过 / 0 失败 / 46 待补测(新增 5 条通过;TC-064 需「扩展已装未连接」场景)。新增 BUG-021-03:TestOptions.maxConcurrency 在 1.16.5 被移除并运行期显式拒绝,全仓 5 处 e2e 配置正在使用(本插件、codebuddy、failover-search、e2e-desktop、应用 tests),属破坏性变更(1.16.0 不暴露),已全部迁移为 maxConcurrentFiles/maxConcurrentProjects。另记录 minimumReleaseAge 门槛实测为 24 小时(1.16.1 30h 免豁免,1.16.2 22.2h 与 1.16.5 3.2h 被拦)。
2026-10-23本地 DSH Web 实测第二轮:补 2 条安全用例证据在本地 DSH Web(DSH_HOME=仓库 .dsh,8070)与其桥(跳号后 8791)上实测:TC-052 跨站 Origin 写设置端点得 403、同源得 200;TC-054 桥仅监听 127.0.0.1、从 LAN IP 访问失败。用例通过数 29 → 31。同轮还以真实请求复核了已在通过列表中的多职责链路:给「定位」职责配置模型后接入配置由 4 行变 9 行、家族按其自身模型推导、dsh-model@locate 实际命中该模型、清空后回落默认;以及 thinking/reasoning_effort 四种形态均成功、宿主没有的档位被安全忽略。浏览器 e2e 仍阻塞于 Midscene 浏览器扩展未连接(getBrowserTabList 超时)。
2026-10-23修正执行汇总计数(此前的通过数少计)已执行结果表实有 56 行且全部通过、ID 无重复;未执行表列 19 条,56 + 19 = 75 与用例总数吻合。此前汇总写的是 29(本轮一度改为 31),属漏更新——表格早已回填,汇总数字没跟着改。现按表格实测值修正为 56 通过 / 19 待补测。
2026-10-23本地 DSH Web 界面实测:6 条 UI 用例转为通过浏览器扩展仍未连接(e2e 的 getBrowserTabList 持续超时),改用 CDP 直连在真实 DSH Web 上执行断言脚本(断言内容与 e2e 用例同一套,仅执行方式由视觉驱动改为 DOM 断言):TC-015 四个职责 Tab 与 4 个下拉、TC-021 不存在的模型如实提示且不静默改选、TC-022 下拉 24 项全为识图模型、TC-024 留空语义在界面可读、TC-026 预览与复制按钮、TC-059 留空与已选可区分。通过数 56 → 62,未执行 19 → 13(仅剩 TC-023 需构造无识图模型状态)。同轮把 e2e 用例资产同步到新界面:断言文案由「指定测试模型」改为「各职责使用的模型」,并新增「四个职责 Tab 齐全 + 至少 4 个下拉」的页面内断言。
2026-10-23桥冒烟与全量 e2e 在 1.16.5 下通过,TC-011/TC-012 转为通过在 DSH Web + 真实 Chrome + Midscene 扩展下执行:test:bridge 冒烟三步全部「以页面内状态独立核实」通过(cli 1.16.5 / 浏览器侧 1.16.2);tests/e2e 全量 4/4 通过。这直接回答了升级评估最担心的一点——1.16.5 的判定变严没有造成既有用例系统性失败。期间 3 次失败逐条判定为用例资产缺陷(断言文案未跟随界面改名、脚本按包名而非显示名找条目、closest 选择器先命中标题按钮),已在 tests/e2e/cases/FNOS-013-plugin-ui.yaml 修正,不构成产品回归。通过数 62 → 64。
2026-10-23整体验收通过需求提出人确认 FNOS-021 整体验收通过。测试文档状态更新为「通过」;75 条用例中已执行的 64 条仍为通过,11 条未执行用例继续保留为未执行、不计入通过数,并作为不阻塞验收结论的遗留记录。

基于 VitePress 构建