news 2026/6/6 23:02:34

微信小程序自动化测试—自定义测试(Minium)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信小程序自动化测试—自定义测试(Minium)

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

录制回放支持输入,文本查找,断言等自动化测试基础操作,无需编写代码,用例生成效率高,但是部分操作不支持,对复杂业务场景有局限性。如果用户希望适用复杂的业务场景,自主制定测试场景,可以尝试 自定义测试(Minium)方案。

小程序测试框架 Minium 是微信测试团队为小程序开发或测试同学提供的一套测试接口,它实现了miniprogram-automator 中小程序自动化所有能力,如可以直接触发小程序页面元素,设置页面数据,向AppService注入代码片段,Mock/Hook wx对象的接口等。此外,他还支持并封装了所有的原生操作都进行了封装,屏蔽了iOS/Android底层差异,实现了一套脚本在三端同时运行。

用户写好的Minium脚本,可以再本地执行,也可以直接上传到微信小程序云测服务执行,无需准备和维护真机环境。

一、编写用例

编写小程序自动化测试脚本,常见操作包括:

  • 基本操作:如页面跳转,元素定位及相关操作
  • 处理小程序API
  • 处理小程序的原生控件,如处理授权弹窗
  • 支持数据驱动测试

基本操作

对小程序页面元素定位,元素操作,或页面跳转等。简单的UI测试,例如以下用例

class FirstTest(minium.MiniTest): def test_network(self): # 页面跳转 self.app.navigate_to("/packageAPI/pages/get-network-type/get-network-type") # 元素定位 ele = self.page.get_element("button", inner_text="获取手机网络状态") # 元素点击 ele.click() # 打印元素文本 self.logger.info(self.page.get_element("/page/view/view[2]/view/view[1]/text").inner_text)

处理小程序API

Minium框架提供处理小程序开放API方法,根据需求选择相应方法,例如

  • mock_wx_method() — mock掉小程序API的调用
  • hook_wx_method() — hook小程序API的调用
  • call_wx_method() — 调用小程序的API

更多接口方法参考 Minium接口

调用小程序API获取回调信息用例,例如

class FirstTest(minium.MiniTest): def test_call_wx_method(self): """ 调用小程序API,获取回调对象 :return: """ sys_info = self.app.call_wx_method("getSystemInfo").get("result", {}).get("result") self.assertIsInstance(sys_info, dict, "is dict") self.assertTrue(True if sys_info else False, "not empty")

处理小程序原生控件

Minium提供了针对小程序内涉及原生控件(授权弹窗、弹窗、地图、分享小程序等)的操作封装
注意:部分封装的接口暂不支持IDE平台调用。若跑测平台是IDE,则需要在config.json中配置mock_native_modal配置项,后通过mock的方式实现

处理模态弹窗用例示例如下

class FirstTest(minium.MiniTest): def test_native(self): self.mini.clear_auth() self.app.redirect_to("/pages/testnative/testnative") called = threading.Semaphore(0) callback_args = None def callback(args): nonlocal callback_args called.release() callback_args = args # hook showModal方法,获取回调后执行callback self.app.hook_wx_method("showModal", callback=callback) self.page.get_element("#testModal").tap() time.sleep(2) # 点击弹窗 确定 self.native.handle_modal("确定") is_called = called.acquire(timeout=10) # 释放hook showModal方法 self.app.release_hook_wx_method("showModal") self.assertTrue(is_called, "callback called") self.assertDictContainsSubset( {"errMsg": "showModal:ok", "cancel": False, "confirm": True}, callback_args[0])

跑测平台IDE,config.json 配置 mock_native_modal 示例如下

"mock_native_modal": { "showModal": { "title": "test modal", "content": "modal content" }, }

数据驱动

自动化测试往往需多组数据测试,若采用录制回放测试,则需录制多个用例,不够灵活,所以若需测试同一个用例不同组测试数据,可使用**数据驱动(DDT)**模式,实现测试数据与测试脚本的分离,通过DDT将测试数据加载到脚本中。

数据驱动(DDT)有以下优点:

  • 灵活配置
  • 测试数据与功能代码分开
  • 易维护

下面是我们集成数据驱动测试(基于ddt封装)的例子

@minium.ddt_class class BaseTest(minium.MiniTest): @minium.ddt_case([], ["1", "2"]) def test_evaluate_sync(self, args): """ 向 app Service 层注入代码 同步返回结果 :param args: :return: """ # 参数 args: [] args: ["1", "2"] result = self.app.evaluate( "function(...args){return `test evaluate: ${args}`}", args, sync=True ) self.assertEqual( result.get("result", {}).get("result"), "test evaluate: {}".format(",".join(args)) )

此外,还能给具体的 test data 命名,自定义命名会体现在测试方法名中。数据驱动详情可参考 测试流程控制 & 数据驱动测试

二、执行用例

开发者编写完 Python 用例脚本后,可本地调试,也可在云测上测试。

本地执行

开发者将编写好的用例进行本地调试,minitest命令加载用例,初始化环境,开启自动化能力,进行环境检查,后执行用例。需IDE依赖,支持USB真机调试。

在初始化环境过程中遇到常见问题如下:

  • 开发者工具没有自动打开,先排查开发者工具自动化能力,进行环境检查
  • 配置了真机环境但无法拉起真机上的小程序,排查是否使用了真机调试2.0,如果是,切换回真机调试1.0
  • 报错traceback中有出现 _miniClassSetUp 的调用,确认下开发者工具上选用的基础库是最新的:开发者工具项目窗口右上角 -> 详情 -> 本地设置 -> 调试基础库

Minium为了保证同一套代码在IDE,Android,IOS上运行,环境组成比较复杂,所以测试用例的运行依赖于配置文件。支持配置运行平台、IDE监听端口号、连接手机的参数、账号信息、自动处理授权弹窗等等,可参考 项目配置

执行完用例后,会生成日志文件,提供本地测试报告,包括截图、运行日志、错误日志。具体实践可参考示例

云测服务测试

开发者可以将本地调试好的用例上传至云测,新建测试计划,新建Minium任务,可选择多平台真机,且支持多平台同时运行,无需用户部署和维护真机环境。

测试结束后,云测服务提供详细的测试报告,包括运行截图、日志信息,网络请求分析,性能分析等。

当用例执行失败时,会提供错误日志及错误行代码,方便用户排查错误原因。

具体操作可参考云测官方文档 自定义测试

对比

三、最佳实践

小程序开发者有两种,第一种是普通开发小程序,由小程序拥有者自行开发。还有一种是第三方服务商,小程序拥有者可以授权给他们代开发小程序。

对于第三方服务商测试团队来说,他们面临的情况会更加复杂。例如在明源云的测试团队中,授权给他们开发的地产开发商小程序非常多(1000+),并且每个小程序的页面数量也很多,手工测试显然无法覆盖业务需求。明源云测试同学希望可以利用自动化测试能力,解决这个问题。

如果用微信小程序自动化测试——录制回放的方案,每个页面都需要手动录制,耗时耗力。

这里他们使用了Minium框架编写自定义测试用例,目前已经有 90+ 用例执行。在编写用例时采用了Page Object模式(简称PO模式),将测试用例和页面元素定位、元素、元素操作等分离,提升用例复用性,降低维护成本。

在具体执行用例过程中,他们将云测服务和内部的devops流程打通,利用云测第三方接口,定时触发或者自动触发自动化任务,然后利用查询任务接口,再将测试结果同步到内部的用例管理平台,如果有问题提单给程序修复,实现整个流程闭环。

四、总结

自定义测试(Minium)的核心优点:

  • 完全自主定制测试场景
  • 灵活度高
  • 支持数据驱动测试
  • 结合云测服务,可以无需用户部署维护真机环境,并且提供详细的测试报告,并提供第三方接口方便用户打通devops流程

智能化Monkey,录制回放测试,自定义测试(Minium),三种自动化测试能力各有优缺点,如下所示

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 17:44:33

分类模型新手指南:云端GPU+镜像,零失败体验

分类模型新手指南:云端GPU镜像,零失败体验 引言:为什么选择云端分类模型? 分类模型是AI领域最基础也最实用的技术之一。简单来说,它就像一位智能分拣员,能够自动将各种数据归类——比如区分猫狗图片、判断…

作者头像 李华
网站建设 2026/6/5 17:44:56

Maya 渲染过程中频繁崩溃怎么办?原因分析与完整解决方案

原创声明:本文为原创技术文章,结合 Maya 官方文档、行业实践经验及常见渲染问题进行系统整理与总结,内容已进行结构化重写与技术归纳,非简单转载或翻译。转载请注明作者及来源,侵权必究。在三维动画、影视特效制作过程…

作者头像 李华
网站建设 2026/6/5 17:43:19

单目深度估计实战:手册

单目深度估计实战:手册 1. 引言 1.1 业务场景描述 在计算机视觉领域,从单张二维图像中恢复三维空间结构是一项极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件设备,成本高且部署复杂。随着深度学习的发展,单目深度估…

作者头像 李华
网站建设 2026/5/30 2:58:18

MiDaS部署指南:从原理到应用的完整教程

MiDaS部署指南:从原理到应用的完整教程 1. 引言:AI 单目深度估计的现实意义 在计算机视觉领域,深度感知一直是构建智能系统的核心能力之一。传统方法依赖双目摄像头或多传感器融合(如LiDAR)来获取空间深度信息&#…

作者头像 李华
网站建设 2026/5/21 11:22:45

Qwen3-VL-WEBUI镜像深度体验|4B模型的视觉理解新高度

Qwen3-VL-WEBUI镜像深度体验|4B模型的视觉理解新高度 1. 引言:为何Qwen3-VL-4B值得关注? 在多模态大模型快速演进的今天,阿里推出的 Qwen3-VL-4B-Instruct 模型凭借其全面升级的视觉-语言能力,成为边缘与云端部署场景…

作者头像 李华
网站建设 2026/6/5 14:46:39

从文本中快速提取关键信息|AI 智能实体侦测服务实战应用

从文本中快速提取关键信息|AI 智能实体侦测服务实战应用 在当今信息爆炸的时代,非结构化文本数据(如新闻、报告、社交媒体内容)呈指数级增长。如何从海量文本中快速、准确地提取出关键信息,成为企业、媒体、科研机构等…

作者头像 李华