前言¶
DeepSeek Harness(DSH)采用“一切皆插件”的理念。在开发智能体应用时,测试微信小程序需要驱动真实运行环境。传统的 UI 测试容易受环境变化影响,且纯文本模型难以准确判断屏幕状态。dsh-mp-automator 插件通过选择器寻址、构建新鲜度门、几何断言等机制,为智能体提供了纪律层,确保测试动作的准确性和可靠性。
前置条件¶
使用本插件前,请确保满足以下环境要求:
- 操作系统:仅支持 macOS。
- 微信开发者工具:需在设置中开启服务端口(路径:设置 → 安全设置)。
- 依赖版本:
- Node.js >= 20
- dsh >= 0.1.0-rc.5
- vince-mp-cli >= 0.2.0 < 0.3.0
安装¶
在终端中执行以下命令将插件安装到你的 dsh profile 中:
dsh plugin --profile web add dsh-mp-automator
安装后,需在微信小程序项目目录(包含 project.config.json 的目录)中开启 dsh 会话。
核心能力¶
本插件提供八个 mp_* 工具,用于驱动真实运行的小程序:
mp_session:持久 DevTools 会话,支持重启、重连等操作。mp_doctor:项目体检,检查 CLI、编译产物新鲜度。mp_inspect:获取页面栈、数据、元素事实表、系统信息等。mp_query:选择器寻址,返回几何事实表(完全可见、部分可见、不可见等)。mp_act:执行点击、输入、长按、导航、免摄像头扫码等动作。mp_screenshot:截图落盘并生成几何事实表。视觉路由额外附真实截图。mp_console:获取报错日志和最新日志。mp_eval:在页面 VM 中执行 JavaScript 代码。
关键机制¶
为了解决智能体测试中的常见静默失败问题,插件内置了以下机制:
- 选择器寻址:元素 uid 会随重连或页面导航变化,插件强制使用选择器作为操作句柄,避免点到错误的元素。
- 构建新鲜度门:每次执行前检查编译产物是否最新,防止在过时的代码上测试。
- Fail-closed 机制:只有
ok === true算成功,任何解析错误或检查失败都会导致测试不通过,不会产生误导性的绿色结果。 - 双路径截图:
- 几何事实表:所有模型都能获取,包含元素坐标和可见性标志。
- 真实截图:视觉路由额外附真实 PNG 图片,供纯文本模型进行几何断言。
配置¶
在 dsh profile 的 cordis.patch.yml 中添加以下配置:
- id: mp-automator
config:
freshnessMode: block # block(默认) | warn | off
enableEval: true # mp_eval 开关
imageBudget: 3 # 视觉路由每会话最多附加截图数
screenshotDir: captures # 截图落盘目录
binPath: vince-mp # CLI 可执行文件路径
| 配置项 | 默认值 | 说明 |
|---|---|---|
freshnessMode |
block |
产物过期时是拒绝执行还是仅警告 |
enableEval |
true |
是否允许使用 mp_eval 执行 JS |
imageBudget |
3 |
视觉路由的图片预算,0 为完全禁用附图 |
screenshotDir |
captures |
截图保存的相对路径 |
binPath |
vince-mp |
vince-mp CLI 的路径 |
典型用法¶
- 测试页面跳转:使用
mp_query确认按钮可见,用mp_act点击,随后用mp_query验证新页面元素,最后用mp_console确认无报错。 - 免摄像头扫码:通过
mp_act的免摄像头scan注入功能模拟扫码操作。 - 几何断言:在纯文本模型中,通过
mp_screenshot返回的几何事实表(如fully-visible标志)来判断元素是否存在,而非依赖文字识别。
注意事项¶
- 字节限制:所有工具输出都受字节上限约束,长测试会话经历上下文压缩后依然可读。
- 原生浮层:
wx.showLoading等原生浮层不会出现在截图中,不应依赖截图来断言浮层出现。 - 版本窗口:依赖的
vince-mp-cli必须在>=0.2.0 <0.3.0范围内,否则会拒绝执行并提示升级。
总结¶
dsh-mp-automator 通过结构化的工具集和严格的门控机制,让智能体能够安全、可靠地驱动微信小程序进行自动化测试。它将测试纪律嵌入工具内部,而非依赖模型的自然语言指令,是构建高可靠性小程序测试流程的必要组件。