前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序 自动化测试

小程序 自动化测试

原创
作者头像
ronixiao
修改2022-08-28 09:58:17
2.5K0
修改2022-08-28 09:58:17
举报
文章被收录于专栏:小程序深入小程序深入

自动化测试

在小程序中使用自动化测试,主要包括:单元测试、接口测试、web页面点击事件

单元测试

使用 jest

全局安装

代码语言:javascript
复制
npm i jest -g

在项目中创建jest.config.js

代码语言:javascript
复制
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>

miniprogram-automator 自动化测试

搭建环境

推荐使用1.05.2110202 或以上版本的开发者工具,支持自动化录制、检查元素、data 快照、 断言/检查、 cgi mock等功能

<a href="https://developers.weixin.qq.com/miniprogram/dev/devtools/auto/record.html">详细参考微信工具文档</a>

下载自动化测试插件

代码语言:javascript
复制
npm i miniprogram-automator --save-dev

在项目根目录下新建文件 index.spec.js 启动文件

代码语言:javascript
复制
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

启动时,需要关闭当前开发者工具,在安装目录下运行

代码语言:javascript
复制
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的用法

需要

代码语言:javascript
复制
  // 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 中的配置进行解析

  • 1 publicPath 存放目录
  • 2 pageTitle 报表标题
  • 3 filename 文件名称
代码语言:javascript
复制
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
        }
    ]
  ],
}

使用方式 connect 方式

在开发用例的使用推荐使用,注意点,需要关闭开发工具后运行

代码语言:javascript
复制
cli auto --project D:\work\your_project_path --auto-port 9420

会自动打开小程序,在运行命令执行脚本,修改后可配置

代码语言:javascript
复制
const automator = require('miniprogram-automator') // 自动化插件
automator.connect({
  wsEndpoint: 'ws://localhost:9420'
}).then(async miniProgram => {
  // await miniProgram.remote() // 扫码登录连接真机,在真机上执行后续测试脚本
  // 测试代码
})

使用方式 launch 方式

使用 必须要关闭小程序开发工具,不然端口会被占用,如果在开发测试用例,不建议使用该方式

在终端中(非小程序开发工具),启动命令,不然会出现

Error: Failed to launch wechat web devTools, please make sure http port is open

代码语言:javascript
复制
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() 

py 写法 minium

minium 是为小程序专门开发的自动化框架。使用 minium 可以进行小程序 UI 自动化测试, 但是 minium 的功能不止于仅仅是 UI 自动化, 甚至可以使用 minium 来进行函数的 mock, 可以直接跳转到小程序某个页面并设置页面数据, 做针对性的全面测试, 这些都得益于我们开放了部分小程序 API 的能力。除此之外,小程序有部分组件使用了系统原生的组件,对于这部分的组件,我们也基于 uiautomator 和 wda 做了补充。

特点

支持一套脚本,iOS & Android & 模拟器,三端运行

运行环境

Python 3.8及以上

微信开发者工具 (本文档中简称IDE)最新版本,并打开安全模式: 设置 -> 安全设置 -> 服务端口: 打开

微信 >= 7.0.7 (确认微信公共库版本 >= 2.7.3即可)

安装

自动安装

代码语言:javascript
复制
pip3 install https://minitest.weixin.qq.com/minium/Python/dist/minium-latest.zip

手动安装 下载minium安装包, 解压后进入文件夹, 运行

代码语言:javascript
复制
python3 setup.py install

环境检查

minium安装完成后

代码语言:javascript
复制
minitest -v

配置

代码语言:python
复制
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())

minium 基于 unittest 进行封装

代码语言:python
复制
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 小程序云测

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(复刻)的方式运行用例。


miniprogram-automator 常见api

在当前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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动化测试
    • 单元测试
      • miniprogram-automator 自动化测试
        • 搭建环境
        • 项目出现的问题
        • 使用方式 工具手点 方式
        • 使用方式 connect 方式
        • 使用方式 launch 方式
      • py 写法 minium
        • 特点
        • 运行环境
        • 安装
        • 环境检查
        • 配置
        • minium 基于 unittest 进行封装
        • 核心组件
      • MiniTest 小程序云测
        • 常见命令
        • miniprogram-automator 常见api
    • 探索中,写测试用例中。。。每日一更
    相关产品与服务
    云开发 CloudBase
    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档