一种精准monkey测试的方法

针对控件布局不均衡的APP,提出一种改进的Monkey测试方案,利用UIAutomator获取控件信息,实现精准点击,提高测试效率。

作者:王薇,腾讯云与智慧产业高级工程师
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。
原文链接:https://wetest.qq.com/lab/view/413.html

WeTest 导读

相信大家都知道移动端应用的monkey测试吧,不知你们有没有为monkey测试的太过于随机性的特性有过困扰,至少在我们这种界面控件较少且控件位置较偏的app的使用上其测试有效性大打折扣。因此本文主要针对这个问题,提供了一种解决方案。


1. 问题背景

Monkey测试:是Android自动化测试的一种手段,简单的说是像猴子一样乱点,它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),是一种随机性测试,为了测试软件的健壮性和稳定性,通常用于安卓应用的压力测试。

因此,我们的产品也用了这种传统的monkey手段进行app稳定性测试,在使用一段时间后,并未发现实际性问题。通过观察一段时间的执行过程,发现由于我们app几个页面控件布局是比较偏上和偏下边缘,中间只有一个大按钮,这样中间大按钮命中率比较高经常会进入同一个页面,那么其他页面和按钮的功能几乎没有被点击到。这种传统monkey测试控件命中率太低!

市面上有很多类似布局的app,相信在采用传统monkey测试时也存在此类问题。

2. 解决方案

我们知道,对于app页面布局的控件位置、属性等信息是可以用android sdk 工具包中的uiautomatorviewer.bat查看的,如果在monkey测试时能获得这些控件的位置信息,那么就可以实现控件的精准点击。android sdk提供了这个命令“adb shell uiautomator dump”,可以实现将当前activity布局文件dump到xml文件中,这样问题就得到了解决。

dump 布局文件:

在这里插入图片描述

得到的window_dump.xml内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy rotation="0">
<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.bass.cleaner.security" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1080,1776]">
<node index="0" text="" resource-id="" class="android.widget.LinearLayout" package="com.bass.cleaner.security" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1080,1776]">
...
</hierarchy>

uiautomatorviewer.bat查看控件属性:

在这里插入图片描述

但是,又一问题,xml中的控件非常多,并非每个控件都可以点击,如果挨个尝试点击那么执行效率也是非常慢的,不符合预期。幸好,控件有个clickable属性,当其等于true时,表示该控件可点,反之不可点。那么,我们将控件信息xml文件中“clickable=true”的控件过滤出来,再去计算这些控件的位置进行点击,就可以实现精准点击。到此,问题得到完美解决。

举例,执行流程如下:
在这里插入图片描述

当然,在实际中,还存在控件的点击顺序问题,如果点击顺序不合适,也会存在有些控件被频繁点击、有些控件可能点击不到的情况。这就需要根据实际的测试目标来指定执行策略,例如,在当前页可点击的控件列表中,随机点击、顺序点击,或存储各页面控件的目录树,进行深度遍历点击等等。

随机测试完后,有时还需要还原执行过程,定位发现的问题,所以在执行过程中,我还加入了一些截图操作,在每次点击控件前进行点击坐标的标记、截图,这样,测试完后就能根据这些截图很完美的还原出了整个随机测试的过程,大大简化的问题的定位。举例,下图是执行过程中的几张连续截图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
→→

图中,红点位置就是点击位置,很直观的展示了执行过程。

总结

本文所述的方案很好的解决了monkey测试在控件布局不均衡的app上执行有效性低的问题。同时,实现了一种自适应的随机测试手段,也就是无需针对不同app编写不同的随机测试脚本,实现了一套测试代码用于所有app的随机性测试。


“自动化兼容测试” 服务将提供云端自动化兼容服务,提交云端百台真机,并行测试。快速发现游戏/应用兼容性和性能问题,覆盖安卓主流机型

点击:https://wetest.qq.com/product/auto-compatibility-testing 了解更多详情。

如果使用当中有任何疑问,欢迎联系腾讯WeTest企业QQ:2852350015

### 微信小程序 Monkey 测试实现方法 #### 自动化随机测试工具与设置 微信小程序支持通过 **MiniTest 插件** 来运行 Monkey 测试,该插件内置了一种智能化的 Monkey 策略[^1]。此策略能够基于微信团队自研的智能探索算法,自动识别小程序中的可操作节点并构建探索路径。因此,在无需编写额外代码的情况下即可完成对小程序页面的功能覆盖。 对于希望进一步优化测试效果的情况,可以考虑以下两种主要模式: - **智能化 Monkey 模式**: 这种模式适合于页面结构较为简单的应用。它能通过对历史数据的学习不断调整其行为逻辑,提高覆盖率和效率[^1]。 - **普通 Monkey 模式**: 此模式则依赖传统的随机点击方式进行界面交互验证,尽管不如前者精准,但在基础层面仍有助于捕捉常见的错误如 JavaScript 错误 (JS Error) 和黑/白屏现象。 无论选择哪种方式执行测试,一旦发现问题(例如崩溃 Crash 或脚本错误 JS Errors),系统都会及时记录下来并将状态标记为失败,同时生成详细的报告辅助分析定位问题所在。 如果目标平台扩展至 Android 应用,则需准备相应的开发环境包括安装 JDK 及 Android SDK 并确保它们被正确配置到系统的 PATH 路径下[^2]。接着可通过命令行调用 ADB 命令配合特定参数启动设备上的应用程序来进行更深入级别的功能性和性能方面的评估工作[^2]。 值得注意的是,在 Windows 系统环境下处理日志过滤时,“grep”应替换为“findstr”,比如查看某个活动是否处于前台可用如下指令 `adb shell dumpsys window w | findstr mCurrent`[^3]。 综上所述,针对微信小程序开展有效的自动化随机测试既可以通过官方提供的 MiniTest 解决方案轻松达成目的;也可以借助外部资源像 Android 的 Monkey 工具链满足更加复杂场景下的需求。 ```bash # 启动Android端Monkey测试示例 adb shell monkey -p com.example.package.name --throttle 300 -v 500 ``` 以上是一条基本用于触发指定包名的应用程序经历大约五百次事件之间间隔三百毫秒延迟的基础语法展示[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值