在小程序中使用自动化测试,主要包括:单元测试、接口测试、web页面点击事件
使用 jest
全局安装
npm i jest -g
在项目中创建jest.config.js
module.exports = {
snapshotSerializers: [], // Jest 应用于快照测试的快照序列化程序模块的路径列表
testEnvironment: 'jsdom', //默认:"node" 将用于测试的测试环境。Jest 中的默认环境是 Node.js 环境, 如正在构建一个网络应用程序,你可以使用类似浏览器的环境来jsdom代替
testMatch: '' //测试文件存放地址 jest 用于检测测试文件的 glob 模式。默认情况下,它会查找文件夹内的 、 和 文件.js,以及.jsx任何带有 or 后缀的文件(例如or )
}
<a href="https://jestjs.io/docs/configuration#snapshotserializers-arraystring">详细参考jest文档</a>
推荐使用1.05.2110202 或以上版本的开发者工具,支持自动化录制、检查元素、data 快照、 断言/检查、 cgi mock等功能
<a href="https://developers.weixin.qq.com/miniprogram/dev/devtools/auto/record.html">详细参考微信工具文档</a>
下载自动化测试插件
npm i miniprogram-automator --save-dev
在项目根目录下新建文件 index.spec.js 启动文件
const automator = require('miniprogram-automator')
automator.launch({
cliPath: 'D:/Program Files (x86)/Tencent/tool/cli.bat', // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项
projectPath: 'D:/work/your_project_path', // 项目文件地址
}).then(async miniProgram => {
const page = await miniProgram.reLaunch('/pages/index/index')
await page.waitFor(500)
const element = await page.$('.functionality-item') // 获取页面元素
await element.tap() // 触发该元素的tap点击事件
})
cliPath需要设置绝对路径,为小程序开发工具安装目录,window系统需要加上cli.bat
启动时,需要关闭当前开发者工具,在安装目录下运行
cli auto --project D:\work\your_project_path --auto-port 9420
在开发者工具里面提前打开设置-安全设置-服务端口
在终端中(非小程序开发工具),启动命令,不然会出现
Error: Failed to launch wechat web devTools, please make sure http port is open
使用查找元素element 的数组属性不能类似jq的用法
需要
// error
const element = await page.$$('.functionality-item')[1] // 获取页面元素
await element.tap() // 触发该元素的tap点击事件
// correct
const element = await page.$$('.functionality-item') // 获取页面元素
await element[1].tap() // 触发该元素的tap点击事件
优点:
不需要写代码
可以导出用例
缺点:
数据填充问题
特殊场景无法完成如:断网,接口报错,选择图片
在开发者工具 -> 工具 -> 自动化测试中,添加用例,点击录制按钮,对左侧模拟器上的页面进行操作,系统会自动记录整个过程,在操作过程中,可以对数据,页面进行快照、截图等操作
在用例添加完成后,可以导出为jest代码,在单独的文件中维护
在项目中也可以在非项目中,运行jest,会对jest.config.js 中的配置进行解析
const moment = require('moment');
const date = moment(new Date()).format('YYYY-MM-DD-HH-mm-ss');
module.exports = {
reporters:[
"default",
[
"jest-html-reporters",
{
"publicPath": "./report",
"pageTitle":"Jest Report",
"filename":`${date}.html`,
"expand":true
}
]
],
}
在开发用例的使用推荐使用,注意点,需要关闭开发工具后运行
cli auto --project D:\work\your_project_path --auto-port 9420
会自动打开小程序,在运行命令执行脚本,修改后可配置
const automator = require('miniprogram-automator') // 自动化插件
automator.connect({
wsEndpoint: 'ws://localhost:9420'
}).then(async miniProgram => {
// await miniProgram.remote() // 扫码登录连接真机,在真机上执行后续测试脚本
// 测试代码
})
使用 必须要关闭小程序开发工具,不然端口会被占用,如果在开发测试用例,不建议使用该方式
在终端中(非小程序开发工具),启动命令,不然会出现
Error: Failed to launch wechat web devTools, please make sure http port is open
const automator = require('miniprogram-automator') // 自动化插件
automator.launch({
cliPath: 'D:/TOOLS/cli.bat', // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项
projectPath: 'D:/work/your_project_path', // 项目文件地址
}).then(async miniProgram => {
const page = await miniProgram.reLaunch('/pages/list/list')
await page.waitFor(500)
const element = await page.$$('.reported__list-item') // 获取页面元素
await element[0].tap() // 触发该元素的tap点击事件
await page.waitFor(4000)
await miniProgram.navigateTo('/pkgShare/pages/editExperience/index')
await page.waitFor(4000)
const pageTwo = await miniProgram.currentPage()
const textarea = await pageTwo.$('.day-edit-box__textarea')
const commit = await pageTwo.$('.commit-edit-btns__confirm')
await textarea.input('test font length')
await page.waitFor(4000)
commit.tap()
minium 是为小程序专门开发的自动化框架。使用 minium 可以进行小程序 UI 自动化测试, 但是 minium 的功能不止于仅仅是 UI 自动化, 甚至可以使用 minium 来进行函数的 mock, 可以直接跳转到小程序某个页面并设置页面数据, 做针对性的全面测试, 这些都得益于我们开放了部分小程序 API 的能力。除此之外,小程序有部分组件使用了系统原生的组件,对于这部分的组件,我们也基于 uiautomator 和 wda 做了补充。
支持一套脚本,iOS & Android & 模拟器,三端运行
Python 3.8及以上
微信开发者工具 (本文档中简称IDE)最新版本,并打开安全模式: 设置 -> 安全设置 -> 服务端口: 打开
微信 >= 7.0.7 (确认微信公共库版本 >= 2.7.3即可)
自动安装
pip3 install https://minitest.weixin.qq.com/minium/Python/dist/minium-latest.zip
手动安装 下载minium安装包, 解压后进入文件夹, 运行
python3 setup.py install
minium安装完成后
minitest -v
import minium
mini = minium.Minium({
"project_path": "D:/work/your_project_path", # 替换成你的【小程序项目目录地址】
"dev_tool_path": "D:/Program Files (x86)/Tencent/tool/cli.bat", # 替换成你的【开发者工具cli地址】,macOS: <安装路径>/Contents/MacOS/cli, Windows: <安装路径>/cli.bat
})
print(mini.get_system_info())
import minium
import unittest
class Test (minium.MiniTest):
def test_index(self):
print(self.mini.get_system_info())
if __name__ == '__main__':
unittest.main()
# 在项目中需要加入 config.json
# {
# "project_path": "D:/work/Applet_jubao_proj",
# "dev_tool_path": "D:/TOOLS/cli.bat"
# }
api | 注解 |
---|---|
self.mini | 小程序driver,链接开发者工具 |
self.app | 小程序 |
self.page | 小程序当前页 |
self.native | 微信的原生控件 |
MiniTest 小程序云测是一套由微信测试团队自主研发,联合 WeTest 云真机能力,共同推出的小程序自动化测试服务。
服务基于云真机,支持开发者简单快捷地实现小程序智能化 Monkey 测试,录制回放,自定义测试和性能分析等能力。
命令 | 含义 |
---|---|
-h | --help: 使用帮助。 |
-v | --version: 查看 minium 的版本。 |
-p PATH/--path | PATH: 用例所在的文件夹,默认当前路径。 |
-m MODULE_PATH | --module MODULE_PATH: 用例的包名或者文件名。 |
--case | CASENAME: test开头的用例名。 |
-s SUITE | --suite SUITE:测试计划文件。 |
-c CONFIG | --config CONFIG:配置文件名,配置项目参考配置文件。 |
-g | --generate: 生成网页测试报告。 |
--module_search_path | SYS_PATH_LIST SYS_PATH_LIST ...: 添加 module 的搜索路径。 |
-a | --accounts: 查看开发者工具当前登录的多账号, 需要通过 9420 端口,以自动化模式打开开发者工具。 |
--mode | RUN_MODE: 选择以parallel(并行)或者fork(复刻)的方式运行用例。 |
在当前page页面里面获取元素 Element
<a href="https://developers.weixin.qq.com/miniprogram/dev/devtools/auto/element.html">详细参考微信自动化文档</a>
api | 注解 |
---|---|
element.$ | 在元素范围内获取元素。 |
element.$$ | 在元素范围内获取元素数组。 |
element.size | 获取元素大小。 |
element.offset | 获取元素绝对位置。 |
element.text | 获取元素文本。 |
element.attribute | 获取元素特性。 |
element.property | 获取元素属性。 |
element.wxml | 获取元素 WXML。 |
element.outerWxml | 同 wxml,只是会获取到元素本身。 |
element.style | 获取元素样式值。 |
element.tap | 点击元素。 |
element.longpress | 长按元素。 |
element.touchstart | 手指开始触摸元素。 |
element.touchmove | 手指触摸元素后移动。 |
element.touchend | 手指结束触摸元素。 |
element.trigger | 触发元素事件。 |
element.input | 输入文本,仅 input、textarea 组件可以使用。 |
element.callMethod | 调用组件实例指定方法,仅自定义组件可以使用。 |
element.data | 获取组件实例渲染数据,仅自定义组件可以使用。 |
element.setData | 设置组件实例渲染数据,仅自定义组件可以使用。 |
element.callContextMethod | 调用上下文 Context 对象方法,仅 video 组件可以使用。 |
element.scrollWidth | 获取滚动宽度,仅 scroll-view 组件可以使用。 |
element.scrollHeight | 获取滚动高度,仅 scroll-view 组件可以使用。 |
element.scrollTo | 滚动到指定位置,仅 scroll-view 组件可以使用。 |
element.swipeTo | 滑动到指定滑块,仅 swiper 组件可以使用 |
element.moveTo | 移动视图容器,仅 movable-view 组件可以使用。 |
element.slideTo | 滑动到指定数值,仅 slider 组件可以使用。 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。