dsh-test-framework:把空目录变成可约束 AI 的测试工作框架

前言

在 DeepSeek Harness(DSH)里做需求测试,常见卡点往往不是「会不会点页面」,而是流程纪律:空目录要手工搭骨架、子目录开会话时框架根 AGENTS.md 不加载、长需求文档被模型自行拆分或干脆不拆、跨文档关联和版本没人确认、环境与账密每次重问、报告格式失控。社区插件 dsh-test-framework(维护者 liujianqiao701)面向测试工程师,用 cordis 插件把「初始化骨架 + 会话内闸门 + 引导式 onboard」串成一条绕不过去的链。DSH 生态是「一切皆插件」;目录页在 SkillHub,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-test-framework 是发布在 npm 上的 DSH 工作流类插件:把一个空文件夹一键生成「测试工作框架」目录与规范文件,并在每次 AI 会话里注入框架状态与约束,配合工具与 runtime skill,强制走完「需求文档 → 子模块拆分确认 → 版本与跨文档关联 → 测试环境与账密登记」再开测。

实现上它是 cordis 插件,零第三方依赖(仅 Node 内置模块),无前端构建;适配 DSH(dsh.engines.dsh = "*"),运行环境要求 Node ≥ 20。源码与说明见 GitHub 仓库,许可证 MIT。

核心能力

痛点与对应机制

痛点 插件侧处置
新文件夹需手工搭 AGENTS.md、skills、模板与目录 test_framework_init 生成骨架;已存在则跳过、不覆盖
在 <产品>\<模块>\ 子目录开会话时,框架根规范静默不加载 初始化建 .git 标记;并注入实时「测试框架状态」段落
长 docx 被模型自行拆分或不拆 test_framework_doc_probe 探页数/章节/菜单等 → 命中判据须 ask_user_question 让人确认
逻辑写在另一份需求文档却未核对 闸门 crossDocChecked:必须问过;答「没有」须落 relatedDocs: []
需求路径不区分版本 闸门 versionsConfirmed;流程禁止用文件时间判版本
环境、账密反复口述 test_framework_record 写入产品级规范(人读 md + 机器读 json)
明文密码散落 明文仅落 _框架配置\环境与账密.md;框架登记.json 只记指针
旧报告堆在模块 report\ test_framework_report_gc 归档满 N 小时(默认 24)的报告到 _archive\报告归档\...;默认 dryRun: true 预演
多版经验揉进一份模块 SKILL.md 模块 SKILL.md 作索引;每版 skill\<版本>\SKILL.md 并存;test_framework_module_add 传 version 自动建并回填索引
外部项目规矩渗入本框架 lib\isolation.js 在会话开头说明项目根、将加载哪份 AGENTS.md,并拦截模块内外部工具工作目录等

七个工具

开工前先调 test_framework_status:ready: false 时不应直接开测。

工具 作用
test_framework_status 框架根、产品/模块、登记进度、缺项;含 MCP 与隔离相关提示
test_framework_init 空目录初始化框架;dryRun: true 仅看计划
test_framework_module_add 新增叶子菜单级模块目录与索引;可选 version 建版本 skill 并回填 AGENTS.md、产品级 模块路由.md
test_framework_link 跨端关联只读体检(不改文件);CLI 等价 node lib\cli.js link
test_framework_record 登记版本/拆分/关联/环境与账密等产品级规范
test_framework_doc_probe 零依赖探 docx:页数、章节、菜单命中、拆分判定等
test_framework_report_gc 调用框架内 archive_reports.py 做报告归档;默认预演

四个 runtime skill 与斜杠命令

自动加载的 skill 包括 test-framework(总契约)、test-framework-init、test-framework-onboard(测需求、拆模块、环境与账密引导)、test-framework-module。runtime skill 的 rank 为 250;框架内 <框架根>\skills\<同名>\SKILL.md(rank 100)会覆盖插件同名 skill。

插件还会在组装提示词时注入「测试框架状态」与契约边界(isolation.js);并提供 /tf-status、/tf-gate(查状态,不消耗模型回轮)。

前置条件:Playwright MCP

playwright MCP(mcp__playwright__browser_*)为必需,无替代路径:框架铁律要求真实浏览器与真实点击/输入,缺它相关验证无法执行。插件会在会话开头状态段与 test_framework_status 中提示「未检测到 playwright MCP(必需)」。

配置写在 DSH profile 的 cordis.patch.yml:增加 mcp-playwright(serverName: playwright,命令 @playwright/mcp),且须有头(窗口可见)。改完须重启 DSH(profile 层不支持热加载)。

建议项:keyword_mcp(取证互补)、可选 cr69_mcp(老内核/小视口兼容)。

自查:

npx dsh-test-framework doctor

或在框架工作区内:

node _plugin\dsh-test-framework\lib\cli.js doctor

安装与启用

插件以当前 dsh 进程权限运行;安装前请自行查看源码与 MIT 许可证。以下命令来自仓库 README。

从 npm 安装(常用)

dsh plugin --profile desktop add dsh-test-framework

安装后重启 DSH(profile 的 bundles 与 cordis.patch.yml 不支持热加载)。验证:会话中是否出现 test_framework_status,或执行:

npx dsh-test-framework doctor --profile desktop

从源码链接安装(改插件时用)

cd <插件目录>
node lib\cli.js install --profile desktop
node lib\cli.js install --profile desktop --apply

完成后重启 DSH,并用 node lib\cli.js doctor --profile desktop 自检(依赖与 bundles 两处都须有条目,否则为半装)。

默认安装走目录联接(link:),避免在 profile 上触发整棵 node_modules 的 pnpm install;若要用官方命令并跑 pnpm:

node lib\cli.js install --profile desktop --apply --official

卸载(不动框架工作区文件):

node lib\cli.js uninstall --profile desktop

可选配置

在 profile 的 cordis.patch.yml 中固定需求文档总根:

- id: test-framework
  config:
    reqDocRoot: '<你的需求文档总根目录>'

未配置时按「插件配置 → 环境变量 DSH_REQ_DOC_ROOT → <用户主目录>\需求业务文档」解析。

典型用法:onboard 引导链

test-framework-onboard 对应「测这份需求文档 / 新版需求 / 要不要拆 / 环境账密」等意图。README 给出的顺序如下。

  1. test_framework_status:先认账,看缺什么;定位需求文档路径(不许猜)。
  2. test_framework_doc_probe:页数、章节、菜单、删除线段落等 → 拆分判定;命中判据(如页数 > 100、多个顶级菜单名等)则停下,用 ask_user_question 让用户确认拆分方案。
  3. 跨文档关联:问本地还有哪些关联需求文档(无关联须落 relatedDocs: [])。
  4. 版本确认:明确本次测哪一版(禁止用文件时间判版本)。
  5. 环境与账密:经 test_framework_record 等产品级登记流程落盘。

空目录起步时,可先 test_framework_init,再用 test_framework_module_add 按叶子菜单建模块;跨端关联变更前可用 test_framework_link 做只读体检。

适用场景与注意

适合谁:在 DSH 里做业务需求测试、希望 AI 按固定目录与闸门执行、又需要 docx 探针与报告归档纪律的测试工程师或小团队。

务必注意:

  • 缺 playwright MCP 不是降级,而是铁律 10 类验证无法做;先 doctor 再开工。
  • 插件判断 MCP 依赖读 profile 的 cordis.patch.yml,「未检测到」不等于一定不存在;无法判定时会标明。
  • 卸载插件不会删除你已生成的框架工作区;敏感信息仍应只放在框架约定的账密文件中,并遵守本机安全策略。

结尾

dsh-test-framework 把「测试工作框架」从手工搭目录,变成可安装、可自检、可在会话里持续施加约束的 DSH 工作流插件:初始化、模块与版本 skill、docx 探针、登记与报告归档工具,以及 onboard skill,共同把需求测试的前置核对做成闸门。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜