小程序功能测试和Web或App测试思路相通,但需要注意微信生态内的运行环境、API 限制、授权机制以及多端兼容。
1. 吃透需求和设计用例
需求拆解:小程序的入口(扫码、搜索、分享链接)、页面跳转关系及功能(如登录、支付、表单提交、音视频播放等)。
用例设计:包括正常流程、边界值、异常操作、网络切换、数据为空等情况。尤其要注意授权场景(拒绝授权、授权后撤回)和不同微信版本/基础库的兼容性。
2. 搭建测试环境
开发者工具:主要用于调试、模拟扫码、快速查看日志和网络请求。可模拟不同机型、网络(2G/3G/4G/WiFi)、屏幕比例。
真机调试:必须通过真机证实最后效果。因为在开发者工具中,WebSocket、蓝牙、NFC、相机扫码等硬件能力可能表现不一致。至少包括 iOS 和 Android 各一台主流机型。
测试号/体验版:使用微信小程序后台提供的测试号添加测试者,通过体验版或开发版进行测试,保证分享、支付等需要上线后权限的思路能提前走通(支付可走沙箱或0.01元测试)。
3. 功能测试点
页面渲染和跳转:
检查每个页面的加载速度、UI 是不是错乱、元素是不是可点击。
页面栈管理是不是正常(最多10层),使用 wx.navigateTo、redirectTo、switchTab 后回退途径是不是正确。
表单和输入:
键盘弹起时页面滚动是不是正常,textarea 是不是有透过问题。
输入特殊字符、emoji 的展示和存入是不是正常。
用户授权:
测试用户拒绝某项授权后,后续访问思路是不是降级(如显示引导开启授权的弹窗)。
检查 wx.getSetting 能否正确获取当前授权状态。
支付/卡券:
拉起支付、支付成功/失败/取消的回调处理是不是完整。
注意支付后页面数据同步(往往需要调用后端接口刷新)。
分享和消息通知:
分享途径、标题、封面图是不是正常(真机调试 + 体验版)。
订阅消息(subscribeMessage)在模板未授权的场景下是不是妥善处理。
网络和数据:
无网/弱网时页面提示是不是友好,加载失败是不是有重试按钮。
接口返回 null、空数组、超时等异常情况的页面展示。
4. 专项测试
兼容性测试:
在不同微信版本(新旧版)、不同系统版本(iOS/Android)、不同屏幕尺寸下证实界面展示和重要功能。
测试Android和iOS的兼容情况,如底部安全区域适配、手势返回。
性能测试:
使用开发者工具的性能面板或体验评分插件,检查setData调用频率、数据量大小和内存占用。
避免频繁大量setData导致白屏,保证长列表渲染使用虚拟化方案。
安全测试:
抓包检查请求是不是走 HTTPS,敏感数据(token、手机号)不应明文在请求/响应中暴露。
登录态检查:无 session 或 token 过期时,接口是不是有正确鉴权。
自动化测试:
小程序自动化可选用微信官方框架 minium:既能操控页面元素,又能获取小程序内部数据(如 Page.data),支持断言和截图。
如果涉及 WebView 内嵌 H5 页面,需切换 context 定位,或使用 Selenium 对 H5 部分单独测试。
示例(minium 基本用法):
python
import minium
mini = minium.Minium()
# 定位元素并点击
mini.page.get_element("view.button").tap()
# 获取页面 data
print(mini.page.data)
5. 常见情况
CSS 像素单位:使用 rpx 适配不同屏幕,但注意 1px 实线在部分机型可能变粗。
bindtap和catchtap:区别是是不是阻止事件冒泡,需要确定嵌套 view 的点击事件是不是按预期触发。
setData异步:直接在 setData 后读取 data 中的值可能仍是旧的,应在回调或使用观察器(observers)。
基础库版本差别:调用新API时需做wx.canIUse判断并提供降级方案。
第三方平台/插件:如果使用插件,要测试插件更新后主小程序功能是不是受影响。
抓包和 Mock:搭配 Charles/Fiddler 或微信开发者工具自带的 Mock 功能,可模拟接口异常、超时和特定数据返回。
体验评分:开发者工具体验评分功能可自动检测首屏时间、接口耗时、setData 频率等问题,作为性能参考。
多账号测试:支付、优惠券、会员等级等需要多用户角色,可利用微信“切换账号”功能或准备多个测试微信号。