深枭自动化测试工具:基于 DeepSeek Harness 与 Playwright 的桌面端自动化测试项目

自动执行测试、精准发现问题|作者个人站:https://softwarescience.top/projects/deepowl

分支1Tags1
文件最后提交记录最后更新时间
15 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
22 天前
15 天前
22 天前
22 天前
22 天前
22 天前
22 天前

深枭自动化测试工具

作者个人站:https://softwarescience.top/ · 本项目主页:https://softwarescience.top/projects/deepowl(版本、截图与下载都在那儿)

基于 DeepSeek Harness 构建桌面端自动化测试工具,这个想法在工程上完全可行。它的核心思路是:将 Harness 作为智能调度中枢,把“文档索引 → 需求分解 → 用例生成 → 夜间执行 → 浏览器驱动”串成一条自动化流水线。下面是一套可落地的技术方案。

一、整体架构设计

┌─────────────────────────────────────────────────────────┐
│                    DeepSeek Harness 主 Agent              │
│         (任务编排 / 子代理调度 / 上下文管理)                │
├──────────┬──────────┬──────────┬──────────┬─────────────┤
│ 文档索引  │ 需求分解  │ 用例生成  │ 测试执行  │ 报告生成    │
│ 插件      │ 插件      │ 插件      │ 插件      │ 插件        │
├──────────┴──────────┴──────────┴──────────┴─────────────┤
│              Cordis 插件契约层 (DSH 微内核)               │
├─────────────────────────────────────────────────────────┤
│   SQLite FTS5  │  Playwright  │  任务调度器  │  日志/报告  │
└─────────────────────────────────────────────────────────┘

DSH 采用微内核+Cordis 插件契约架构,内核负责任务调度、会话上下文管理、安全沙箱和模型通信,所有工具能力都封装成独立插件,支持按需加载。这意味着你可以把每个功能模块做成独立插件,按需组合。

Harness 内置了 subagent、workflow、ralph 等多 Agent 编排工具,无需额外安装即可让子代理并发执行独立任务。这正好适合“文档分析”和“用例生成”这类可并行的环节。

二、模块一:文档索引(非 RAG)

2.1 文档转换层

将历史文档(PDF、Word、Excel、PPT 等)统一转换为 Markdown。推荐使用 MarkItDown 或 markitme,它们支持 PDF、Word、Excel、图片、HTML 等格式转 Markdown,并保留结构化信息。markitme 还支持 --wiki 模式,能生成主 README 索引文件,包含目录、按文件分节以及基于关键词重叠的交叉链接。

2.2 索引与检索层

你明确要求非 RAG,也就是不做向量嵌入和语义检索,而是用全文索引来实现快速搜索。推荐方案:

方案 技术栈 特点
askdocs Node.js + SQLite FTS5 按标题切分文件,索引到 SQLite,通过 MCP 协议给 Agent 提供搜索工具
docs-search Python 标准库 + SQLite FTS 零依赖,毫秒级检索,支持增量重建
自建 FTS5 SQLite FTS5 完全可控,BM25 评分,支持中文分词

推荐用 askdocs 作为 MCP 工具接入 DSH——它正是为“让 Agent 搜索 Markdown 文档”而设计的。Agent 通过 search_docs 和 read_doc 两个工具就能完成文档检索,关键词搜索不需要嵌入向量,也不需要向量数据库。

在 DSH 会话中,可以将 askdocs 注册为 MCP 服务器,Agent 就能在写计划、分解需求时自动检索历史文档。

三、模块二:需求分解与测试用例生成

3.1 利用 DSH 的子代理进行需求分解

在 DSH 中创建一个 “测试规划师”子代理,给它配置:

  • 系统提示词:要求它从 Markdown 文档中提取功能点,按“功能模块 → 测试项 → 验收标准”三级结构输出
  • 可用工具:askdocs 的 search_docs 和 read_doc
  • 输出格式:结构化的 Markdown 测试方案

DSH 的 subagent 工具可以在完全独立的上下文中运行子代理,不继承父会话历史,任务完成后返回结果。这正好适合“需求分解”这类需要专注分析的任务。

3.2 测试用例生成的提示工程

参考已有的 AI 测试用例生成实践,提示词可以这样设计:

角色:你是一名资深测试工程师。
任务:基于以下需求文档片段,生成测试用例。
要求:
1. 每个用例包含:用例ID、标题、前置条件、操作步骤、预期结果、优先级
2. 覆盖正常场景、边界条件、异常场景
3. 输出为表格格式
4. 引用文档来源(文件名 + 章节)

DSH 的 ralph 工具可以防止 Agent 在同一个思路上反复钻牛角尖——它每轮换一个新 Agent,配合结构化交接报告,适合用例生成这种需要迭代精化的场景。

3.3 测试方案的形成

将需求分解结果和用例生成结果合并为一份完整的测试方案:

# 测试方案:XXX功能模块

## 1. 测试范围
## 2. 需求追溯矩阵
| 需求ID | 需求描述 | 对应用例 | 覆盖状态 |
## 3. 测试用例清单
## 4. 执行计划(含夜间任务配置)

四、模块三:浏览器自动化驱动

4.1 DSH 浏览器插件选型

DSH 生态中已有多个成熟的浏览器自动化插件:

插件 能力 适用场景
dsh-browser-playwright Playwright 驱动,快照 + ref 定位 确定性强的测试执行
dsh-bridge-browser 连接已有 Chrome 标签页,保留登录态 需要登录的业务测试
dsh-zcode-browser-use 无头模式 + 侧边栏镜像 夜间静默执行

推荐 dsh-browser-playwright,因为它使用 快照 + ref 定位(而非 CSS 选择器),确定性更强,token 消耗更少。它自动探测 chromium → chrome → msedge → edge 通道,本机有 Chrome 就零下载。

4.2 显式 vs 隐式操作

  • 显式操作:click(ref)、fill(ref, text)、press(key) —— 确定性高,适合回归测试
  • 隐式操作:让 Agent 理解页面语义后自主决定操作路径 —— 适合探索性测试

在夜间执行场景中,建议显式操作为主(稳定),隐式操作为辅(发现新问题)。

4.3 桌面应用测试

如果测试目标包含 Electron 桌面应用,Playwright 原生支持 Electron 测试,可以启动 Electron 应用并在主进程和渲染进程中进行操作。

五、模块四:夜间调度与执行

5.1 调度机制

DSH 支持 CLI / 无头模式,适合脚本化调度。夜间调度可以用:

  • Windows:任务计划程序(Task Scheduler)触发 dsh CLI 命令
  • macOS/Linux:cron job 触发
  • 跨平台:用 Node.js 的 node-schedule 或 cron 库
# 示例:每天凌晨 2 点执行全量回归
0 2 * * * /usr/local/bin/dsh run --preset test-nightly \
  --input "执行夜间全量回归,读取 test-plan.md,运行所有 P1/P2 用例"

5.2 无头模式注意事项

Playwright 默认以无头模式运行。但需注意:

  • Windows 锁屏/注销时:无头模式可运行,但注销状态下浏览器自动化可能受限
  • 建议:保持用户会话处于锁屏但未注销状态,或使用专用测试机

5.3 分片并行

对于大量用例,可以用 DSH 的 workflow 工具将用例分片,并行启动多个子代理同时执行。每个子代理拥有独立的浏览器会话,互不干扰。

六、模块五:报告与反馈

夜间执行完成后,DSH 自动生成结构化报告:

# 夜间回归测试报告 (2026-10-02 02:00 - 04:32)

## 执行摘要
- 总用例:156 | 通过:148 | 失败:6 | 跳过:2
- 通过率:94.9%

## 失败用例详情
| 用例ID | 失败步骤 | 错误信息 | 截图 |
|--------|---------|---------|------|

## 新增缺陷建议
(由子代理基于失败模式自动归纳)

报告可以保存为 Markdown 并推送到指定位置(邮件、企业微信、Jira 等)。

七、实施路线图

阶段 工作内容 产出
第 1 周 部署 DSH,安装 askdocs + dsh-browser-playwright,转换 3-5 份历史文档 可搜索的 Markdown 索引
第 2 周 配置“测试规划师”子代理,用 1-2 个需求做端到端验证 测试方案模板 + 首批用例
第 3 周 实现夜间调度脚本,用 Playwright 跑通 5-10 个用例 可运行的夜间流水线
第 4 周 接入报告生成,配置失败通知,优化用例覆盖率 完整闭环

关键风险与应对

风险 应对
文档格式不统一 markitme 的 --human 模式自动处理 frontmatter、TOC、交叉链接
用例生成质量不稳定 用 ralph 工具多轮迭代,每轮换新 Agent 评审
夜间执行环境不稳定 保持锁屏不注销;配置重试机制(--retries=1)
登录态过期 使用 dsh-bridge-browser 连接已有 Chrome 会话,保留 Cookie

这套方案的核心逻辑是:DSH 做编排,插件做能力,SQLite FTS5 做索引,Playwright 做执行。每个模块都可以独立开发和替换,不会牵一发而动全身。

八、本仓库的工程实现

方案已按上面的五个模块落地为一个可直接运行的 Bun/TypeScript 工程(SQLite FTS5 索引 + Playwright 执行, 非 RAG)。完整使用说明见 docs/USAGE.md。

bun install                     # 依赖走国内镜像(bunfig.toml 已配 npmmirror)
bun run bin/deepowl.ts doctor   # 环境自检:运行时 / FTS5 / 浏览器 / LLM / 配置

deepowl docs index              # ① 文档索引(md/txt/html/docx/xlsx/pptx/pdf → Markdown → FTS5)
deepowl docs search "登录"      #    检索;也可 deepowl docs mcp 作为 MCP 服务器给 DSH 用
deepowl plan --topic "登录"     # ② 需求分解 + ③ 用例生成 → plans/<slug>.md|.plan.json
deepowl plan --doc "需求.docx" #    也可直接指定/上传需求文档(md/txt/html/docx/xlsx/pptx/pdf,无需先建索引)

bun run examples/demo-app/serve.ts                 # 演示应用(另一个终端)
deepowl run examples/test-plan.example.md          # ④ 浏览器执行(快照 + ref 定位,分片并行)
deepowl night                                      # ⑤ 执行 + 报告 + 推送
deepowl task install --start 02:00                 #    或注册 Windows 任务计划程序
deepowl pack --zip                                 # ⑥ 打离线制品包(自带运行时/依赖,可离线再装)
cd src-tauri && cargo build --release              # ⑦ 桌面客户端(Tauri,产物 DeepOwl.exe)
方案模块 实现位置 关键命令
文档转换 src/docs/convert.ts(零依赖 OOXML 解析 + markitme/markitdown 兜底) deepowl docs index
索引与检索 src/docs/{chunker,indexer,search,reader}.ts(SQLite FTS5 trigram + BM25) deepowl docs search
MCP 工具面 src/docs/mcp.ts(search_docs / read_doc) deepowl docs mcp
需求分解 src/planner/{prompts,llm,decompose}.ts deepowl plan
用例生成 src/planner/cases.ts + 追溯矩阵 src/planner/plan.ts deepowl plan
浏览器驱动 src/runner/{refs,driver,executor}.ts(ARIA 快照 + ref 定位) deepowl run
夜间调度 src/schedule/{cron,schedule,win-task}.ts deepowl night / daemon / task install
报告与推送 src/report/{report,notify}.ts deepowl report
离线制品包 src/pack/{pack,zip}.ts(自带 Bun 运行时 + 依赖闭包 + 安装脚本 + sha256 清单,自研 ZIP 写入) deepowl pack --zip
桌面客户端 src-tauri/(Tauri v2 / Rust 薄壳)+ ui/(静态前端,无 npm 依赖) cargo build --release → DeepOwl.exe

与方案的几点工程取舍:

  • GUI 是薄壳:桌面客户端(Tauri v2 + 静态前端)不重复实现业务逻辑,只调用同一个 CLI 并呈现结果, 因此一条命令行的回归修复同时惠及 CLI、MCP 与桌面端。
  • 零浏览器下载:用 playwright-core + 自动探测本机 msedge/chrome 通道,装机即有 Edge 的机器开箱可跑。
  • 中文检索不引分词器:FTS5 使用 trigram 分词器做 3 字符子串匹配 + BM25 排序,3 字符以下的查询自动退化为 LIKE, 既满足「全文索引、非 RAG」,也不依赖 jieba 之类的分词组件。
  • 用例双层表示:方案 Markdown 里的 deepowl-case 围栏 JSON 是执行器的唯一输入,人类可读部分可自由改写而不影响执行。

九、开发者

项 内容
开发者 CodeLife leon、omp
项目命名空间 top.softwarescience(桌面端 bundle identifier:top.softwarescience.deepowl)
许可证 Apache-2.0(见 LICENSE 与 NOTICE)
仓库 https://gitcode.com/CoderLife/DeepOwl

deepowl about 与桌面客户端「⚙ 设置 → 关于」展示同一份信息(来源为 package.json)。

关于

这个项目由 CodeLife Leon 独立开发与维护。更多项目、各项目发版信息、赞赏与联系方式都在个人站:

问题反馈与需求建议:优先在仓库提 Issue,也可以邮件 virgil_lgp@163.com。

项目介绍

自动执行测试、精准发现问题|作者个人站:https://softwarescience.top/projects/deepowl

https://softwarescience.top/projects/deepowl定制我的领域