专栏文章 工作笔记:基于微信 minium 框架的小程序自动化初步实践(1)

大海 · 2022年06月04日 · 最后由 大海 回复于 2023年01月19日 · 7793 次阅读

minium 框架

框架优点
  • 微信小程序官方推出的小程序自动化框架,是为小程序专门开发的自动化框架, 提供了 Python 和 JavaScript 版本。
  • 支持一套脚本,iOS & Android & 模拟器,三端运行
  • 提供丰富的页面跳转方式,看不到也能去得到
  • 可以获取和设置小程序页面数据,让测试不止点点点
  • 支持往 AppSerive 注入代码片段
  • 可以使用 minium 来进行函数的 mock, 可以直接跳转到小程序某个页面并设置页面数据, 做针对性的全面测试
框架缺点
  • 暂不支持 H5 页面的调试;
  • 暂不支持插件内 wx 接口调用;
技术选型
  • minium 支持 Python 和 JavaScript 版本,而且有专门的团队定期维护,遇到问题可以在微信开发者社区进行提问,因此选择了 minium。

minium 框架介绍

  • minium 提供一个基于 unittest 封装好的测试框架,利用这个简单的框架对小程序测试可以起到事半功倍的效果。
  • 测试基类 Minitest 会根据测试配置进行测试,minitest 向上继承了 unittest.TestCase,并做了以下改动:
  • 加载读取测试配置
  • 在合适的时机初始化 minium.Minium、minium.App 和 minium.Native
  • 根据配置打开 IDE,拉起小程序项目和或自动打开真机调试
  • 拦截 assert 调用,记录检验结果
  • 记录运行时数据和截图,用于测试报告生成
  • 使用 MiniTest 可以大大降低小程序测试成本。

Properties

名称类型默认值说明
  • appminium.AppNoneApp 实例,可直接调用 minium.App 中的方法
  • miniminium.MiniumNoneMinium 实例,可直接调用 minium.Minium 中的方法
  • nativeminium.NativeNoneNative 实例,可直接调用 minium.Native 中的方法

环境搭建

搭建 Minium Doc(微信官方人员确认,无需进行本地搭建,本地搭建的都是错的,而且还是旧的文档)

无需构建,直接访问官方文档(https://minitest.weixin.qq.com/#/

安装软件
安装 minium
特别说明
  • 如果新手通过本地解压再执行,遇到以下问题

  • 请直接使用以下命令,即可一次性成功安装

    pip3 install https://minitest.weixin.qq.com/minium/Python/dist/minium-latest.zip
    


配置微信开发者工具
  • 安装微信开发者工具(我本机使用的版本是 1.06.2205312),并打开安全模式: 设置 -> 安全设置 -> 服务端口: 打开

  • 在工具栏菜单中点击设置,选择项目设置,切换到 “本地设置”,将调试基础库选择大于 2.7.3 的库;

  • 开启微信工具安全设置中的 CLI/HTTP (提供了命令行和 HTTP 两种调用方式) 调用功能。

  • 开启被测试项目的自动化端口号

"path/to/cli" auto --project "path/to/project" --auto-port 9420

路径说明

  • path/to/project: 指代填写存放小程序源码的目录地址,文件夹中需要包含有 project.config.json 文件
  • path/to/cli: 指代开发者工具 cli 命令路径
  • 与下图一致证明开启成功
"C:/Program Files (x86)/Tencent/微信web开发者工具/cli" auto --project "C:/WeChatProjects/miniprogram-1" --auto-port 9420

配置信息

代码结构目录

模拟器 Config.json
{
    "project_path": "C:\\WeChatProjects\\miniprogram-1",
    "dev_tool_path": "C:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat",
    "debug_mode": "debug",
    "test_port": 9420,
    "platform": "ide",
    "app": "wx",
    "assert_capture": true,
    "request_timeout":60,
    "remote_connect_timeout": 300,
    "auto_relaunch": true
}

真机 Config.json
{
    "project_path": "C:\\WeChatProjects\\xxx_chinamobile-pmc_migration2\\unpackage\\dist\\build\\mp-weixin",
    "dev_tool_path": "C:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat",
    "debug_mode": "debug",
    "test_port": 9420,
    "platform": "Android",
    "app": "wx",
    "enable_app_log": true,
    "device_desire": {
        "serial": "d310bf55"
    },
    "assert_capture": true,
    "request_timeout":60,
    "remote_connect_timeout": 300,
    "auto_relaunch": true
}

Suite.json
{
    "pkg_list": [
      {
        "case_list": [
          "test_*"
        ],
        "pkg": "testcase.*_test"
      }
    ]
  }

测试用例

first_test.py
# !/usr/bin/python
# -*- coding: utf-8 -*-

"""
@File    : first_test.py
@Create Time: 2022-06-01 16:17
@Description:
"""


import minium


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

if __name__ == "__main__":
    import unittest
    loaded_suite = unittest.TestLoader().loadTestsFromTestCase(FirstTest)
    result = unittest.TextTestRunner().run(loaded_suite)
    print(result)


主程序入口

run.py
# !/usr/bin/python
# -*- coding: utf-8 -*-

"""
@File    : run.py
@Create Time: 2022-06-01 17:21
@Description:
"""

import os

# 运行执行class文件中的指定用例
cmd0 = "minitest -m testcase.first_test --case test_get_system_info -c config.json -g"
# 运行执行testcase文件中的指定用例
cmd1 = "minitest -m testcase.first_test -c config.json -g"
# 按照suite配置执行用例
cmd2 = "minitest -s suite.json -c config.json -g"

os.system(cmd0)

执行用例

测试报告

测试结果存储在 outputs 下,运行命令

python -m http.server 12345 -d outputs

然后在浏览器上访问 http://localhost:12345 即可查看报告

参考资料

https://blog.csdn.net/jiangjunsss/article/details/120228371
https://blog.csdn.net/baguenaudier/article/details/124478687
https://blog.csdn.net/weixin_49546967/article/details/119858529
https://minitest.weixin.qq.com/#/minium/Python/readme
https://developers.weixin.qq.com/community/develop/article/doc/0000cae3a58748ed7f2c8975351413

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复

更新文档中的操作说明

如果新手遇到以下问题

注意,不要采用本地解压再执行的方法,请直接使用
pip3 install https://minitest.weixin.qq.com/minium/Python/dist/minium-latest.zip
即可一次性成功安装


共收到 8 条回复 时间 点赞

总结的很好,谢谢分享。

看到大佬已经写了 4 篇了,我还没搞过小程序的测试,准备照着你的实践下,多谢分享

更新文档中的操作说明

如果新手遇到以下问题

注意,不要采用本地解压再执行的方法,请直接使用
pip3 install https://minitest.weixin.qq.com/minium/Python/dist/minium-latest.zip
即可一次性成功安装


ky,mark 一下

大佬,有个疑问,minimum 是不是只能测试开发版。体验版和线上版怎么弄?用云测服务?

'Outcome' object has no attribute 'skipped'
minium 运行会报这个错

一日之纪 回复

体验版和线上版都可以的,只需要你们公司开发给你开项目源代码的环境权限即可。因为它是通过开发者工具编译小程序源代码,然后你用 minium 写测试脚本去执行的,前提不就是你能有权限去编译小程序么。
我目前项目分别跑的是 SIT 环境 +RPD 环境的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册