【测试沉思录】18.如何测试微信小程序?

24 篇文章 23 订阅
订阅专栏

作者:雷远缘 编辑:毕小烦

一. 先知道小程序是什么

啥是小程序?

“小程序是一种不需要下载安装即可使用的应用,它实现了应用 “触手可及” 的梦想,用户扫一扫或者搜一下即可打开应用。也体现了 “用完即走” 的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。”

—— 百度百科

以上小程序的理念和特点,也使得小程序在生活中被运用到了极致,比如通行钥匙健康码,看病医疗挂号,吃饭点餐,无一不是小程序。

小程序是怎么工作的?

小程序的渲染时基于双线程模型的,在这个模型中小程序的逻辑层与渲染层分开在不同的线层运行。

img

  • **视图层:**负责渲染页面结构,用 WXML 与 WXSS 编写,由组件进行展示。将逻辑层的数据反应成视图,同时又将视图层的事件发送给逻辑层。
  • **逻辑层:**负责逻辑处理、数据请求、接口调用等。它将数据进行处理后发送给视图层,同时接受视图层的事件反馈。它处理如数据绑定、事件分发、生命周期管理、路由管理一系列事件,同时还提供了丰富的 API,如微信用户数据、扫一扫、支付等微信特有的能力。此外它还给每个页面提供了独立的作用域,提供模块化的能力。

视图层和逻辑层是分离的,通过数据和事件进行通信,逻辑层提供数据给视图层,视图层通过绑定、捕获事件发起交互让逻辑层处理。JSBridage 下架起上层开发与 Native 层的桥梁,使得小程序可通过 API 使用原生的功能,且部分组件为原生组件实现,从而拥有良好的体验。所有在小程序开发中,开发人员不用太多的去考虑系统的实现差异,安心在上层的视图层和逻辑层进行开发即可。

二. 再了解小程序的特性

2.1 小程序的版本

小程序并不像服务端那样区分线上和线下版本,而是有开发版、体验版和正式版。如果我们只是测试业务逻辑,可以在三个版本中的任意一个进行测试。

img

这三个版本有什么区别呢?

  1. 权限层:开发版和体验版需要申请开发者和体验者权限才能使用,正式版则面向全体用户,不需要权限。
  2. 性能层:开发版和体验版自带 vconsole 性能面板,在这里我们可以检测到前端的一些性能消耗情况,可作为开发测试过程中优化的参考。而正式版没有这个面板。
  3. 代码层:开发人员可同时在多个开发版上进行。
  4. 包大小:开发版不限制包的大小,而体验版和正式版则限制包的大小。
  5. 二维码:开发版和体验版都可以使用二维码扫描登录,体验版的二维码生成之后就是保持不变的,永久有效;而开发版的二维码30 分钟后就会失效,需重新生成。

2.2 缓存机制

为了保证⼩程序的快速访问和⽤户体验,微信会缓存整个⼩程序,包括⼩程序⽂件、授权数据、登录数据等等。因此⽤⼩程序常碰到缓存问题,例如切换环境(线上线下互切)、发布、登陆等有时候会发⽣数据切换不过来的场景,为了避免⼀些不必要的缓存问题,简单粗暴的⽅法就是,将⼩程序删掉重新进⼊。

谈到小程序的缓存机制就不得不普及一下它的启动机制,从用户认知的角度看,广义的小程序启动可以分为两种情况,一种是冷启动,一种是热启动。

  • 冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动,即冷启动。
  • 热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。

从小程序生命周期的角度来看,我们一般讲的「启动」专指冷启动,热启动一般被称为后台切前台。

2.3 基础库版本

⼩程序的能⼒需要微信客户端来⽀撑,每⼀个基础库都只能在对应的客户端版本上运⾏,⾼版本的基础库对应的 API 不⽀持低版本,所以在使⽤这些新能⼒的时候需要做兼容

由于微信版本和基础库版本不是⼀⼀对应关系,⽽且⼩程 API 是基于各个基础库版本进⾏发布的,所以在测试过程中需要提前获悉当前基础库版本号。

2.4 层级限制

⼩程序原⽣⻚⾯存在 10 层限制问题,即超过 10 层时便⽆法打开新⻚⾯,⽽业务流程或者访问形成闭环时,很容易陷⼊ 10 层问题。所以我们的⻚⾯如果超过了10 级就需要采⽤其他的⼿段,⽐如层级策略。测试的时候需要注意的多层⻚⾯后的返回叠加是否能够正常,不要出现回不去的现象。

2.5 访问外部网页限制和公众号文章限制

⼩程序内关联的⽂章也是有限制,必须是当前⼩程序关联的公众号,不能打开别⼈公众号的⽂章。所以配置链接的时候我们需要关注链接是否可以打开。

当然也不可以随便打开外部的⽹址,要打开的⽹址是需要⼩程序后台配置业务域名的,并且下载校验⽂件,然后把校验⽂件放在要跳转到的⽹站的根⽬录下⾯才可以,也就是说你想跳转到别⼈的⽹⻚⾥需要得到别⼈的同意。

2.6 预览账号设置

⼩程序发布之前是需要通过微信审核的,因此为了⽅便通过审核,⼩程序在提交审核的时候就需要设置对应的测试账号和密码以便直接预览;还有就是提交审核之前我们有三次免费改名的机会,⼀旦提交审核通过后,每次修改名称需要缴纳 300 元服务费。

2.7 程序包限制

目前小程序分包大小有以下限制:

  • 整个小程序所有分包大小不超过 20M;
  • 单个分包/主包大小不能超过 2M。

当包超过限制时,在预览和上传代码的时候会出现报错,通过 app.json 文件进行配置分别打包即可解决此问题。

官方链接:

https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/basic.html?search-key=subPackages

2.8 小程序的发布

⼩程序发布的时候还需要做以下⼏件事情:

  1. 发布前需申请外⽹域名,并在微信 Web 开发者⼯具⾥找到项⽬,设置好服务器的域名。
  2. 开发完上传代码后,在微信公众平台 -> 登录⼩程序管理后台 -> 点击开发管理 -> 点击提交版本审核即可。
  3. 审核通过后会有相应提示,接着把审核通过的⼩程序发布线上,若审核未通过则修改后继续提审。

三. 盘点小程序该怎么测

3.1 测试业务功能

单从业务层面讲,小程序测试内容与 Web/APP 并没有太大得差别。都是依赖需求⽂档的。

⼀般来说分析需求⽂档也就是这些⽅法:

  1. **按功能模块拆解:**根据设计好的各个⼤类功能模块划分,然后再逐级细化,覆盖到每个功能尽可能全⾯的测试点;

  2. **按业务流程测试:**把各个功能点串联起来形成⼀个完整的业务流程来检查,不同的业务路径可串联多条业务流程,均需覆盖。

  3. **按数据流向测试:**根据数据从某⼀端操作输⼊和输出流向,设计基于数据流的测试⽤例,检查输⼊的数据是否按照代码逻辑执⾏正确的输出,是否数据发⽣异常(⽆法输⼊、有输⼊却⽆任何输出、输出不正确、多余的输出其他信息等)。

除了常用的测试手段外,在业务功能上小程序还需要注意以下容易被忽略的事项:

  1. **免登录的场景:**⼩程序时常会分享出⼀个⻚⾯,这个链接⼀般是免登录的,这个时候我们就得使⽤完全没有登录过的⼿机或者清理干净缓存再去验证,⽽不是使⽤已登录的,不然就⽆法确保我们的免登场景是否能够真的打开。
  2. **预设账号:**⼩程序还存在⼀个预设账号,⼀般是⽤作预览或者线上演示的,这个可能会存在⼀些权限上不够的或者越权的操作,因此除了正常的账号测试外,我们需要特别关注预设账号的测试,是否满⾜线上演示需要⼜没有违规。
  3. **⼩程序⾃带右上⻆的操作:**有⼈会觉得这是⼩程序⾃带的,应该不需要测试吧,其实不是的,微信⼜不保障你的东⻄可以百分百适合。所以在做功能测试的时候,右上⻆开放出了哪些功能,我们都需要验证⼀边,确保正常。特别是浮窗切换,前台后台切换的时候,弄不好就会出现⻚⾯错乱或者⽩屏的现象。
  4. **⽀付功能:**⼩程序的⽀付⼀般分为两种,⼀种是直接调起微信⽀付,另⼀种是调⽤第三⽅⽀付,⽐如⽀付宝等,我们都需要覆盖到,有可能就⽆法唤起。每⼀个⽀付⽅式,只要是⽀持就需要独⽴唤起⽀付,不能省钱。还有要注意的是他还有⼀个⼆维码识别⽀付,这个容易忘记,我们需要能够识别⼆维码进⾏⽀付。
  5. **缓存:**⼩程序为了快速流畅的⽤户体验缓存了整个⼩程序,因此⼏乎每个⻚⾯都会存在⼤量的缓存,我们需要明确哪些我们需要缓存,哪些⽆需缓存,所以⻚⾯切换,账号切换时都需要格外注意数据的正确性。当然这个缓存是⾮常⼴的范围,所以具体情况还是需要具体分析,除了上⾯说的⼏种情况外,⼤家在测试过程中也要注意识别问题,遇到不太对劲的,**不要⼀句环境缓存问题就过了,多留个⼼眼,**没准就是不合理的缓存机制导致的。
  6. **版本测试:**这个我们⽐较少遇到,只有多个版本同时验证的时候才会关注这⽅⾯东⻄。小程序最重要的就是版本独⽴,相互之间不能存在影响。另外⼀种情况就是类似与 A/B 测试,⽐如说河北的客户使⽤ A 版,河南的客户使⽤ B 版,那么我们就得保障 A、B 两个版本的功能隔离,互不⼲涉。
  7. **入口有效性:**⼊⼝顾名思义就是怎么让客户找到你的⼩程序,需要保证每一个入口都能让客户找到我们的小程序。

小程序⼊⼝测试时需要注意⼀下⼏点:

    • 可以通过「发现」模块下的「⼩程序」中的搜索框搜索到对应的⼩程序;
    • 可以通过「附近的⼩程序」找到⼩程序;
    • 已打开过的⼩程序,还可以通过微信聊天⻚⾯的下拉框找到⼩程序;
    • 分享链接可正常打开⼩程序;
    • ⼩程序码扫描可正常打开⼩程序;
    • 删除⼩程序后重新发现正常可正常进⼊。

3.2 测试兼容性

  1. **操作系统兼容性:**这里的操作系统主要是指 Android 系统和 iOS 系统。小程序运行在微信中,看起来是跟操作系统没关系,实际上还是有关系的,因为底层调用依赖于具体的操作系统。按照官方文档说明中,微信小程序在 iOS 上是运行在 JavaScriptCore 中,但在 Android 上是通过 X5JSCore 来解析的。如果有条件主流的 Android 品牌都要覆盖,比如华为,VIVO 等等。覆盖到最新的试用版和当前流行的主要版本。
  2. **机型兼容性:**主要是屏幕的适配。普通的手机 APP 会有屏幕兼容性的问题,小程序同样有这样的问题,只不过相对少了些。微信小程序定义了一个新的尺寸单位 rpx(responsive pixel) 可以适配不同尺寸的屏幕,在页面上定义对象的单位是 rpx 就可以在不同的屏幕上适配。但 1rpx 的像素经常在 iPhone7 上出现断线的情况。因此需要在多关注。
  3. **微信版本的兼容性:**微信小程序 SDK 的 API 版本一直都在持续更新,所以有可能出现向下的兼容问题。测试微信版本的兼容性之前要先确定小程序使用的库版本在哪些微信版本号上支持。

3.3 测试交叉事件

  1. **与微信事件的交叉测试。**微信的视频、语⾔通话,⼀般在触发微信交叉事件后,我们的⼩程序可能就⽆法保持在中断前的⻚⾯了、或者⻚⾯⽩屏,或者直接卡死,或者无法正常不能切换了,有的甚⾄与直接就闪退了种种异常现象。这些都是不能接受的。
  2. **与手机事件的交叉测试。**⼿机的交叉事件也是⼀样的,⽐如电话、闹钟、⽂件的接收等等,做完这些事情后,我们的⼩程序要能正常运⾏。当然,除了要保证⼩程序在交叉事件发⽣之时不会出现上⾯所说异常,我们还要保障上层⼿机事件能正常响应。比如,在⼩程序运⾏期间,我们可以正常接听来电、关闭突然响起闹钟。⽽不能阻断这些事件。

3.4 测试权限

权限测试即授权测试。⼀般来说只有授权的情况下才能正常登录使⽤⼩程序,⽆授权场景处理⽅式符合设计。

⼀般我们测试的时候需要考虑:

  1. ⽆授权场景,使⽤业务时弹出提醒;例如先授权再操作对应功能。
  2. ⽆授权场景,提交数据到后台的时候,会提示补充相关身份信息才能提交成功。
  3. ⼩程序⼿动唤起授权是否正常。
  4. ⼩程序提交的测试号是否可以正常预览⼩程序。
  5. 微信更换设备后,需要重新授权。
  6. 同⼀微信号,在不同的设备上,其数据权限和操作权限⼀致。

3.5 测试网络

  1. 测试3G、4G、5G、wifi 网络下应用运行的速度。
  2. 内网测试时,选择到外网操作是否有异常处理。
  3. 网络不好时,提交数据是否一直处理提交中,是否会有延迟,数据交换失败是否会有提醒。
  4. 有网到无网再到有网环境时,数据是否可以自动恢复,能正常加载。

3.6 测试易用性和 UI

测试用户界面(如菜单、对话框、窗口和其他控件)布局、风格是否满足要求、文字是否正确、页面是否美观、文字、图片组合是否完美、操作是否友好等。

UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作性测试。

3.7 测试性能

接口服务器的性能则按照传统的服务器性能测试方案即可。微信小程序客户端因为一般运行的时间短、频度低,所以关注的性能指标比APP 要少一些。

主要关注:

  1. 业务响应时间(小程序包下载时间/启动时间/页面切换时间)
  2. 内存:小程序进程的内存占用
  3. CPU:小程序进程的 CPU 占用率
  4. 帧率:是以帧称为单位的位图图像连续出现在显示器上的频率
  5. 数据缓存大小:小程序通过 Storage 接口储存的缓存大小

此处给大家安利一个小工具:微信小程序开发者工具。

它提供了 trace 工具,可时时监控小程序的性能。分析 trace 文件可获取内存、CPU、FPS、启动时间、各函数的执行时间等。

img

此外,它还提供了一个插件 Audits

体验评分是一项给小程序的体验好坏打分的功能,它会在小程序运行过程中实时检查,分析出一些可能导致体验不好的地方,并且定位出哪里有问题,以及给出一些优化建议。

img

这里提到了微信小程序开发者工具,推荐给大家这个工具另 2 个插件:

  1. APPData: 是微信小程序页面上真实展示的一个数据,可以在这里动态的修改,来查看我们小程序页面在模拟器上不同设备的一个兼容性的情况。

img

  1. API mock:为了让开发者更方便地开发小程序,开发者工具提供了 API Mock 的能力,可以模拟部分 API 的调用结果。

img

例子:

img

备注:案例图片来自小程序官方文档。

3.8 测试接口

前端的小程序调用的是后台的接口,对接口进行测试,与 Web 接口测试是一样的。我们需要了解的是,微信小程序 SDK 提供的接口是 WebSocket。

3.9 测试安全

小程序是内嵌到微信的,但腾讯并未花太多精力在小程序的安全性上。小程序的安全隐患,比如泄露数据到微信隐患。微信小程序的网络请求通过微信 APP 实现转发,微信平台可能可以获取到小程序的所有网络请求和存储数据,因此对于小程序业务敏感的数据,建议由小程序再做一层保护。

四. 小程序的自动化测试

小程序自动化这一块市场上有很多解决⽅案,比如老牌 APP 自动化框架的 Appium 同样适用于小程序,相对新颖一些的是 Airtest。

4.1 Airtest

Airtest 是⽹易出品的⼀款跨平台的UI⾃动化测试框架,基于图像识别原理, 适合游戏和 APP 的⾃动化测试,同样⼩程序也是可以⽤的。 简单的说就是:利⽤截图的⽅式,在已展示出的⼿机界⾯中寻找所匹配的图⽚。

⽽ Poco 是基于控件识别的框架。提供了丰富的提供了丰富的 API 处理 UI 上的各类操作。原理类似 Appium,基于 UI 控件搜索的⾃动化测试框架,定位⽬标控件,然后调⽤函数⽅法对⽬标控件进⾏操作。

这两个框架都是由⽹易团队开发的 Python 第三⽅库,在实际项⽬使⽤经验中,两者互相配合会得到最好的效果。

如果你会点 Python,会更容易上⼿。当然不会也没有关系,⽹易还提供了⼀个 IDE,也就是我们接下来会重点介绍的⼯具,AIRtestIDE。他集成了 Airtest 和 Poco 框架,⽽且创造了极为简单易懂的操作⼯具,⾮常适⽤于没有任何⾃动化基础的开发测试⼈员。利⽤ Airtest 图像识别,可以简单通过点击,选择,截图完成⼀套 UI ⾃动化代码。

① 基础认知

Airtest 常用函数:

  • touch():点击操作,根据录制脚本时所截取的图像进行点击。
  • wait():可以等待画面中某个图片出现,如果在指定的时间范围内匹配到了该图片,就会返回图片所处位置的焦点,否则抛出TargetNotFoundError 异常。
  • swipe():可以从一个位置滑动到另外一个位置。
  • exists():判断画面中是否存在某个图片,如果匹配到图片,返回图片所处位置的焦点,否则返回False
  • text():输入文本
  • sleep():线程挂起
  • assert_exists():断言图片存在于当前画面上
  • assert_not_exists():断言图片不存在
  • assert_equal():断言数值相等
  • assert_not_equal():断言数值不等

注意:

assert_exists()assert_equal() 的区别在于:前者断言的对象是图片,后者断言的对象是数值。

Airtest 界面概览

img

AIRtestIDE 使用步骤:

img

② 连接设备

开始录制脚本之前,需要连接我们的设备,这个设备可以是真实的⼿机设备,也可以是模拟器。如果是连接⼿机的话,⼤家可以参照 Airtest 的官⽅⽂档去试⼀下,⾮常的简便。如果是连接模拟器,这⾥注意各模 拟器的的端⼝号,连接的过程中可能出现⼀些问题。

常见的模拟器端口:

模拟器adb连接代码
网易Mumuadb connect 127.0.0.1:7555
夜神adb connect 127.0.0.1:62001
雷电adb connect 127.0.0.1:5554
逍遥adb connect 127.0.0.1:21503
iToolsadb connect 127.0.0.1:54001
天天adb connect 127.0.0.1:6555
海马玩adb connect 127.0.0.1:26744
BlueStacksadb connect 127.0.0.1:5555

以夜神模拟器连接为例:

STEP 1. 进入开发者模式,打开 USB 调试。

开启方式:在设置中滑到最后,找到关于平板电脑,点击进去找到版本号,然后连续点击版本号直到提示:您已处于开发者模式。此时返回上一层菜单,可以看到多了一个开发者选项,点击进去,再把 USB 调试 这个选项打开即可。

STEP 2. 在模拟器中手动安装上 Yosemite。

STEP 3. 进入 IDE,搜索连接设备。

img

③ 编写脚本

初学者可以直接创建 .air 文件,使用左侧 Airtest 辅助窗中的录制功能,直接录制脚本。也可以使用单个控件截图屏幕。编写脚本后,可以右击代码,图片/代码模式切换,可以简便的转化代码模式查看,便于二次编辑。

示例如下:

img

脚本如下:

# -*- encoding=utf8 -*-
__author__ = "l*********"

from airtest.core.api import *

auto_setup(__file__)

from poco.drivers.unity3d import UnityPoco

poco = UnityPoco()

ST.OPDELAY=1

touch(Template(r"tpl1638188292639.png", record_pos=(-0.11, -0.384), resolution=(1170, 1872)))
sleep(5)
assert_exists(Template(r"tpl1638272280890.png", record_pos=(-0.248, 0.73), resolution=(1170, 1872)), "验证可正常进入首页")
touch(Template(r"tpl1638270159732.png", record_pos=(-0.34, -0.441), resolution=(1170, 1872)))
sleep(2)
assert_exists(Template(r"tpl1638271841072.png", record_pos=(-0.002, -0.156), resolution=(1170, 1872)), "验证全部列表中存在进行中的项目")
assert_exists(Template(r"tpl1638271854017.png", record_pos=(0.002, 0.275), resolution=(1170, 1872)), "验证全部列表中存在已暂停的项目")
touch(Template(r"tpl1638270181957.png", record_pos=(-0.003, -0.442), resolution=(1170, 1872)))
sleep(3)
assert_exists(Template(r"tpl1638272218000.png", record_pos=(0.0, -0.151), resolution=(1170, 1872)), "验证进行中列表项目正确")
sleep(3)
touch(Template(r"tpl1638270198849.png", record_pos=(0.339, -0.435), resolution=(1170, 1872)))
sleep(3)
assert_exists(Template(r"tpl1638271915550.png", record_pos=(0.0, -0.143), resolution=(1170, 1872)), "验证已完成列表项目正确")
touch(Template(r"tpl1638270159732.png", record_pos=(-0.34, -0.441), resolution=(1170, 1872)))
sleep(3)
touch(Template(r"tpl1638273947371.png", record_pos=(-0.119, -0.203), resolution=(1170, 1872)))
sleep(3)
assert_exists(Template(r"tpl1638274032981.png", record_pos=(0.009, -0.203), resolution=(1170, 1872)), "验证正常进入项目详情")
touch(Template(r"tpl1638274086604.png", record_pos=(0.297, 0.093), resolution=(1170, 1872)))
wait(Template(r"tpl1638274115717.png", record_pos=(-0.014, 0.732), resolution=(1170, 1872)))
touch(Template(r"tpl1638274130803.png", record_pos=(-0.003, 0.733), resolution=(1170, 1872)))
sleep(3)
assert_exists(Template(r"tpl1638274377305.png", record_pos=(-0.01, -0.503), resolution=(1170, 1872)), "验证正常进行中的项目可正常完成")
touch(Template(r"tpl1638274250387.png", record_pos=(0.291, 0.097), resolution=(1170, 1872)))
sleep(3)
wait(Template(r"tpl1638274270442.png", record_pos=(-0.007, 0.074), resolution=(1170, 1872)))
touch(Template(r"tpl1638274280294.png", record_pos=(0.17, 0.195), resolution=(1170, 1872)))
sleep(3)
assert_exists(Template(r"tpl1638274325927.png", record_pos=(-0.012, -0.523), resolution=(1170, 1872)), "验证已完成的项目可正常撤销完成")

④ 执行脚本

脚本编写完成后,点击运行即可运行脚本。运行后没有问题后即可保存脚本,下次需要回归测试时,导入执行即可,也可以直接脱离IDE 运行。不过需要配置 Python 环境。

img

⑤ 生成报告

脚本运行后可以生成测试报告。报告比较清晰,每一个步骤都可以看到,并且有截图可供翻阅检查。

img

4.2 POCO 核心能力

① 点击操作

 poco("star_single").click()

② 滑动操作

# 向下滑动0.2个单位距离 
poco("Handle").swipe([0,0.2])

③ 读取和设置控件属性

控件属性的读取:

  • attr:poco("star_single").attr("name“)

  • Poco 还支持使用特定的 API 获取控件的某一属性值,例如:

    • 获取控件的 name 属性:get_name
    • 获取控件的 text 属性:get_text
    • 获取控件的 position 属性:get_position
    • 获取控件的 size 属性:get_size

设置控件的属性值:可以使用 set_text() 方法或者 setattr() 方法。

# 先激活输入光标
poco("pos_input").click()
# 再执行输入动作
poco("pos_input").set_text("123")sleep(1.0)poco("pos_input").setattr('text',"456")

④ 判断元素是否存在

poco("star_single").exists()

⑤ 拖动操作

控件的 drag_to() 方法,终点可以是一个元素控件,也可以是一个固定的相对坐标。

⑥ 内部偏移和外部偏移

如果选中控件之后,你并不想点击控件的中心位置,而是想点击控件内部的其它位置,我们可以使用 focus() 方法来指定内部偏移量。

⑦ 等待事件

分为 2 种等待事件,一类仅等待不报错,一类等待报错。

  1. **仅等待不报错。**可以使用 wait 方法,指定时间等待控件出现,再进行点击操作(该方法的返回值是控件本身,所以后面可以紧跟控件操作,比如点击、长按)。
# 在5s内等待控件出现,如出现,则进行长按操作
poco(texture="enter").wait(timeout=5).long_click()
  1. 等待,不满足则报错。Poco 控件还支持另外 2 个等待事件,wait_for_appearance()wait_for_disappearance();这两个 API 可以帮助我们等待页面上 某个 UI 出现或者消失,等待的超时时间 timeout 默认为 120 秒,如果在超时时长之内元素没有出现或者消失的话,会报 PocoTargetTimeout 的错误。
# 等待绿色图标出现
poco("green").wait_for_appearance(timeout=10)
# 等待计分文本控件消失
poco(text="Count:").wait_for_disappearance(timeout=5)

以上是 Poco 框架提供的核心能力,更多的用法大家可以参考其官方文档。

总结

本文有点长,但关于小程序测试的方方面面都讲到了,希望对大家有所帮助。

参考资料:

  • https://airtest.doc.io.netease.com/
  • https://poco.readthedocs.io/zh_CN/latest/source/README.html#working-with-poco-objects
  • https://testerhome.com/articles/24314
  • https://mp.weixin.qq.com
  • https://developers.weixin.qq.com/miniprogram/dev/devtools/debug.html

(完)

如果文章对你有帮助,记得留言、点赞、加关注哦!

微信小程序如何测试
03-07 2万+
不需要安装,只要在微信里找到这个小程序打开即可使用,由于小程序的便捷,如今越来越多的平台开发方都纷纷推出自身的小程序应用。 那我们该如何进行微信小程序测试呢? 1、功能测试 功能测试以需求文档和交互视觉文档为准,如果没有这些文档,参考APP的测试方法,也就是说就把它当做手机的APP来测试即可。 2、兼容性测试 01、操作系统的兼容性 这里的操作系统主要是指android系统和iOS系统。小程序运行在微信中,看起来是跟操作系统没关系,实际上还是有关系的,因为底层调用依赖于具体的...
小程序测试的思路和实例
shuirongwu的博客
03-01 5347
小程序测试的思路和举例
微信小程序自动化测试——微信小程序云测服务
最新发布
weixin_47648853的博客
04-22 787
MiniTest 微信小程序云测服务是一套由微信测试团队自主研发,联合WeTest云真机能力,共同推出的微信小程序自动化测试服务。
小程序测试
weixin_53966429的博客
04-08 2448
当谈到小程序时,通常指的是在微信生态系统中的小程序,因为微信小程序是最为广泛使用和熟知的一种。
微信小程序怎么测试
fx20211108的博客
07-20 7765
小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。小程序是在2017年1月9日,由微信之父“张小龙”带领发布上线的。小程序一开始对C端用户开放的时候,因为那个时候的小程序数量比较少,入口又比较深,所以它的用户量的增长非常的慢,后来在2017年年底,小程序开放了一些小游戏,用游戏去吸引用户量,并且增加了首页的下拉访问小程序的入口。微信把跳。...
2020-05-28你心心念念的小程序如何测试,这篇文章将告诉你!【测试基础必看】
爱码小哥
05-28 1079
什么是小程序 英文名Mini Program,是一种不需要下载安装即可使用的应用,是内嵌在微信APP里面的一款新形态软件。它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。 小程序的架构:包含View视图层、AppService逻辑层。View层用来渲染页面结构,AppService层用来逻辑处理、数据请求、接口调用,它们在两个线程里运行。视图层使用WebView渲染,逻辑层使用JSC
基于微信小程序的在线测试开发.docx
06-09
基于微信小程序的在线测试开发.docx基于微信小程序的在线测试开发.docx基于微信小程序的在线测试开发.docx基于微信小程序的在线测试开发.docx基于微信小程序的在线测试开发.docx基于微信小程序的在线测试开发.docx...
微信小程序引入日历组件引入的moment.js文件
05-23
微信小程序引入日历组件时引入的moment.js文件,获取日期
微信小程序源码 备忘(学习版)
06-18
微信小程序源码 备忘(学习版)微信小程序源码 备忘(学习版)微信小程序源码 备忘(学习版)微信小程序源码 备忘(学习版)微信小程序源码 备忘(学习版)微信小程序源码 备忘(学习版)微信小程序源码 备忘(学习...
微信小程序源码-备忘.zip
03-28
微信小程序源码-备忘.zip微信小程序源码-备忘.zip微信小程序源码-备忘.zip微信小程序源码-备忘.zip微信小程序源码-备忘.zip微信小程序源码-备忘.zip微信小程序源码-备忘.zip微信小程序源码-备忘.zip...
手机微信小程序测试用例
02-28
微信小程序系统功能测试用例
jmeter4.0进行微信小程序测试
10-08
jmeter4.0进行微信小程序测试详细步骤指导书jmeter4.0进行微信小程序测试详细步骤指导书jmeter4.0进行微信小程序测试详细步骤指导书
微信小程序测试分享
12-25
原创小程序测试分析,适用人群为想简单了解小程序测试,文档中简单介绍小程序,一些测试注意点,小程序开发工具使用技巧
微信小程序中的ios兼容性问题
03-29
1.ios中input的placeholder属性字体不居中 对placeholder设置line-height及font-size 对input设置高度 2.ios中滚动卡顿 设置-webkit-overflow-scrolling:touch; 3.微信小程序中解决ios中new Date() 时间格式不兼容 在实现倒计时,根据后台返回的时间格式转换时,后台返回了时间格式为”2018-11-12 11:12:11”,然后利用new Date() 转换时,ios中无法展示,安卓中显示正常 let time = '2018-12-10 11:11:11'; let temporaryTime1
小程序测试应该进行哪些测试?起到什么作用?
卓码测评
09-06 460
在如今小程序蓬勃发展的时代,越来越多的企业选择开发小程序来扩大业务。在推出小程序之前,进行全面的测试是至关重要的。
小白学习微信小程序的代码测试和单元测试
吃不胖.
02-29 359
下面是一些常见的代码测试和单元测试的内容和案例。案例一:测试页面跳转功能 描述:测试小程序的页面跳转功能是否正常,包括跳转到其他页面和返回上一级页面。案例二:测试数据加密功能 描述:测试小程序的数据加密功能是否正常,用户输入的数据能否正确加密。案例一:测试输入验证功能 描述:测试小程序的输入验证功能是否正常,用户能否输入非法字符。案例一:测试在不同型号手机上的兼容性 描述:测试小程序在不同型号的手机上是否正常运行。案例二:测试在不同版本微信上的兼容性 描述:测试小程序在不同版本的微信上是否正常运行。
App测试、H5测试小程序测试
又菜又爱玩的小熊
11-30 1498
APP类型原生APP纯H5的APP混合APP(原生+H5)app云测试平台:百度云测、testin云测等 众测?--兼职testin云测,免费50款机型;安装、打开app、monkey、关闭app、卸载、测试报告。
uniapp如何真机测试微信小程序测试与模拟器测试
热门推荐
weixin_45689946的博客
11-05 1万+
1、uniapp如何在真机测试 首先,你的手机要打开开发者模式,下拉选择USB调试(各个手机开发开发者模式的方式不同,不懂如何打开USB调试的可以百度搜索)。接着连接数据线,选择文件传输。 接着在HbuilderX中选择运行 > 运行与手机或模拟器 > 运行,就可以了。 2、如何在微信小程序端运行uniapp 首先,你要先下载微信开发者工具。如果不知道怎么下载微信开发者工具可以参考这篇文章 微信小程序开发流程、开发者工具下载安装 微信小程序开发(创建项目介绍) 你要创建过一个微信小程序项目之后
微信小程序性能测试工具-Trace
tiantianquan51的博客
04-14 1164
微信 Andoid 6.5.10 开始,微信官方提供了 Trace 导出工具,开发者可以在开发者工具 Trace Panel 中使用该功能。安装 adb: brew cask install android-platform-tools。可能遇到的问题: 提示:Error: Unknown command: cask。打开手机调试模式, 连接电脑, 可以使用预览或者真机调试, 在手机端运行小程序小程序打开调试工具, 打开性能面板, 运行一段时间后, 导出 trace 数据。1、安装 adb 工具。
uniapp无法运行到小程序,[微信小程序开发者工具] - initialize 18:21:40.076 [微信小程序开发者工具] 18:21:40.076 [微信小程序开发者工具] 18:21:40.708 [微信小程序开发者工具] × IDE may already started at port 48712, trying to connect 18:21:40.709 [微信小程序开发者工具] 18:21:40.712 [微信小程序开发者工具] 18:21:43.845 [微信小程序开发者工具] √ IDE server started successfully, listening on http://127.0.0.1:41989 18:21:43.846 [微信小程序开发者工具] - open IDE 18:21:43.849 [微信小程序开发者工具] 18:21:43.849 [微信小程序开发者工具] 18:21:44.918 [微信小程序开发者工具] √ open IDE 18:21:44.920 [微信小程序开发者工具]
06-10
这个错误提示是微信小程序开发者工具已经在使用中,导致uniapp无法将项目运行到小程序上。可以尝试以下解决方法: 1. 关闭微信小程序开发者工具,重新打开并运行uniapp项目。 2. 确认微信小程序开发者工具是否有...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Git入门指南十一:Git branch 分支与合并分支 142544
  • 【Android数据传递】Intent传递List和Object和List<Object>(附源码) 129083
  • 【Git配置技巧】01. 配置文件git config介绍 111415
  • Android截图命令screencap 98375
  • python时间处理之datetime 82450

分类专栏

  • 现代命令行工具指南 付费 18篇
  • 软件测试沉思录 24篇
  • 软件测试周刊 90篇
  • 好工具就是生产力 12篇
  • 玩转 mac OS 17篇
  • 每天一个Linux命令 23篇
  • 玩转 Git 14篇
  • 每天一个Linux命令 26篇
  • 玩转 Ubuntu 13篇
  • Markdown 实用指南 12篇

最新评论

  • 在搜索结果中屏蔽掉垃圾网站 - Google Hit Hider by Domain

    leybyr: 在百分浏览器(也是谷歌内核)上试了下百度必应等,没发现block标记。

  • 如何一键直达页面顶部或底部?

    yrh150911: 可以到顶部 怎么到底部

  • 【测试沉思录】18.如何测试微信小程序?

    Allison392: 1.06.2310080我刚刚安装的这个稳定本班,没看到trace工具呢

  • 这可能是用 Markdown 写微信公众号的终极解决方案

    ESRG技录橙: Chorm的扩展可以安装在edge?

  • 【测试沉思录】9. 数据工厂低代码平台探索与实践

    qq_39572448: 你好,代码开源供学习么

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 【测试沉思录】21. 如何用 JMeter 编写性能测试脚本?
  • 【测试沉思录】23. 如何实现基于场景的接口自动化测试用例?
  • 【测试沉思录】22. 前端性能测试怎么做?
2022年81篇
2021年62篇
2020年3篇
2019年3篇
2018年1篇
2017年7篇
2016年23篇
2015年13篇
2014年43篇
2013年74篇
2012年49篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕小烦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司铜川百度竞价包年推广公司雅安英文网站建设价格昭通关键词排名推荐南宁SEO按天收费推荐宁德如何制作网站公司铜陵品牌网站设计报价甘孜百姓网标王推广公司孝感建设网站报价海南网站搜索优化推荐承德网站设计模板哪家好惠州网页制作哪家好本溪网站改版多少钱桂林关键词按天计费推荐德州模板推广价格通化SEO按效果付费多少钱内江网站搜索优化多少钱济宁设计公司网站推荐和县网站设计报价玉林网页设计哪家好山南品牌网站设计内江企业网站建设公司阳江网站推广报价盘锦模板制作报价肇庆阿里店铺托管多少钱渭南SEO按天收费推荐沈阳关键词排名价格红河关键词排名包年推广推荐德宏seo优化价格惠州企业网站制作价格河源优秀网站设计价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化