为什么要进行小程序自动化测试
我们的小程序从2017年开始迭代一直持续到现在,主要功能几乎和APP保存一直,页面足够多,功能足够复杂。
我们每两周发一个版本,每个版本都需要测试同学手工验证测试用例,回归需要花费测试挺长时间,而且容易出现漏测。
那能否使用一些自动化工具即减轻测试工作量,又能避免漏测了?
答案是有,而且还不止一套,那哪一种最能符合我们的要求,帮助我们解决问题了?
无编码方案
无编码的方案主要是使用小程序开发者工具中的“云测”插件。
云测插件主要提供了三块能力
- Monkey
- Minium
- 录制回放
Monkey里有分了 智能化Monkey和自定义Monkey。

智能化Monkey
智能化 Monkey 是基于算法,自动识别可操作的节点,简历探索路径,实现对小程序页面的智能遍历,比较适合页面较少,功能简单的小程序。
自定义Monkey
自定义 Monkey 支持开发者通过配置Path+Query参数,直接打开小程序指定页面,以提升 Monkey 的覆盖率。
不管是哪一种Monkey的方式都无法做到我们想要的全面、精细化的覆盖测试。
不过测试结果中会有一些性能和体验评分,会给到一些不合规的提示,这样可以有针对性的进行性能和体验优化。

录制回放
录制回放可以通过开发者工具操作提前录制好,然后通过在云测服务中执行录制脚本来实现测试过程的回放,操作的过程中还可以保存数据,用于下一次回放时的Mock数据。
理论上该方式可以做到录制完一次测试流程后,基于相同的数据进行回放,到达自动化测试的目的,但现实是使用起来问题太多,基本不可行。
有如下问题:
- 录制时卡顿很严重,导致录制效率低下
- 录制时会出现丢失操作步骤的情况,导致用例丢失
- 回放时定位授权弹窗无法自动点击,需依靠手动点击,无法做到自动化
- 回放时也存在跟不上录制用例、步骤的问题,导致后续用例都校验失败
总体而言稳定性太差,不适合使用(调研时间为2022年5月),当然也有可能后续微信小程序团队不断优化,使用会逐步完善。
Minium
Minium 是微信团队开发的一套测试框架,可以自己编写测试用例,上次到云测,在云测服务中执行自动化测试,以达到完全自主定制测试场景的目的。
这个会是我们接下来要讲的重点,不过这个方案还是要自己编码,不算是无编码的方案。
无编码的方式由于以上的种种局限性,都不太适合我们这种业务量比较庞大的小程序。
编码方案
编码的方案,微信提供了两种,miniprogram-automator和minitest。
miniprogram-automator是基于NodeJs的,minitest是基于Python的,那我们应该使用哪一种了。
我们做了一个对比表
| 决策项 | minitest | miniprogram-automator |
|---|---|---|
| 语言 | python | javascript |
| DOM获取 | 支持 | 支持 |
| mock | 支持 | 支持 |
| api hook | 支持 | 不支持 |
| 文档 | 基于unittest,参考文档多 | 只有官方的api简短介绍 |
| 授权 | 支持授权操作api | 需要手动点击授权 |
| 模拟坐标点击 | 支持 | 不支持 |
| 测试报告 | 自动生成网页版测试报告 | 需要ide录制生成报告 |
| assert | api支持 | 手动记录 |
| 集成到云测 | 支持(使用说明) | 不支持 |
结论
- miniprogram-automator只支持基于dom的操作,不支持点击模拟,native功能受限,测试报告简单信息少,可参考文档少。
- minitest支持模拟点击,native功能完整(除短信验证码获取),基于unittest,参考文档多,测试报告信息多。
另外我们和微信团队沟通他们后续的重点也会基于minitest。
综上选择minitest作为小程序的自动化测试更为合适。
下一章我会基于minitest在讲解我们整个自动化脚本的框架设计。