资讯专栏INFORMATION COLUMN

【UI自动化测试】Mac下进行Monkey测试

shinezejian / 2229人阅读

摘要:一对压力测试的简介是中的一命令行工具,对的稳定性和健壮性进行测试。完成以上操作后就可进行测试了,每次只能对一台设备进行测试。

【写在前面】在进行app测试中了解到monkey测试,故在网上学习了一些资料,但自己在实践中仍有一些疑惑和问题出现。在此记录下自己的实际操作,后续仍然会不断调整,以期完善。
一、对monkey压力测试的简介

monkey:是Android中的一命令行工具,对app的稳定性和健壮性进行测试。
特点:1、测试对象为程序包,有一定局限性;2、伪随机事件,不能自定义;3、可设置事件数量、类型、频率。
适用情况:ANR和CRASH异常情况;低概率很难复现的异常。

二、环境搭建与配置 1、下载安装JDK(Mac OS X):

http://www.oracle.com/technet...
成功后打开终端,输入‘javac -version’,若弹出版本信息则说明安装成功。

2、下载Android开发环境——Android Studio:

此环境自带SDK,方便下一步配置adb。
下载Android Studio的参考资料戳这里
如果以上过程中Android SDK的下载时间过长,想手动配置,相关参考资料戳这里

总之,我们需要得到Android SDK的环境及其路径。

在Android Studio中查看SDK路径的方法见下图:

3、配置adb环境

终端中输入‘adb’,会出现提示-bash: abd: command not found,故我们此时需要添加adb命令到环境变量中:
(1)终端中输入‘touch .bash_profile’创建文件;
(2)输入‘open -e .bash_profile’打开文件;
(3)在文件中设置:

ANDROID_HOME=/Users/xxx/Library/Android/sdk 
(即之前得到的SDK路径)
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

之后直接关闭文本窗口(会自动保存);
(4)输入‘source .bash_profile’更新文件;
(5)再次输入‘adb’,出现adb命令参数解释,表明配置成功。

4、允许USB调试

若使用真机,用USB将手机和Mac连接,在手机端进行操作:
(1)选择USB连接方式为设备文件管理;
(2)设置->开启开发者选项->勾选‘USB调试’(真机和模拟器上皆需进行)。

5、检测连接设备

在终端中输入’adb devices‘,此时已连接设备列表下应存在设备序列号;我使用的网易木木的模拟器,可看到

⚠️注意,若首次操作成功,但之后存在检测不到连接设备的情况,可能需要重启服务,具体操作是:
a、在终端下,输入‘cd Users/xxx/Library/Android/sdk/platform-tools’来到adb所在目录下;
b、再依次输入‘adb kill-server‘和’adb start-server’来重启服务;
c、之后再输入‘adb devices’,一般便可检测到连接设备。

⚠️另外,部分真机可能存在检测不到的情况,可进行创建、修改adb_usb.ini文件,操作如下:
a、在终端中输入‘system_profiler SPUSBDataType’,找到手机的Vendor ID并记录;
b、在终端中输入‘vi ~/.android/adb_usb.ini’,创建并打开文本,按‘I’键可对文本进行编辑,向文本中添加记录的Vendor ID(若添加多个,需确保每个id占一行且文本中无空行),完成后按‘esc’键,然后键入‘:wq!’,即可保存并退出文本。完成此步后将发现路径/Users/xxx/.android下存在adb_usb.ini文件;
c、将手机拔掉重新接入Mac,重复4.(1)(2),在终端中输入‘adb kill-server’,然后输入‘adb start-server’,再次输入‘adb devices’查看是否识别到设备。
【附】.android是隐藏目录,需要开启隐藏目录显示,开启方式为:
在终端中输入‘defaults write com.apple.finder AppleShowAllFiles -bool true’,退出终端;然后单击窗口左上角的苹果标志->强制退出->Finder->重新启动,选择‘这台Mac’,搜索框中输入user,来到用户->xxx(当前用户名)下即可看到隐藏文件们。

完成以上操作后就可进行monkey测试了,每次只能对一台设备进行测试。
若想对多台设备同时进行测试,可戳此参见

此外,连接一台设备时,终端输入‘adb shell’即可进入命令环境;若连接了多台设备,输入‘adb -s 设备序列号 shell’进入命令环境;‘exit’可退出当前命令环境。

三、进行测试 1、基本语句:

adb shell monkey [-p 包名] [其他参数] [-v] 测试次数 [> /user/…/result.txt](注:‘> /user/…/result.txt’可将结果打印到文本中)

2、在mumu模拟器下的简单实例:

(1)在Mac上完成环境配置,安装并启动模拟器,确保通过‘adb devices’可检测到emulator;
(2)将待测应用程序的apk文件放到platform-tools文件夹下,在终端中输入:
"cd /Users/xxx/Library/Android/sdk/platform-tools"来到此路径下,再输入‘adb install 应用程序名.apk’,程序将安装在模拟器上;操作及结果如下:

(3)保持模拟器打开,终端保持platform-tools目录下,并输入‘adb logcat>log.txt’,将新建log.txt,终端则在当前屏幕下显示日志内容(目前为空);
(4)点击模拟器中的待测程序,待其打开后来到终端,按下‘ctrl+c’中止adb logcat命令;
(5)打开log.txt,查找关键字‘displayed’,找到到类似‘Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms‘的结果,其中,com.mm.android.hsy就是包名;
(6)终端输入‘adb shell’进入命令模式,输入一个基本命令(启动指定的应用程序,并向其发送1000个伪随机事件): monkey -p 包名 -v 1000,观察模拟器界面,发现app页面开始进行测试。若app发生crash,查看终端,可看到类似如下结果:

⚠️但是,工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试,所以需要利用事件(参数)选项来扩充命令。例如可扩充为:

monkey -p 包名 -s 1000 --ignore-crashes --ignore-timeouts -vv 2000 > 日志路径

此命令翻译为自然语言是:monkey作用于此包,产生时间序列的种子序列值定为1000,运行中忽略程序崩溃、超时,同时监视本地程序崩溃,日志的详细信息级别为二级,产生2000个点击事件,相关日志会保存在所写路径中,搜索关键字‘crash’或‘anr’即可查看发生错误的部分(本人未能成功保存日志,是手动将终端中的日志内容拷贝到文本中的OTZ)。

3、命令参数简介:(进入‘adb shell’命令模式)

monkey -help:可查看参数说明列表。参数选项有:
(1)-p 包名1 -p 包名2 … :指定一或多个待测试的包,若不指定则测试中可打开任意app;
(2)-v:指定打印日志的详细程度,有‘-v’,"-v -v","-v -v -v"三个级别;
(3)-s seed值:在测试中,虽然用户操作序列(每次操作按一定的顺序所组成的一系列操作)是随机生成的,但只要对同一个包指定相同的Seed值,就能使测试事件相同,可用于排错。所以也说这个操作序列是伪随机的。若不添加此参数,结果中会自动生成seed值;
(4)–-throttle 毫秒数:指定操作(即事件)间的时延,单位是毫秒;
(5)–-ignore-crashes:使得操作序列可以全部执行完,而不会在发生崩溃时就终止程序进程;
(6)–ignore-timeouts:使得操作序列可以全部执行完,而不会在发生ANR(Android Not Responding)时就终止程序进程;
(7)–-ignore-security-exceptions:使得操作序列可以全部执行完,而不会在发生许可错误时(如证书许可,网络许可等)时就终止程序进程;
(8)–-kill-process-after-error:使得当应用程序发生错误时停止运行并保持在当前状态,即仅是静止在发生错误时的状态,而不是结束该应用程序的进程;
(9)–-monitor-native-crashes:指定监视并报告应用程序发生崩溃的本地代码;
(10)–-pct-事件1 事件百分比1 -pct-事件2 事件百分比2 … :用于指定某类事件数目占总事件数目的百分比;
其中所指定事件参数选项可为:
-flip(点击事件)
-touch(触摸事件是一个down-up事件)
-motion(动作事件由一个down事件、一系列的伪随机事件和一个up事件组成)
-trackball(轨迹事件,在屏幕上进行随机拖动)
-nav(基本导航事件,如上下左右键)
-majornav(主要导航事件,通常引发图形界面中的动作)
-syskeys(系统按键事件指如系统按键Home、Back、Start Call、End Call及volumeControl)
-appswitch(启动activity事件)
-anyevent(其它类型事件)
注意,各事件类型的百分比总数不能超过100。

四、日志分析

一般我们可以一次发送5万次随机事件的请求,每个请求之间的间隔为150毫秒,测试大约会进行40min,完成以后就可以查看日志。
日志中可能的错误:

程序异常退出,uncausedexception (ctrl+f搜索‘Fatal’)

程序强制关闭,ForceClosed (简称FC) (同上)

程序无响应,ApplicationNo Response(ctrl+f搜索‘ANR ’,加空格是为了屏蔽掉一些无效信息)

手动生成。

更详细的日志内容和分析举例可参见:链接描述

结束语:本人在实践中仍有很多困惑未能解决,如无法通过参数选项来减少系统事件,等。若大家有兴趣,可以深入探究,或去网络查阅MonkeyRunner测试的学习资料。
在此要感谢网络上所有提供资料的大神,也请大家多多指教和分享,谢谢。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14003.html

相关文章

  • 如何通过动化测试 应对App的频繁迭代

    摘要:自动化测试的流程是搭建框架设计测试用例编写脚本进行测试得出结果。它支持所有的事件操作,通过模拟器也能运行测试,很多自动化测试脚本编写客户端都封装了,包括百度云测腾讯优测等。 移动互联网在改变我们生活的同时,给各行各业都带来了翻天覆地的变化,就拿移动应用开发来说,传统软件的迭代周期往往以年、月计,而到了手机上,几乎每周都有新版本上线,一些勤快的应用甚至三五天就更新一个版本。如此频繁的迭代...

    YanceyOfficial 评论0 收藏0
  • 超全的App 测试工具大全,收藏这篇就够了【附带官网|GitHub地址】

    摘要:三性能测试工具官网介绍腾讯开源的的随身调测平台,支持和。官网介绍腾讯游戏部门开发的移动全平台性能测试分析工具平台。百度的服务目前主要为收费服务。 随着移动互联网的高速发展,App 应用非常火,测试工程师也会接触到各种 app 应用。除了人工测试之外,也可以通过一些测试工具来提高我们的测试效率...

    MRZYD 评论0 收藏0
  • 移动端Appium动化测试框架的优势

    众所周知,现在市面上的移动端操作系统已被Android和IOS占领,其中Android的份额更是在80%以上。那么面对市面上林林总总的自动化测试框架和工具,为什么说Appium在自动化测试框架的统治级优势呢,下面先看一下各大主流框架的对比及优势。  一、主流框架对比   下面对比了市面上主流的几大框架:showImg(https://segmentfault.com/img/bVbjsK9?w=9...

    jk_v1 评论0 收藏0
  • 关于Monkey的一切都在这里

    摘要:忽略是的一个错误,在页面无法响应事件的时候会报出来。一般遇到这样的情况,表示当前有耗时操作在线程指定,导致卡了。基本上配置事件百分比,有一些事件已经随着发展被消失掉了,例如轨迹球,在现在主流的设备上,已经基本上看不见轨迹球的影子了。 版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。 允许有条件转载,转载请附带底部二维码。 一、什么是Monke...

    张率功 评论0 收藏0
  • Android分享:如何高效率开发App

    摘要:前言关于如何高效率开发,开发前需要做哪些准备呢之前在知乎和回到过类似的问题,在这里按划分功能模块设计框架质量把关内测,正式发布的流程来总结。 前言   关于如何高效率开发App,开发前需要做哪些准备呢?之前在知乎和segmentfault回到过类似的问题,在这里按划分功能模块---设计APP框架---APP质量把关---内测,正式发布的流程来总结。 1)功能模块 网络模块 okhtt...

    xingpingz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<