【测试】小程序测试操作手册
文章目录微信小程序测试实战一、环境与工具安装1.1 微信开发者工具1.2 vConsole 调试面板1.3 Charles 抓包配置二、自动化测试minium 从0到12.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到1minium 是微信官方推荐的小程序自动化测试框架底层通过 WebSocket 连接微信开发者工具操控模拟器和真机。2.1 环境搭建# 1. 安装 miniumpipinstallminium# 2. 检查版本minium--version# 输出: minium 1.5.0 (或其他最新版)# 3. 查看文档minium doc# 4.开发者工具配置开发者工具 → 设置 → 安全 → 开启服务端口→ 记录端口号默认94202.2 编写第一个测试# test_login.pyimportminiumclassLoginTest(minium.MiniTest):登录模块测试defsetUp(self):每个用例执行前重新打开小程序super().setUp()# 重新启动到首页self.app.relaunch(/pages/login/login)deftest_phone_input_valid(self):测试输入合法手机号# 找到手机号输入框phone_inputself.page.get_element(input.phone-input)phone_input.input(13800138000)# 断言输入值正确self.assertEqual(phone_input.value,13800138000)deftest_phone_input_empty(self):测试空手机号点击登录# 不输入手机号直接点登录按钮login_btnself.page.get_element(#login-btn)login_btn.click()# 等待toast提示出现self.page.wait_for(2)# 获取toast文本并断言toastself.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()# 等待倒计时结束或验证码返回模拟环境验证码固定为000000self.page.wait_for(3)# 输入验证码code_inputself.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_pageself.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_btnself.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 或 Androiddevice_desire:{serial:设备序列号//adb devices 查看},debug_mode:wifi,//连接方式:wifi 或 usbclose_foreground:true,//每次测试前重启小程序auto_relaunch:true//发生异常时自动重启}# 使用配置文件在真机上运行minium-cconfig.json-mtest_login.py2.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_pageself.app.get_current_page()self.assertIn(pages/index/index,current_page.path)elifdata[expected]empty_phone:toastself.page.get_element(.wx-toast)self.assertIn(手机号,toast.inner_text)# 截图self.page.capture(flogin_{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/textareaelement.click()# 点击element.tap()# 轻触模拟手指点击element.long_press(duration2000)# 长按毫秒element.scroll_to()# 滚动到可见element.swipe(x,y,directionup)# 滑动# ---- 元素属性 ----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 ADBconnect_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.pngtouch(Template(phone_input.png,threshold0.8))# 输入手机号text(13800138000)# 找到获取验证码按钮touch(Template(get_code_btn.png,threshold0.8))sleep(3)# 输入验证码touch(Template(code_input.png))text(000000)# 点击登录按钮touch(Template(login_btn.png))# 等待登录成功页面出现wait(Template(home_page_title.png),timeout10)# 断言首页出现了assert_exists(Template(home_page_title.png),登录成功)deftest_multi_device(self):多设备交叉测试# 切换连接另一台设备device_2connect_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内存峰值 300MBAndroid/ 200MBiOS微信本身占内存小程序在此基础上增量要控制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 17iOS 主流机型P0iPhone 12iOS 15iOS 旧机型代表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 所有请求走 HTTPSNetwork 面板检查 无 console.log 打印敏感信息手机号/Token/身份证 所有页面栈深度不超10层 页面切换后无内存泄漏Memory 面板对比 基础库最低版本已设置app.json 中的 libVersion 首屏 setData 无单次超 256KB 调用 大图已压缩单张 ≤ 200KB6.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/5100% **截图** [附上截图] **推测原因** iOS 15 下该按钮的 bindtap 事件可能被父容器拦截。 在 iOS 16 和 Android 上正常。七、常用命令速查手册# ---- 微信开发者工具命令行 ----# Windows 工具默认路径C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat# 打开指定项目cliopen--projectD:\mini-program-project# 预览生成二维码cli preview--projectD:\mini-program-project--qr-format image --qr-output preview.png# 上传代码cli upload--projectD:\mini-program-project--version1.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-sMicroMsg# 过滤微信日志adb logcat|grepMiniProgram# 过滤小程序日志adb shell dumpsys meminfo com.tencent.mm# 查看微信内存占用adb pull /sdcard/Android/data/com.tencent.mm/...# 拉取小程序文件