微信小程序自动化测试——自定义测试(Minium)

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

前文 微信小程序自动化测试——录制回放 提到录制回放 支持输入,文本查找,断言等自动化测试基础操作,无需编写代码,用例生成效率高,但是部分操作不支持,对复杂业务场景有局限性。如果用户希望适用复杂的业务场景,自主制定测试场景,可以尝试 自定义测试(Minium)方案。

小程序测试框架 Minium 是微信测试团队为小程序开发或测试同学提供的一套测试接口,它实现了miniprogram-automator 中小程序自动化所有能力,如可以直接触发小程序页面元素,设置页面数据,向AppService注入代码片段,Mock/Hook wx对象的接口等。此外,他还支持并封装了所有的原生操作都进行了封装,屏蔽了iOS/Android底层差异,实现了一套脚本在三端同时运行

用户写好的Minium脚本,可以再本地执行,也可以直接上传到微信小程序云测服务执行,无需准备和维护真机环境。下面本文介绍自定义测试的流程

一、 编写用例

编写小程序自动化测试脚本,常见操作包括:

  • 基本操作:如页面跳转,元素定位及相关操作
  • 处理小程序API
  • 处理小程序的原生控件,如处理授权弹窗
  • 支持数据驱动测试

基本操作

对小程序页面元素定位,元素操作,或页面跳转等。简单的UI测试,例如以下用例

class FirstTest(minium.MiniTest):    
      def test_network(self):
          # 页面跳转
          self.app.navigate_to("/packageAPI/pages/get-network-type/get-network-type")
          # 元素定位
          ele = self.page.get_element("button", inner_text="获取手机网络状态")
          # 元素点击
          ele.click()
          # 打印元素文本
          self.logger.info(self.page.get_element("/page/view/view[2]/view/view[1]/text").inner_text)          

处理小程序API

Minium框架提供处理小程序开放API方法,根据需求选择相应方法,例如

  • mock_wx_method() — mock掉小程序API的调用
  • hook_wx_method() — hook小程序API的调用
  • call_wx_method() — 调用小程序的API

更多接口方法参考 Minium接口

调用小程序API获取回调信息用例,例如

class FirstTest(minium.MiniTest): 
    def test_call_wx_method(self):
        """
        调用小程序API,获取回调对象
        :return:
        """
        sys_info = self.app.call_wx_method("getSystemInfo").get("result", {}).get("result")
        self.assertIsInstance(sys_info, dict, "is dict")
        self.assertTrue(True if sys_info else False, "not empty")

处理小程序原生控件

Minium提供了针对小程序内涉及原生控件(授权弹窗、弹窗、地图、分享小程序等)的操作封装
注意:部分封装的接口暂不支持IDE平台调用。若跑测平台是IDE,则需要在config.json中配置mock_native_modal配置项,后通过mock的方式实现

处理模态弹窗用例示例如下

class FirstTest(minium.MiniTest): 
        def test_native(self):
              self.mini.clear_auth()
              self.app.redirect_to("/pages/testnative/testnative")
              called = threading.Semaphore(0)
              callback_args = None

              def callback(args):
                  nonlocal callback_args
                  called.release()
                  callback_args = args

             # hook showModal方法,获取回调后执行callback
             self.app.hook_wx_method("showModal", callback=callback)
             self.page.get_element("#testModal").tap()
             time.sleep(2)
             # 点击弹窗 确定
             self.native.handle_modal("确定")
             is_called = called.acquire(timeout=10)
             # 释放hook showModal方法
             self.app.release_hook_wx_method("showModal")
             self.assertTrue(is_called, "callback called")
             self.assertDictContainsSubset( {"errMsg": "showModal:ok", "cancel": False, "confirm": True}, callback_args[0])

跑测平台IDE,config.json 配置 mock_native_modal 示例如下

"mock_native_modal": {
    "showModal": {
      "title": "test modal",
      "content": "modal content"
    },
  }

数据驱动

自动化测试往往需多组数据测试,若采用录制回放测试,则需录制多个用例,不够灵活,所以若需测试同一个用例不同组测试数据,可使用**数据驱动(DDT)**模式,实现测试数据与测试脚本的分离,通过DDT将测试数据加载到脚本中。

数据驱动(DDT)有以下优点:

  • 灵活配置
  • 测试数据与功能代码分开
  • 易维护

下面是我们集成数据驱动测试(基于ddt封装)的例子

@minium.ddt_class
class BaseTest(minium.MiniTest):

    @minium.ddt_case([], ["1", "2"])
    def test_evaluate_sync(self, args):
        """
        向 app Service 层注入代码 同步返回结果
        :param args:
        :return:
        """
        # 参数 args: []   args: ["1", "2"]
        result = self.app.evaluate(
            "function(...args){return `test evaluate: ${args}`}", args, sync=True
        )
        self.assertEqual(
            result.get("result", {}).get("result"), "test evaluate: {}".format(",".join(args))
        )

此外,还能给具体的 test data 命名,自定义命名会体现在测试方法名中。数据驱动详情可参考 测试流程控制 & 数据驱动测试

二、 执行用例

开发者编写完 Python 用例脚本后,可本地调试,也可在云测上测试。

本地执行

开发者将编写好的用例进行本地调试,minitest命令加载用例,初始化环境,开启自动化能力,进行环境检查,后执行用例。需IDE依赖,支持USB真机调试。

在初始化环境过程中遇到常见问题如下:

  • 开发者工具没有自动打开,先排查开发者工具自动化能力,进行环境检查
  • 配置了真机环境但无法拉起真机上的小程序,排查是否使用了真机调试2.0,如果是,切换回真机调试1.0
  • 报错traceback中有出现 _miniClassSetUp 的调用,确认下开发者工具上选用的基础库是最新的:开发者工具项目窗口右上角 -> 详情 -> 本地设置 -> 调试基础库

Minium为了保证同一套代码在IDE,Android,IOS上运行,环境组成比较复杂,所以测试用例的运行依赖于配置文件。支持配置运行平台、IDE监听端口号、连接手机的参数、账号信息、自动处理授权弹窗等等,可参考 项目配置

执行完用例后,会生成日志文件,提供本地测试报告,包括截图、运行日志、错误日志。具体实践可参考 示例

微信小程序自动化测试——自定义测试(Minium)

云测服务测试

开发者可以将本地调试好的用例上传至云测,新建测试计划,新建Minium任务,可选择多平台真机,且支持多平台同时运行,无需用户部署和维护真机环境

测试结束后,云测服务提供详细的测试报告,包括运行截图、日志信息,网络请求分析,性能分析等。

当用例执行失败时,会提供错误日志及错误行代码,方便用户排查错误原因。

具体操作可参考云测官方文档 自定义测试

微信小程序自动化测试——自定义测试(Minium)

对比

能力 本地执行 云测服务执行
测试账号 可以用自己的微信账号 只支持使用虚拟账号测试
真机部署 需要自己部署真机,安装wda或者adb环境 无需准备真机环境,直接提测
环境维护 需要自己维护开发者工具登录态 不依赖开发者工具,无需用户维护
查看报告 需要自己搭建报告查看环境 提供详细的测试报告,并支持分享报告https链接
性能数据 需要手动调用接口获取 支持查看用例性能数据,如CPU,内存占用等,可以开启体验评分,进一步查看运行时性能数据
Devops 需要自己实现 提供第三方https接口提交任务,获取结果,详情参考 打通devops流程

三、 最佳实践

小程序开发者有两种,第一种是普通开发小程序,由小程序拥有者自行开发。还有一种是第三方服务商,小程序拥有者可以授权给他们代开发小程序。

对于第三方服务商测试团队来说,他们面临的情况会更加复杂。例如在明源云的测试团队中,授权给他们开发的地产开发商小程序非常多(1000+),并且每个小程序的页面数量也很多,手工测试显然无法覆盖业务需求。明源云测试同学希望可以利用自动化测试能力,解决这个问题。

如果用微信小程序自动化测试——录制回放的方案,每个页面都需要手动录制,耗时耗力。

这里他们使用了Minium框架编写自定义测试用例,目前已经有 90+ 用例执行。在编写用例时采用了Page Object模式(简称PO模式),将测试用例和页面元素定位、元素、元素操作等分离,提升用例复用性,降低维护成本。

在具体执行用例过程中,他们将云测服务和内部的devops流程打通,利用云测第三方接口,定时触发或者自动触发自动化任务,然后利用查询任务接口,再将测试结果同步到内部的用例管理平台,如果有问题提单给程序修复,实现整个流程闭环。

微信小程序自动化测试——自定义测试(Minium)
微信小程序自动化测试——自定义测试(Minium)

四、总结

自定义测试(Minium)的核心优点:

  • 完全自主定制测试场景
  • 灵活度高
  • 支持数据驱动测试
  • 结合云测服务,可以无需用户部署维护真机环境,并且提供详细的测试报告,并提供第三方接口方便用户打通devops流程

前面《微信小程序自动化测试》系列文章介绍了智能化Monkey,录制回放测试,以及本文介绍了自定义测试(Minium),三种自动化测试能力各有优缺点,如下所示文章来源地址https://www.toymoban.com/news/detail-507780.html

自动化测试能力 优点 缺点 适应场景
智能化 Monkey 零代码,接入即用,可通过简单配置页面提供覆盖率 场景无法定制化;不支持输入,上传图片等复杂操作;不校验页面逻辑 快速冒烟测试
录制回放 零代码生成用例脚本;快速生成用例,效率高 部分操作不支持,如果是上传图片用例调整不如Minium灵活;录制和回放的环境不同,有一定概率回放失败,需要调试 较简单的用例,自动化回归测试
Minium 自定义测试 完全定制测试场景;灵活度高,能力全面;支持数据驱动测试(DDT) 需要自己写Python脚本,有一定的学习成本 较复杂的用例

需要帮助

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

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

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

相关文章

  • 微信小程序自动化框架的搭建python+minium

    公司要求做小程序的自动化,网上找各种资料,最后确定使用腾讯自研的框架minium,虽然版本已经不继续维护更新了,但是不影响我们使用来做自动化开发。 minium提供一个基于unittest封装好的测试框架,MiniTest是minium中继承自unittest.TestCase的测试基类, 你可以在testcase中使用框

    2024年02月11日
    浏览(36)
  • minium-小程序自动化测试框架

    提起 UI 自动化测试,web 端常用 Selenium,手机端常用 Appium,那么很火的微信小程序可以用什么工具来进行自动化测试?本篇将介绍一款专门用于微信小程序的自动化测试工具 - minium。 简介 minium 是为小程序专门开发的自动化框架, 提供了 Python 和 JavaScript 版本。使用 minium 可

    2024年02月22日
    浏览(30)
  • 腾讯出品小程序自动化测试框架【Minium】系列(七)测试框架的设计和开发

    整个框架的开发及调通是在3月27日晚上22点完成,如下: 这篇文章真的是拖了太久了,久到我居然把代码部分完成后,彻底给忘了,这记性,真的是年纪大了! 1、框架搭建设计要素 日志测试步骤 报告失败截图 配置文件数据源设计 公共函数API封装 测试数据参数化、解耦 测

    2023年04月08日
    浏览(31)
  • 微信小程序自动化测试——微信小程序云测服务!

    MiniTest 微信小程序云测服务是一套由微信测试团队自主研发,联合WeTest云真机能力,共同推出的微信小程序自动化测试服务。 服务基于云真机,支持开发者简单快捷地实现小程序智能化Monkey测试,录制回放,自定义测试和性能分析等能力,并提供详细的测试结果及性能数据,

    2024年04月15日
    浏览(40)
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点: 支持一套脚本,iOS Android 模拟器,三端运行 提供丰富的页面跳转方式,看不到也能去得到 可以获取和设置小程序页面数据,让测试不止点点点 可以直接触发小程序元素绑定事件 支持往 AppSerive

    2024年02月04日
    浏览(35)
  • 【APP自动化测试必知必会】Appium之微信小程序自动化测试

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

    2024年02月09日
    浏览(85)
  • 【接口测试】微信小程序接口自动化的实现方案

    前几天看到有人问微信小程序怎么进行接口自动化,所以想把自己如何进行微信小程序接口自动化的方法分享下。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html这是微信小程序的登陆流程,小程序登陆需要在小程序内部调用 wx.login() 的方法拿到 code,然后去请

    2024年02月09日
    浏览(33)
  • python+appium微信小程序/公众号自动化测试

    环境准备 调试微信公众号时,查看进程名称,公众号要先进入文章或者内部程序,小程序就进入内部程序即可 公众号和小程序的自动化不是必须要做,一般我是作为数据脚本使用 步骤 开启手机上的USB调试功能(开发者模式) 打开Chrome浏览器,地址栏输入:Chrome://inspect 直接

    2024年02月09日
    浏览(34)
  • 微信小程序自动化测试最佳实践(附 Python 源码)

    小程序运行环境 微信小程序技术架构 使用 Chrome 调试小程序 小程序的性能测试 微信小程序的自动化测试​编辑 源码-微信小程序自动化测试 Python 版代码示例 小程序自动化测试需要跨过的几个坎 写在最后 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐

    2024年02月09日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包