【写在前面】在进行app测试中了解到monkey测试,故在网上学习了一些资料,但本身在实践中仍有一些疑惑和问题出现。在此记录下本身的实际操做,后续仍然会不断调整,以期完善。
monkey:是Android中的一命令行工具,对app的稳定性和健壮性进行测试。
特色:一、测试对象为程序包,有必定局限性;二、伪随机事件,不能自定义;三、可设置事件数量、类型、频率。
适用状况:ANR和CRASH异常状况;低几率很难复现的异常。html
http://www.oracle.com/technet...
成功后打开终端,输入‘javac -version’,若弹出版本信息则说明安装成功。java
此环境自带SDK,方便下一步配置adb。
下载Android Studio的参考资料戳这里
若是以上过程当中Android SDK的下载时间过长,想手动配置,相关参考资料戳这里android
总之,咱们须要获得Android SDK的环境及其路径。shell
在Android Studio中查看SDK路径的方法见下图:bash
终端中输入‘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命令参数解释,代表配置成功。oracle
若使用真机,用USB将手机和Mac链接,在手机端进行操做:
(1)选择USB链接方式为设备文件管理;
(2)设置->开启开发者选项->勾选‘USB调试’(真机和模拟器上皆需进行)。app
在终端中输入’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’可退出当前命令环境。
adb shell monkey [-p 包名] [其余参数] [-v] 测试次数 [> /user/…/result.txt](注:‘> /user/…/result.txt’可将结果打印到文本中)
(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)。
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,完成之后就能够查看日志。
日志中可能的错误:
更详细的日志内容和分析举例可参见:连接描述
结束语:本人在实践中仍有不少困惑未能解决,如没法经过参数选项来减小系统事件,等。若你们有兴趣,能够深刻探究,或去网络查阅MonkeyRunner测试的学习资料。 在此要感谢网络上全部提供资料的大神,也请你们多多指教和分享,谢谢。