跳到正文

wxa-runner 与 miniprogram-automator 对比 ​

miniprogram-automator 是微信官方的小程序自动化 SDK:用 Node.js 脚本控制微信开发者工具, 也能通过真机调试控制手机,跳转页面、读取页面 data、点击元素、mock wx 上的方法。

wxa-runner 不控制开发者工具,而是在普通的 Chrome 里用官方基础库运行小程序,测试直接用 Playwright 写。

两者都能写小程序的 E2E 测试,适用的场景不同,也可以一起用。

  • miniprogram-automator:在开发者工具的模拟器或真机上运行,要有装了开发者工具的 Windows 或 macOS 机器
  • wxa-runner:在浏览器里运行,可以无头运行,Linux CI 上不需要开发者工具;不支持真机

对比 ​

miniprogram-automatorwxa-runner
维护方微信官方社区开源项目,还在 0.x 阶段
运行在开发者工具的模拟器;也能通过真机调试控制手机普通的 Chrome,可以无头运行
开发者工具需要 1.02.1907232 及以上,并在安全设置里打开「CLI/HTTP 调用」不需要,没装时用内置的基础库和编译器;装了就用它的
操作系统开发者工具只有 Windows、macOS 版Windows、macOS、Linux。没有开发者工具时只支持 x86-64
真机支持,miniProgram.remote()不支持
基础库2.7.3 及以上默认 3.7.0 及以下,更新的版本要用 --baselib 指定
渲染、组件、生命周期官方基础库官方基础库
导航栏、tabBar、弹窗、原生 API开发者工具或微信客户端提供wxa-runner 自己实现,没实现的 API 调用后返回成功,测试里会报出来
写测试自己的 API(miniProgram、Page、Element),搭配任意 Node.js 测试框架;Python 有官方的 MiniumPlaywright 的 locator 和断言,加上 miniProgram fixture;不用 Playwright 时调用测试 API
mock 原生 APImockWxMethodmock,可以写在 setup 里,也可以写在用例里
网络请求用 mockWxMethod 替换 wx.request 的结果按 URL 规则拦截 wx.request,记录发出的请求,可以断言请求体
插件支持,有 callPluginWxMethod、mockPluginWxMethod只支持插件页面,要加 --devtools-login
截图screenshot(),只在开发者工具的模拟器里可用Playwright 的截图、录屏、trace
调试开发者工具的调试器Chrome DevTools

miniprogram-automator 一列取自官方文档。

怎么选 ​

用 miniprogram-automator 更合适:

  • 要在真机上跑自动化
  • 小程序用了插件的自定义组件,或者要测 wxa-runner 不支持的能力,如蓝牙、Worker 里的网络请求,见已知限制
  • 要用开发者工具才有的功能,如多账号调试、体验评分
  • 已经有装好开发者工具的 Windows、macOS 测试机,用例也已经用 automator 写好

用 wxa-runner 更合适:

  • 要在 Linux CI 上无头跑 E2E,不想维护装了开发者工具的机器
  • 想用 Playwright 的工具:UI 模式、trace、并行运行、自动重试的断言
  • 测试里要跳过登录、mock 大量接口:在 setup 里预置登录态,按 URL 拦截请求并断言请求体
  • 开发时用 Chrome DevTools 调试,改代码后热更新

一起用:日常提交在 Linux CI 上用 wxa-runner 跑,发版前用 automator 在开发者工具或真机上回归。预览、上传始终在开发者工具里做。

选 wxa-runner 前要确认的限制 ​

  • 不替代开发者工具:预览、上传、真机调试仍然要用开发者工具
  • 默认使用 3.7.0 及以下的基础库。更新的版本要用 --baselib 或 WXA_BASELIB 指定,超出已验证的范围
  • 导航栏、tabBar、原生 API 由 wxa-runner 实现,和真机可能有差异;发布前仍然要在真机上验证
  • 没有开发者工具时(如 Linux CI)只支持 x86-64,编译器版本较旧,模板运行时有少量差异
  • 真实项目上只验证过 uni-app(Vue 3)。Taro 等框架的编译产物也是标准的小程序代码,但还没在真实项目上验证

完整的列表见功能与限制。

和编译成 H5 再测试的区别 ​

uni-app、Taro 都能把项目编译成 H5,再用 Playwright 测 H5 页面。这时运行的是框架为 H5 重新实现的组件和 API, 和小程序里运行的不是同一套代码,setData、WXSS、自定义组件相关的问题可能测不出来。原生小程序也没有 H5 版本。

wxa-runner 运行的是 mp-weixin 编译产物,由官方基础库渲染,和小程序里运行的是同一份代码。

常用写法对照 ​

已经用 miniprogram-automator 写过用例时,可以参照下表改写。右边是 Playwright fixture 的写法:

miniprogram-automatorwxa-runner
automator.launch({ projectPath })playwright.config.ts 里的 wxaProject,fixture 自动启动
miniProgram.reLaunch('/pages/index/index')miniProgram.open('pages/index/index')
(await page.$('#submit')).tap()miniProgram.current.locator('#submit').click()
page.data()miniProgram.pageData()
miniProgram.currentPage()、miniProgram.pageStack()同名方法,返回每页的 path、query
miniProgram.navigateTo(url) 等跳转同名方法
miniProgram.mockWxMethod('getLocation', result)miniProgram.mock('getLocation', result)
miniProgram.restoreWxMethod('getLocation')miniProgram.unmock('getLocation')
miniProgram.mockWxMethod('request', result)miniProgram.route('GET **/api/feed', { body: { list: [] } }),只拦截匹配的请求
miniProgram.close()不用写,用例结束时 fixture 自动清理

基于 MIT 许可发布。内置基础库是微信官方代码,版权归腾讯所有