一种精准monkey测试的方法
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
最新文章
- 用Kotlin开发Android应用(III):扩展函数和默认值
- 三角形问题的解决复杂度O(n^3)和O(nlogn)的比较
- JVM的GC实现详解
- SQLServer学习笔记<;>;日期和时间数据的处理(cast转化格式、日期截取、日期的加减)和 case表达式
- [ActionScript 3.0] AS3.0 对象在一定范围随机显示不重叠
- bzoj1562
- oracle trunc 函数处理日期格式
- Memcached使用笔记
- php 使用jquery实现ajax
- qt动态更新界面的菜鸟代码,请指出
- Redis--Latest Windows Version
- 纯CSS实现table表头固定(自创备忘)
- 剑指Offer-链表中环的入口结点
- C++设计模式——迭代器模式
- 移除SharePoint2013里的NoteBook笔记本链接
- python标准库介绍——15 fileinput 模块详解
- spring boot 自定义属性覆盖application文件属性
- oracle11g安装完成后修改字符集
- RocketMQ学习分享
- 使用maven插件自动部署web应用至Docker容器的tomcat
热门文章
- 【[USACO12FEB]附近的牛Nearby Cows】
- Windows与kali双系统安装启动项的选择问题
- HDU 3292 【佩尔方程求解 &;&; 矩阵快速幂】
- LVS的DR模式负载均衡
- 手工检测SQL注入(安全性测试)
- Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践
- java web项目用cookie记住用户名、密码
- ABAP术语-SAP GUI for HTML
- JavaBen 中 如何将字段设置为 ";text"; 文本类型
- JSP/Servlet开发——第七章 Servel基础