基于MiniTest的小程序自动化测试

这篇具有很好参考价值的文章主要介绍了基于MiniTest的小程序自动化测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

什么是MiniTest

MiniTest是专属于小程序和小游戏的自动化测试框架,由三个部分组成,

  1. Minium小程序自动化框架
  2. 小程序云测试服务
  3. 小游戏云测试服务

什么是Minium

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

特性

支持一套脚本,iOS & Android & 模拟器,三端运行
提供丰富的页面跳转方式,看不到也能去得到
可以获取和设置小程序页面数据,让测试不止点点点
可以直接触发小程序元素绑定事件
支持往 AppSerive 注入代码片段执行
可以调用部分 wx 对象上的接口
支持 Mock wx 对象上的接口
支持 Hook wx 对象上的接口
通过 suite 方式管理用例,config 管理运行设备

缺点

暂不支持H5页面的调试
开放社区人数较少,网上教程稀少,遇到问题需要啃源码和文档

安装

运行环境

Python 3.8及以上
微信开发者工具 (本文档中简称IDE)最新版本,并打开安全模式: 设置 -> 安全设置 -> 服务端口: 打开
微信 >= 7.0.7 (确认微信公共库版本 >= 2.7.3即可)

安装

自动安装
pip3 install minium
手动安装
#下载
pip3 install https://minitest.weixin.qq.com/minium/Python/dist/minium-latest.zip
#安装
python3 setup.py install

环境检查

cmd运行

minitest -v

输出版本号即说明环境安装成功

功能验证

import minium
mini = minium.Minium({
    "project_path": "E:\code\front\dist",
    "dev_tool_path": "D:\微信web开发者工具\cli.bat",
})
print(mini.get_system_info())

project_path 【小程序项目目录地址】
dev_tool_path 【开发者工具cli地址】,macOS: <安装路径>/Contents/MacOS/cli, Windows: <安装路径>/cli.bat

初试框架

配置文件

根目录下新建config.json

{
  "project_path": "E:\code\front\dist",
  "dev_tool_path": "D:\微信web开发者工具\cli.bat",
  "debug_mode": "info", #日记级别 debug error
  "auto_authorize": true, #自动处理授权弹窗
  "test_port": 9420, #IDE端口
  "platform": "ide", #运行平台ide, Android, IOS
  "device_desire": {
    "serial": "b777a722"
  }
}

测试计划

根目录新建suite.json

{
  "pkg_list": [
    {
      "case_list": [
        "test_*"
      ],
      "pkg": "test_case.test_*"
    }
  ]
}

suite.json的pkg_list字段说明要执行用例的内容和顺序,pkg_list是一个数组,每个数组元素是一个匹配规则,会根据pkg去匹配包名,找到测试类,然后再根据case_list里面的规则去查找测试类的测试用例。可以根据需要编写匹配的粒度。注意匹配规则不是正则表达式,而是通配符。

pkg_list 执行用例的内容和顺序,为一个数组,可配置多个值
case_list case执行规则,为一个数组,可配置多个值
pkg 测试文件执行规则

第一个测试用例

import minium
class FirstTest(minium.MiniTest):
    def test_get_system_info(self):
        sys_info = self.mini.get_system_info()
        self.assertIn("SDKVersion", sys_info)

执行测试用例

minitest -s suite.json -c config.json -g

-s 测试计划
-c 配置文件
-g 生成网页版测试报告

结果与报告

测试结果

每条用例的测试结果我们会存放到一个目录里面,里面包含:
1.包含用例执行信息的json文件
2.用例运行中的截图
3.用例运行中的日志
4.小程序运行中的日志
基于这些数据可以生成测试报告,也可以做一些存档的事情。

测试报告

根据用例的执行结果,我们基于Vue和element提供一个简洁的测试报告:
报告生成有2种方式:
1.执行用例的时候加上-g参数针
2.对已经生成的用例结果目录
minireport input_path output_path

input_path 测试结果目录
output_path 测试报告存储目录

框架进阶

脚手架

import minium

class FirstTest(minium.MiniTest):

    @classmethod
    def setUpClass(cls):
        print('****所有用例执行前****')

    @classmethod
    def tearDownClass(cls):
        print('****所有用例执行后****')

    def setUp(self):
        print('****每个用例执行前****')

    def tearDown(self):
        print('****每个用例执行后****')

    def test_get_system_info1(self):
        print("in the test_get_system_info1")

    def test_get_system_info2(self):
        print("in the test_get_system_info2")

数据驱动

import minium
data = [(1,2),(3,4)]
@minium.ddt_class
class FirstTest(minium.MiniTest):

    @minium.ddt_case(*data)
    @minium.ddt_unpack
    def test_get_system_info(self,num1,num2):
        print(num1,'*****',num2)
        print(num1+num2)

截图

screen_shot()

import shutil
import minium
import os

class FirstTest(minium.MiniTest):

    def test_get_system_info(self):
        output_path = os.path.join(os.path.dirname(__file__), "outputs\\test_get_system_info.png")
        if not os.path.isdir(os.path.dirname(output_path)):
            os.mkdir(os.path.dirname(output_path))
        if os.path.isfile(output_path):
            os.remove(output_path)
        self.app.screen_shot(output_path)
        self.assertTrue(os.path.isfile(output_path))
        if os.path.isdir(os.path.dirname(output_path)):
            shutil.rmtree(os.path.dirname(output_path))

页面跳转

go_home() 跳转到小程序首页
navigate_to() 以导航的方式跳转到指定页面
redirect_to() 关闭当前页面,重定向到应用内的某个页面
switch_tab() 跳转到 tabBar 页面

import minium
import time

class FirstTest(minium.MiniTest):

    @classmethod
    def setUpClass(cls):
        print('****setUpClass开始暂停等待获取token****')
        time.sleep(5)


    @classmethod
    def tearDownClass(cls):
        print('****关闭IDE****')
        cls.mini.shutdown()

    def test_get_system_info(self):
        time.sleep(2)
        self.app.redirect_to("/pages/ClassList/ClassList")
        time.sleep(2)
        self.app.go_home()
        time.sleep(2)
        self.app.navigate_to("/pages/AssignTaskList/AssignTaskList")
        time.sleep(2)
        self.app.go_home()
        time.sleep(2)
        self.app.switch_tab("/pages/UserCenter/UserCenter")
        time.sleep(2)

元素定位

基于MiniTest的小程序自动化测试,小程序,python,自动化

import minium
import time

class FirstTest(minium.MiniTest):

    @classmethod
    def setUpClass(cls):
        print('****setUpClass开始暂停等待获取token****')
        time.sleep(5)
        
    @classmethod
    def tearDownClass(cls):
        print('****关闭IDE****')
        cls.mini.shutdown()

    def test_get_system_info(self):
        time.sleep(2)
        self.app.switch_tab('/pages/TaskRecord/TaskRecord')
        self.page.get_element("/page/view/view/view/view[3]/view/view[4]",max_timeout=5).tap()
        time.sleep(2)
        self.page.get_element("/page/view/view/view/view[4]/view/view[1]/view[1]/view[2]/view[3]/view", max_timeout=5).tap()
        time.sleep(2)
        self.page.get_element("/page/view/view/view/view[4]/view/view[2]/view[2]/view[2]/form/button",max_timeout=5).tap()
        time.sleep(2)

get_element() 在当前页面查询控件, 如果匹配到多个结果, 则返回第一个匹配到的结果
get_elements() 在当前页面查询控件, 并返回一个或者多个结果

真机调试

Android

配置测试 config.json

{
  "project_path": "E:\code\front\dist",
  "dev_tool_path": "D:\微信web开发者工具\cli.bat",
  "debug_mode": "info",
  "auto_authorize": true,
  "platform": "Android",
  "test_port": 9420,
  "device_desire": {
    "serial": "b777a722"
  }
}

adb devices命令获取serial
基于MiniTest的小程序自动化测试,小程序,python,自动化
获取微信测试APK安装命令

minitest --apk

基于MiniTest的小程序自动化测试,小程序,python,自动化
安装微信测试APK

adb install -r D:\soft\Python\Python39\lib\site-packages\minium\native\lib\at\bin\AtServer.apk

基于MiniTest的小程序自动化测试,小程序,python,自动化
执行测试用例

minitest -s suite.json -c config.json -g
IOS

安装 libmobiledevice

brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller

如果没有安装过直接 brew install ideviceinstaller 即可。
当然你也可以本地编译:

git clone https://github.com/libimobiledevice/libimobiledevice.git
cd libimobiledevice
./autogen.sh --disable-openssl
make
sudo make install

配置 WebDriverAgent
minium 不包含 WebDriverAgent(简称wda) 工程,先执行以下命令clone工程:

mkdir wda
cd wda
echo "{}" > package.json
npm i appium
echo `pwd`/node_modules/appium/node_modules/appium-webdriveragent

以上最后输出的路径为wda工程路径,可用xcode打开,也可写到device_desire配置中
按照以下指引配置工程
基于MiniTest的小程序自动化测试,小程序,python,自动化
基于MiniTest的小程序自动化测试,小程序,python,自动化
基于MiniTest的小程序自动化测试,小程序,python,自动化
配置完成之后,可以用⌘+u快捷键运行 unit test 测试 wda 是否正常运行
基于MiniTest的小程序自动化测试,小程序,python,自动化
配置测试 config.json

{
  "platform": "iOS",
  "device_desire":{
    "wda_project_path": "/Users/sherlock/wda/node_modules/appium/node_modules/appium-webdriveragent", //自定义 wda 的路径
    "device_info": {
          "udid": "aee531018e668ff1aadee0889f5ebe21a2292...", //手机的 udid 
          "model": "iPhone XR",
          "version": "12.2.5",
          "name": "sherlock's iPhone"
    }
  }
}

执行测试用例

minitest -s suite.json -c config.json -g

其他

mock相关

相关函数

mock_wx_method()  #mock掉小程序API的调用
restore_wx_method()  #去掉函数的mock
mock_request()  #mock wx.request 方法,根据正则匹配结果返回特定构造的数据
mock_request_once()  #mock wx.request 方法,根据正则匹配结果返回特定构造的数据,无需调用restore_request()
restore_request()  #清除掉所有mock request的匹配规则

hook相关

相关函数

hook_wx_method()  #hook小程序API的调用
release_hook_wx_method()  #释放hook小程序API的调用。
hook_current_page_method()  #hook当前页面上的方法。
release_hook_current_page_method()  #释放当前页面方法的监听函数。

性能相关

相关函数文章来源地址https://www.toymoban.com/news/detail-622107.html

start_get_perf()  #获取 CPU 内存 数据
stop_get_perf()  #停止获取 CPU 内存 数据

到了这里,关于基于MiniTest的小程序自动化测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【APP自动化测试必知必会】Appium之微信小程序自动化测试

    H5 是指第 5 代 HTML ,也指用 H5 语言制作的一切数字产品。 所谓 HTML 是“超文本标记语言”的英文缩写。我们上网所看到网页,多数都是由 HTML 写成的。 “超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。而“标记”指的是 这些超文本必须由包含属性

    2024年02月09日
    浏览(108)
  • 基于python实现Web自动化测试(selenium)、API自动化测试(requests)&附学习视频

    另一篇文章 :自动化测试框架(pytest)附学习视频 学习视频,学习文档-白月黑羽 说明: 1紧跟着写的不加/,不加空格-表示同一级别信息,加空格表示后代 2.css定位tag,id,class时分别有不同的标识,其他属性都要加[]进行搜索, Xpath所有属性都要都加【】,tag不用 3. css在使用ta

    2024年02月03日
    浏览(108)
  • 【软件测试】基于博客系统的自动化测试

    目录 1.我的博客系统链接 2.使用selenium对博客系统进行自动化测试 1.引入依赖 2.创建公共类 3.创建测试套件类 4.测试登陆界面 5. 测试博客列表页 6.测试写博客页面 7.测试删除博客 8.最终运行结果 用户登录 创建一个maven项目,在pop.xml中引入以下依赖 因为对每一个页面进行测试

    2024年02月15日
    浏览(65)
  • Selenium自动化测试(基于Java)

    目录 一. 了解Selenium ✅1.1 概念 ✅1.2 作用 ✅1.3 特点 ✅1.4 工作原理  二. Selenium + Java 环境搭建 ✅2.1 下载 Chrome 浏览器 ✅2.2 查看浏览器的版本 ✅2.3 下载浏览器驱动 ✅2.4 验证环境是否搭建成功 三. Selenium 常用 API ✅3.1 定位元素 ✅3.2 操作对象 ✅3.3 添加等待 ✅3.4 打印信息

    2024年02月06日
    浏览(92)
  • 基于Playwright自动化测试部署方案

    基于playwright框架,搭建了自动化测试项目,在服务器上使用Docker起容器跑镜像,镜像内容基于playwright的官方镜像,并向其中移入了host文件,以便切换测试用例运行所在的环境(测试/线上环境)。 引入测试用例的管理后台,方便测试用例与测试报告的管理。管理后台中可以

    2024年02月13日
    浏览(47)
  • 【自动化测试】——Selenium (基于java)

    小亭子正在努力的学习编程,接下来将开启软件测试的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 一、认识Selenium 1.什么是自动化测试  2.Selenium  3.webdriver的工作原理

    2024年02月15日
    浏览(47)
  • ██哈罗出行自动化测试抢单测试程序

      本博客只对使用Android AccessibilityService实现自动抢单测试程序Demo的api使用,不对AccessibilityService的类结构及相关配置信息做详细说明,如需了解,请查阅谷歌安卓AccessibilityService的说明文档。 google Android官网AccessibilityService的文档说明:AccessibilityService | Android Developers 我最早是想在

    2024年02月08日
    浏览(43)
  • 简单实现接口自动化测试(基于python)

    本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测试框架pithy。期望读者可以通过本文对接口自动化测试有一个大致的了解。 为什么要做接口自动化测试? 在当前互联网

    2024年02月13日
    浏览(48)
  • (基于python)简单实现接口自动化测试

    本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测试框架pithy。期望读者可以通过本文对接口自动化测试有一个大致的了解。 为什么要做接口自动化测试? 在当前互联网

    2024年02月08日
    浏览(54)
  • 基于Selenium+Python的自动化测试

    (1)了解Selenium+Python环境搭建及配置,能够了解基于Selenium自动化测试的基本原理; (2)能够理解基于Selenium自动登录网页的过程,对软件自动化测试过程的原理有一定的理解,为今后从事web自动化测试奠定基础。 实验环境 : (1)window10操作系统; (2)python开发环境、

    2024年02月03日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包