前言¶
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 通過結構化的工具集和嚴格的門控機制,讓智能體能夠安全、可靠地驅動微信小程序進行自動化測試。它將測試紀律嵌入工具內部,而非依賴模型的自然語言指令,是構建高可靠性小程序測試流程的必要組件。