【测试】小程序测试操作手册
2026/7/2 3:00:43 网站建设 项目流程

文章目录

  • 微信小程序测试实战
    • 一、环境与工具安装
      • 1.1 微信开发者工具
      • 1.2 vConsole 调试面板
      • 1.3 Charles 抓包配置
    • 二、自动化测试:minium 从0到1
      • 2.1 环境搭建
      • 2.2 编写第一个测试
      • 2.3 运行测试
      • 2.4 连接真机运行
      • 2.5 数据驱动测试
      • 2.6 minium 常用 API 速查
    • 三、Airtest:图像识别做小程序自动化
      • 3.1 Airtest IDE 安装
      • 3.2 连接微信小程序
      • 3.3 用图像识别写用例
    • 四、性能分析与体验评分
      • 4.1 微信 Audits 面板
      • 4.2 手动性能检测
      • 4.3 真机性能测试
    • 五、兼容性测试:云测平台实操
      • 5.1 WeTest(腾讯云测)使用流程
      • 5.2 必须覆盖的机型清单(只做参考)
    • 六、完整执行流程:从接到需求到提交报告
      • 6.1 一个迭代周期的测试流程
      • 6.2 自检清单
      • 6.3 Bug 报告模板
    • 七、常用命令速查手册

微信小程序测试实战

搭建测试环境、配置抓包工具、编写自动化脚本、执行性能分析和兼容性测试

一、环境与工具安装

1.1 微信开发者工具

这是小程序测试最核心的工具,没有之一。它集成了模拟器、调试器、性能面板、代码上传四大功能。

初始配置步骤

第一步:打开开发者工具 → 选择"小程序" → 点击"+"新建项目

项目名称:爱听外语测试 目录:选择一个本地空文件夹 AppID:填入小程序AppID(如果是测试其他人的小程序选"不使用云服务-测试号") 开发模式:小程序 后端服务:不使用云服务

第二步:工具右上角 → 详情 → 本地设置 → 确认以下配置:

配置项建议值说明
不校验合法域名勾选(开发阶段)允许请求非HTTPS或未配置的域名
不校验 TLS 版本勾选兼容自签名证书
启用自动编译勾选代码改动后自动刷新
基础库版本选择"灰度占比最高"测试主流用户使用的版本

模拟器操作

功能操作方式
切换手机型号模拟器顶部下拉选择(iPhone 14 Pro / Samsung Galaxy S21 等)
切换网络工具栏 → 网络 → 选择 2G/3G/4G/WiFi
设置定位工具栏 → 更多 → 选择模拟位置
页面截图模拟器右上方相机图标
扫码进入模拟器右上角 → 选择"通过二维码编译"
真机预览工具栏 → 预览 → 扫码在真机上打开

1.2 vConsole 调试面板

vConsole 是小程序内嵌的调试工具,类似浏览器 F12。在模拟器中自动启用,真机上需要手动开启。

真机开启 vConsole 的方法

在开发者工具上传代码时,选择开发版而不是体验版。开发版默认开启 vConsole。

// app.js 或任意页面if(wx.getAccountInfoSync().miniProgram.envVersion!=='release'){// 方式1:通过 wx.setEnableDebug 开启wx.setEnableDebug({enableDebug:true});// 方式2:或者点击小程序右上角 → 关于 → 蓝色Logo点3次}

页面右下角会出现绿色按钮[vConsole],点击打开面板:

标签页功能测试用途
LogJS console日志查看 console.log/error 输出,确认代码执行到哪一步
System系统信息查看微信版本、基础库版本、手机型号、网络类型
Network网络请求查看每个请求的URL/参数/响应内容/耗时
ElementWXML结构查看页面DOM结构(类似浏览器Elements标签)
Storage缓存数据查看/编辑/删除 Storage 中的键值对

1.3 Charles 抓包配置

小程序强制 HTTPS,要想用 Charles 抓包看请求内容,需要配置 SSL 证书。

开始抓包

在 Charles 中应该能看到小程序的 HTTPS 请求了。查看请求内容时,切到Contents标签可以看到解密后的 JSON 数据。

常见问题排查

现象原因解决
请求显示unknownSSL Proxying 没配对该域名添加*:443通配符
请求显示红色叉号证书未信任或域名校验失败在开发者工具中勾选"不校验域名"
完全看不到请求代理IP或端口设置错误检查手机代理配置的IP和8888端口
部分请求加密看不到小程序做了 SSL Pinning暂无法破解(安全机制)

二、自动化测试:minium 从0到1

minium 是微信官方推荐的小程序自动化测试框架,底层通过 WebSocket 连接微信开发者工具,操控模拟器和真机。

2.1 环境搭建

# 1. 安装 miniumpipinstallminium# 2. 检查版本minium--version# 输出: minium 1.5.0 (或其他最新版)# 3. 查看文档minium doc# 4.开发者工具配置开发者工具 → 设置 → 安全 → 开启"服务端口"→ 记录端口号(默认9420)

2.2 编写第一个测试

# test_login.pyimportminiumclassLoginTest(minium.MiniTest):"""登录模块测试"""defsetUp(self):"""每个用例执行前重新打开小程序"""super().setUp()# 重新启动到首页self.app.relaunch("/pages/login/login")deftest_phone_input_valid(self):"""测试输入合法手机号"""# 找到手机号输入框phone_input=self.page.get_element("input.phone-input")phone_input.input("13800138000")# 断言输入值正确self.assertEqual(phone_input.value,"13800138000")deftest_phone_input_empty(self):"""测试空手机号点击登录"""# 不输入手机号,直接点登录按钮login_btn=self.page.get_element("#login-btn")login_btn.click()# 等待toast提示出现self.page.wait_for(2)# 获取toast文本并断言toast=self.page.get_element(".wx-toast")self.assertIn("请输入手机号",toast.inner_text)deftest_login_with_code(self):"""测试验证码登录完整流程"""# 输入手机号self.page.get_element("input.phone-input").input("13800138000")# 点击获取验证码self.page.get_element("#get-code-btn").click()# 等待倒计时结束或验证码返回(模拟环境验证码固定为000000)self.page.wait_for(3)# 输入验证码code_input=self.page.get_element("input.code-input")code_input.input("000000")# 勾选用户协议self.page.get_element("#agree-checkbox").click()# 点击登录self.page.get_element("#login-btn").click()# 等待跳转首页self.page.wait_for(3)# 断言:跳转到首页后,页面路径应为pages/index/indexcurrent_page=self.app.get_current_page()self.assertIn("pages/index/index",current_page.path)# 截图保存self.page.capture("login_success.png")deftest_login_without_agreement(self):"""测试不勾选协议点击登录"""self.page.get_element("input.phone-input").input("13800138000")self.page.get_element("#get-code-btn").click()self.page.wait_for(2)self.page.get_element("input.code-input").input("000000")# 不勾选协议,直接点登录self.page.get_element("#login-btn").click()# 断言登录按钮仍为不可用状态(或是弹出提示)# 方式1:检查按钮 disabled 属性login_btn=self.page.get_element("#login-btn")self.assertTrue(login_btn.get_attribute("disabled"))deftearDown(self):"""每个用例执行后清理"""self.app.restore()# 恢复小程序到初始状态

2.3 运行测试

# 运行单个测试文件minium-p9420-mtest_login.py# 运行指定的测试类minium-p9420-mtest_login:LoginTest# 运行指定的测试方法minium-p9420-mtest_login:LoginTest:test_phone_input_valid# 运行整个测试目录minium-p9420-mtests/# 生成HTML测试报告minium-p9420-mtests/--reporthtml --report-path ./reports# 生成JSON报告minium-p9420-mtests/--reportjson --report-path ./reports

参数说明

参数说明
-p/--port开发者工具服务端口(默认9420)
-m/--module测试文件或模块路径
--report报告类型:html / json
--report-path报告输出目录
-c/--config配置文件(配置多设备、多平台等)

2.4 连接真机运行

minium 除了操作模拟器,还支持连接真机运行:

# config.json - minium 配置文件{"platform":"Android",//iOS 或 Android"device_desire":{"serial":"设备序列号"//adb devices 查看},"debug_mode":"wifi",//连接方式:wifi 或 usb"close_foreground":true,//每次测试前重启小程序"auto_relaunch":true//发生异常时自动重启}
# 使用配置文件在真机上运行minium-cconfig.json-mtest_login.py

2.5 数据驱动测试

# test_login_ddt.pyimportminiumclassLoginDDT(minium.MiniTest):deftest_login_scenarios(self):"""数据驱动:多组手机号和验证码"""test_data=[{"phone":"13800138000","code":"000000","expected":"success"},{"phone":"","code":"000000","expected":"empty_phone"},{"phone":"13800138000","code":"","expected":"empty_code"},{"phone":"13800","code":"000000","expected":"invalid_phone"},{"phone":"13800138000","code":"111111","expected":"wrong_code"},]fori,datainenumerate(test_data):withself.subTest(data["expected"]):self.app.relaunch("/pages/login/login")# 输入手机号self.page.get_element("input.phone-input").input(data["phone"])# 输入验证码ifdata["code"]:self.page.get_element("#get-code-btn").click()self.page.wait_for(2)self.page.get_element("input.code-input").input(data["code"])# 勾选协议self.page.get_element("#agree-checkbox").click()# 点击登录self.page.get_element("#login-btn").click()self.page.wait_for(2)# 根据预期断言ifdata["expected"]=="success":current_page=self.app.get_current_page()self.assertIn("pages/index/index",current_page.path)elifdata["expected"]=="empty_phone":toast=self.page.get_element(".wx-toast")self.assertIn("手机号",toast.inner_text)# 截图self.page.capture(f"login_{data['expected']}.png")

2.6 minium 常用 API 速查

# ---- 页面操作 ----self.page.get_element("选择器")# 获取单个元素self.page.get_elements("选择器")# 获取元素列表self.app.get_current_page()# 获取当前页面对象self.app.relaunch("页面路径")# 重启小程序到指定页面# ---- 元素操作 ----element.input("文本")# 输入文本(仅input/textarea)element.click()# 点击element.tap()# 轻触(模拟手指点击)element.long_press(duration=2000)# 长按(毫秒)element.scroll_to()# 滚动到可见element.swipe(x,y,direction="up")# 滑动# ---- 元素属性 ----element.inner_text# 元素内文本element.value# input 的当前值element.attribute("属性名")# 获取任意属性element.get_attribute("disabled")# 判断是否禁用# ---- 等待与条件 ----self.page.wait_for(秒数)# 固定等待self.page.wait_for_present("选择器")# 等到元素出现self.page.wait_for_hidden("选择器")# 等到元素隐藏# ---- 截图 ----self.page.capture("文件名.png")# 截图# ---- 执行JS ----self.page.evaluate("JS代码")# 在页面中执行JS

三、Airtest:图像识别做小程序自动化

如果觉得 minium 的元素定位不够稳定(class 名随框架编译变化),可以用 Airtest 的图像识别定位来补充。

3.1 Airtest IDE 安装

# 安装 Airtest 框架pipinstallairtest# 安装 Airtest IDE可视化编辑器# 下载地址: https://airtest.netease.com/

3.2 连接微信小程序

fromairtest.core.apiimport*fromairtest.cli.parserimportcli_setup# Android 手机连接(USB 或 WiFi ADB)connect_device("Android://127.0.0.1:5037/设备序列号")# 启动微信小程序(通过 adb 调起)# 方式:先打开微信,通过微信 schema 打开小程序start_app("com.tencent.mm")# 打开微信sleep(3)# 点击微信底部"发现"→"小程序"→搜索目标小程序进入# ...(通过图像识别逐步点击)

3.3 用图像识别写用例

fromairtest.core.apiimport*classMiniProgramTest:deftest_login_by_image(self):"""通过截图定位按钮"""# 找到手机号输入框(截一张输入框区域的图保存为 phone_input.png)touch(Template("phone_input.png",threshold=0.8))# 输入手机号text("13800138000")# 找到"获取验证码"按钮touch(Template("get_code_btn.png",threshold=0.8))sleep(3)# 输入验证码touch(Template("code_input.png"))text("000000")# 点击登录按钮touch(Template("login_btn.png"))# 等待登录成功页面出现wait(Template("home_page_title.png"),timeout=10)# 断言:首页出现了assert_exists(Template("home_page_title.png"),"登录成功")deftest_multi_device(self):"""多设备交叉测试"""# 切换连接另一台设备device_2=connect_device("Android://127.0.0.1:5038/另一台设备序列号")# 同样用图像识别测试...

图像识别的优缺点

维度优点缺点
定位方式所见即所得,截图就是定位器分辨率、DPI 变化后截图失效
维护成本直观,产品也能看懂按钮文案改了得重截
跨平台iOS/Android 同一张截图通用需要真机,模拟器要单独截
适用场景App 端到端冒烟测试频繁变化的页面

核心流程用 Airtest 图像识别做快速冒烟,增量功能用 minium 做精细断言。

四、性能分析与体验评分

4.1 微信 Audits 面板

这是官方提供的性能评分工具,无需安装任何额外东西:

开发者工具 -> 调试器 -> 选择 Audits 标签 -> 点击"开始"按钮

等待30秒左右,系统会给出一份评分报告:

体验评分:82分 扣分项: 主包过大(1.8MB / 2MB):-5分 存在未压缩的图片(bg_home.png 426KB):-5分 首屏 setData 调用次数过多(12次):-3分 setData 单次传输数据量过大(365KB):-5分

每一项扣分点都附带了具体文件位置和代码行号,点击可以直接跳转。

4.2 手动性能检测

有些指标 Audits 不提示,需要手动验证:

① 检测 setData 性能

调试器 → AppData 标签 → 右上角"Data 传输量"开关打开 操作页面观察每次 setData 传输的数据量 单次不应超过 256KB(超过的话页面会明显卡顿)

② 检测页面切换内存

调试器 → Memory 标签 → 勾选"Snapshot" 进入页面A → 拍一次快照 跳转到页面B → 再拍一次快照 返回页面A → 再拍一次 对比三次快照的内存差值 如果返回A后内存明显高于第一次,说明A页面的资源没释放

③ 检测包体积

工具栏 → 详情 → 本地代码 → 查看每个文件的体积排行 找出超过 200KB 的图片 找出超过 500KB 的 JS 文件 考虑拆分分包或代码优化

4.3 真机性能测试

开发者工具的模拟器性能无法代表真实手机的性能。真机测试才是有意义的。

使用 PerfDog 测试真机性能

关键指标

指标参考标准说明
平均 FPS> 55滑动列表时应保持接近60
内存峰值< 300MB(Android)/ < 200MB(iOS)微信本身占内存,小程序在此基础上增量要控制
CPU 平均< 20%空闲时接近0,操作时短暂升高
首次加载耗时< 3秒从点击进入到首屏渲染完成

五、兼容性测试:云测平台实操

手工兼容性测试需要大量真机,个人和中小团队一般用云测平台。

5.1 WeTest(腾讯云测)使用流程

步骤一:上传小程序代码

1. 登录 WeTest 控制台:https://wetest.qq.com/ 2. 选择"小程序测试" → 上传体验版二维码或小程序AppID 3. 选择测试类型:兼容性测试

步骤二:选择机型

WeTest 支持按条件筛选:

系统:Android / iOS / 鸿蒙 品牌:华为/小米/OPPO/vivo/三星/荣耀/... 系统版本:Android 10-15 各版本分别勾选 价格区间:低端(0-1500) / 中端(1500-4000) / 高端(4000+) 上市时间:近1年 / 近2年 / 近3年 微信版本:自动安装最新版 / 指定版本

一般选择 10-20 台主流机型即可。

步骤三:配置测试脚本

测试模式:自动化测试(上传 minium/Airtest 脚本)/ 人工测试(远程操控) 测试时长:根据脚本执行时间设定

步骤四:执行并查看报告

报告内容: 每台手机的测试通过/失败数 失败时的截图和日志 启动时间、页面加载时间 Crash 日志(如果有) 型号 × 系统版本兼容性矩阵图

5.2 必须覆盖的机型清单(只做参考)

优先级机型系统理由
P0iPhone 14 ProiOS 17+iOS 主流机型
P0iPhone 12iOS 15+iOS 旧机型代表
P0华为 Mate 60HarmonyOS 4鸿蒙旗舰
P0小米 14Android 14Android 旗舰
P1OPPO Reno 系列Android 13+线下出货量大
P1vivo X 系列Android 14+年轻人用户多
P1三星 S 系列Android 14国际主流
P2荣耀 90Android 13华为替代用户
P2折叠屏机型Android 14折叠屏适配
P2低端机(Redmi 12)Android 12低端机性能验证

六、完整执行流程:从接到需求到提交报告

6.1 一个迭代周期的测试流程

Day 1: 收到提测邮件 → 阅读需求文档 → 设计测试用例 Day 2: 开发者工具验证功能 → 模拟器核心用例初跑 Day 3: 真机冒烟测试(自备2-3台)→ 提单(bug报告) Day 4: 开发修bug → 回归验证 Day 5: 云测平台提交兼容性测试(10-20台) Day 6: 云测报告分析 → 遗留问题评估 Day 7: 自动化脚本补充 → 发布上线

6.2 自检清单

主包体积 ≤ 2MB(开发者工具 → 详情) 分包总体积 ≤ 20MB 所有请求走 HTTPS(Network 面板检查) 无 console.log 打印敏感信息(手机号/Token/身份证) 所有页面栈深度不超10层 页面切换后无内存泄漏(Memory 面板对比) 基础库最低版本已设置(app.json 中的 "libVersion") 首屏 setData 无单次超 256KB 调用 大图已压缩(单张 ≤ 200KB)

6.3 Bug 报告模板

## Bug标题:[登录] iOS 15 下获取验证码按钮点击无反应 **严重程度**:高 **优先级**:P0 **复现机型**:iPhone 12, iOS 15.6 **微信版本**:8.0.49 **基础库版本**:3.5.2 **复现步骤**: 1. 打开小程序进入登录页 2. 输入手机号 13800138000 3. 点击"获取验证码"按钮 4. 观察按钮状态 **实际结果**:按钮无任何反应,未弹出Toast,未收到验证码 **预期结果**:按钮置灰并开始60秒倒计时,收到短信验证码 **复现概率**:5/5(100%) **截图**: [附上截图] **推测原因**: iOS 15 下该按钮的 `bindtap` 事件可能被父容器拦截。 在 iOS 16+ 和 Android 上正常。

七、常用命令速查手册

# ---- 微信开发者工具命令行 ----# Windows 工具默认路径"C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat"# 打开指定项目cliopen--project"D:\mini-program-project"# 预览(生成二维码)cli preview--project"D:\mini-program-project"--qr-format image --qr-output preview.png# 上传代码cli upload--project"D:\mini-program-project"--version"1.0.0"--desc"测试版上传"# ---- minium 命令 ----minium-p9420-mtests/# 跑全部用例minium-p9420-mtests/test_login.py# 跑指定文件minium-p9420-mtests/--reporthtml# 生成HTML报告minium-cconfig.json-mtests/# 真机运行# ---- adb 命令(Android 真机调试)----adb devices# 查看连接的设备adb logcat-s"MicroMsg"# 过滤微信日志adb logcat|grep"MiniProgram"# 过滤小程序日志adb shell dumpsys meminfo com.tencent.mm# 查看微信内存占用adb pull /sdcard/Android/data/com.tencent.mm/...# 拉取小程序文件

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询