Android_Monkey_测试执行策略及标准

一、Monkey命令概述

NO命令说明用法解释
1 -p ALLOWED_PACKAGE用于指定某个apk,可以使用多个-p选项,但是每个-p命令选项只能用于一个apk
如果不指定-p,Monkey就会默认进行全系统测试。
 -p com.android.contacts可以进行特定apk的Monkey测试
2 -c MAIN_CATEGORY用于指定某个类,可以使用多个-c选项,但是每个-c命令选项只能用于一个类。如不指定类,Monkey就默认执行Intent.Category_LAUNCHER或者Intent.Category_MONKEY -c intent.CATEGORY_LAUNCHER所有类别:
* CATEGORY_DEFAULT
* CATEGORY_BROWSABLE
* CATEGORY_TAB
* CATEGORY_ALTERNATIVE
* CATEGORY_SELECTED_ALTERNATIVE
* CATEGORY_LAUNCHER
* CATEGORY_INFO
* CATEGORY_HOME
* CATEGORY_PREFERENCE
* CATEGORY_TEST
* CATEGORY_CAR_DOCK
* CATEGORY_DESK_DOCK
* CATEGORY_CAR_MODE 
3 --ignore-crashes忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。 --ignore-crashes针对各种crash的忽略,监控,停止进程操作
4 --ignore-timeouts忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。 --ignore-timeouts
5 --ignore-security-exceptions忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。 --ignore-security-exceptions
6 --monitor-native-crashes监视系统中本地代码发生的崩溃。 --monitor-native-crashes
7 --ignore-native-crashes忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。 --ignore-native-crashes
8 --kill-process-after-error设置了该选项,出错的程序就会停止。 --kill-process-after-error
10 --pct-touch PERCENT调整触摸事件的百分比 --pct-touch 20所有的事件的百分比应该是100%,从Monkey测试报告中没有发现特定事件的影响:比如在U8800上进行100%的轨迹球事件测试,没有发现任何影响。
11 --pct-motion PERCENT调动作事件的百分比 --pct-motion 20
12 --pct-trackball PERCENT调整轨迹球事件的百分比 --pct-trackball 10
13 --pct-syskeys PERCENT调整系统按键事件的百分比(home\back\call\end call\volume key) --pct-syskeys 5
14 --pct-nav PERCENT调整基本导航事件的百分比 --pct-nav 5
15 --pct-majornav PERCENT调整主要导航事件的百分比(ok\cancel\menu等引发图形接口的动作) --pct-majornav 10
16 --pct-appswitch PERCENT调整启动活动的百分比 --pct-appswitch 10
17 --pct-flip PERCENT调整点击事件的百分比 --pct-flip 10
18 --pct-anyevent PERCENT调整其他类型事件的百分比(其他所有类型) --pct-anyevent 10
19 --pkg-blacklist-file PACKAGE_BLACKLIST_FILEapk黑名单,屏蔽掉黑名单中的apk。 --pkg-blacklist-file /data/blacklist/blacklist.txt1.需要新建黑白名单文件夹和同名txt文件。
2.然后在txt文件中编辑apk列表。
20 --pkg-whitelist-file PACKAGE_WHITELIST_FILEapk白名单,只测试包含在白名单中的apk --pkg-whitelist-file /data/whitelist/whitelist.txt
21 --wait-dbg一旦连接了调试器,Monkey就会停止。 --wait-dbg开发调试时使用
9 --hprof用于在Monkey事件时序的前后,在/data/misc中生成5Mb左右的profiling报告。在data\misc文件夹下产生一个“.hprof”的文件(heap-dump-tm1312534653-pid159.hprof)
22 --dbg-no-events设置该选项后,Monkey会执行初始启动,进入到测试活动中而不产生任何事件。可以设置几个apk包以及其他环境,来监视应用程序所调用的包之间的转换。 --dbg-no-events
25 --port port为Monkey开启专用端口。之后Monkey就不会执行,此时你就可以像Monkey一样乱点,Monkey会输出你点击后的回馈信息。如果你打完命令后,模拟器没有启动你所要启动的包,需要自己启动你在-p中指定的应用.开启专用端口后,人可以模拟Monkey进行操作。用于开发手动重现问题。
26 -s SEED随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件时序。 -s 100主要帮助开发排查错误并验证修改的代码
27 -v每个-v都将增加反馈信息的级别。共3个级别,因此,-v -v -v可以提供最详细的设置信息。 -v -v -v使用3个v命令,可以在Monkey测试报告中看最详细的设置信息
28 --throttle MILLISEC事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件。 --throttle 3000设置事件间的时间延时
29 --randomize-throttle事件之间插入随机延时。 --randomize-throttle
30 COUNT执行数99999执行事件次数

 二、死机log信息汇总

NOlog信息类型可以解决哪些问题如何获得不同的log信息说明如何导出该文件
1LogcatApp crash通过命令获得:
#adb shell logcat –v time > c:\logcat-log.txt
可以通过命令导出
2BugreportApp crash获取bugreport和dumpstate:
#adb shell bugreport > bugreport-yyyy-mm-dd-hh-mm-ss.txt
#adb shell dumpstate > dumpstate-yyyy-mm-dd-hh-mm-ss.txt
dumpstate是一个具体对系统的各个信息进行收集的程序
bugreport则会以服务的形式来启动dumpstate,它不完成具体的收集操作,只负责将dumpstate的信息通过socket的形式进行接收并重定向出来。它存储在/mnt/sdcard/bugreports或者/data/bugreports或/HWUserData
可以实现自动导出
3Dump logApp crash从qpst或者dump工具导出1.利用QPST efs工具,手动创建dump目录和一个空白的debug.dbg文件在dump目录下。
2.通过QXDM将NV905设置为0(0表示进入dump,1表示重启,2或者未激活表示不做任何动作)
只能手动导出
4ANR traceApp not respondingTrace.txt文件保存在在/data/anr中,可以通过命令导出可以通过命令导出
5DropboxApp crash、kernel保存在/data/system/dropbox,该目录下有4类信息对分析比较有帮助:
1.APANIC_CONSOLE@xxxxxxxxxxxxx.txt.gz
2.APANIC_THREADS@xxxxxxxxxxxxx.txt.gz
3.system_server_watchdog@xxxxxxxxxxxxx.txt
4.system_server_crash@xxxxxxxxxxxxx.txt
APANIC_CONSOLE@xxxxxxxxxxxxx.txt.gz:记录的是核心发生死机的时候的核心LOG
APANIC_THREADS@xxxxxxxxxxxxx.txt.gz:核心发生死机的时候各个线程在核心中的调用stack
system_server_watchdog@xxxxxxxxxxxxx.txt:记录了发生死机的时刻上系统对SystemServer中的各个线程的调用stack进行记录的一个文件
system_server_crash@xxxxxxxxxxxxx.txt:记录了发生死机的时刻上SystemServer中的具体死机的异常点
可以实现自动导出
6TombstonesNative保存在/data/tombstones,该目录下生成一个tombstone_xx文件Tombstone文件是异常进程的调用栈信息,在该进程异常退出或崩溃时由android的后台进程debuggerd负责生成可以实现自动导出
7CoredumpNative一是编译器支持:要产生coredump文件,在android编译的时候要加上调试-g选项以支持coredump文件的生成。
二是环境参数支持:可以修改<工程目录>system/core/rootdir下的init.rc文件来支持coredump文件的产生。
这是一种常见的linux收集进程异常信息的机制。用户态进程在中止时将产生信号,linux内核根据信号的类型来决定是否要产生coredump文件。Android上保留了这种机制,但默认是关闭的。要使进程产生coredump文件,还要满足两个条件:一是编译器支持,二是环境参数支持。目前没有开发使用过该信息去处理死机问题
8KmsgKernel、Native保存在cat/proc/kmsg来查看sysrq信息,它用来收集内核和用户态进程信息。
需要通过adb命令:
打开这个功能,运行:
# echo 1 > /proc/sys/kernel/sysrq
关闭这个功能:
# echo 0 > /proc/sys/kernel/sysrq
sysrq信息:
只要内核没有被完全锁住,不管内核在做什么事情,使用sysrq可以立即打印出内核的信息,当然也包括用户态进程的信息。
如果系统出现挂起的情况或者在诊断一些和内核相关,比较怪异,比较难重现的问题的时候,亦可使用sysrq方式来收集信息。
可以实现自动导出,但是需要先开启该功能。
9DontpanicKernel有三个文件保存在在/data/dontpanic/目录下:
apanic_console:记录内核的控制台信息
apanic_threads:记录的是panic时内核寄存器、调用栈等信息
apanic_sysinfo:记录meminfo、zoneinfo、slabinfo、vmallocinfo等信息。
apanic_sysinfo:
在apanic中打开这些文件并用printk读取到内核log_buf中,然后再利用apanic的写入flash机制将这些信息分别保存到/data/dontpanic/目录下
apanic_sysinfo需要开发手动增加的,而非系统自动生成。
10Mondem logmondem通过QPST工具连接手机打开/err文件,并导出其中的log文件通过QPST获得的高通死机log err文件夹下的内容(适用于7x25/7x27平台)通过QPST可以获得err文件夹下的内容,该目录下的内容是ARM9在死机的时候记录在ARM9侧的LOG记录,通过该目录可以简单的判断一下ARM9侧的死机情况。只能手动导出

三、参考数据

NO手机延时(ms执行时间(ms)执行时间(minute注入事件数事件执行频率:个/分钟Monkey停止原因
1HTC无延时11480651917205899at com.htc.album.DisplayManager.onMenuItemSelected
215515282619401750android.app.ActivityThread.performLaunchActivity
310028591714937894at com.android.htcdialer.BaseSmartSearchList.onKeyDown
426794784537625843at android.app.ActivityThread.performLaunchActivity
555335998229892java.lang.RuntimeException
at android.app.ActivityThread.performResumeActivity
67254231210348856java.lang.NullPointerException
at com.htc.android.worldclock.DeskClock.dispatchKeyEvent
714809352518897766java.lang.NullPointerException
at com.google.android.street.StreetView.setPanoramaConfig
810682661812814720ANR in com.htc.launcher (com.htc.launcher/.Launcher)
925753714334454803java.lang.RuntimeException: Unable to resume activity
at android.app.ActivityThread.performResumeActivity
10589575108492864android.view.WindowManager$BadTokenException: Unable to add window
at android.view.ViewRoot.setView
1Nexus无延时61098610189061857java.lang.IllegalStateException: Calling RS with no Context active.
258584710168621727ANR in com.google.android.voicesearch
3238446240717571806ANR in com.google.android.apps.maps:driveabout 
475105113180851445ANR in com.google.android.apps.maps:driveabout 
5118013820318441619OutOfMemory
6100448717254981523java.lang.IllegalArgumentException
at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface
7131602222323901477ANR in com.google.android.apps.maps
8222782537636411714java.lang.IllegalArgumentException
at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface
9129126422364561694ANR in com.google.android.apps.maps 
10120091920351251755ANR in com.google.earth (com.google.earth/.EarthActivity)
1C8800(大内存)无延时21924742958809ANR in com.android.camera 
272382112481035java.lang.RuntimeException: lock failed
at android.hardware.Camera.lock(Native Method)
1U8800无延时24150243800944java.lang.NullPointerException
at com.erdo.unicom.GameMIDlet$10.onClick
2486920886461065java.lang.RuntimeException: An error occured while executing doInBackground
at android.os.AsyncTask$3.done
311832622019594994SocketTimeoutException
at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
4158476350051895android.view.WindowManager$BadTokenException
at android.view.ViewRoot.setView
513316722097945java.lang.RuntimeException: Unable to resume activity
at android.app.ActivityThread.performResumeActivity
6428677782271151java.lang.NullPointerException
at com.erdo.unicom.WelcomeForm.onKeyUp
7371265669911130java.lang.RuntimeException: Unable to pause activity {com.android.contacts/com.android.contacts.commonext.GroupGridActivity}
at android.app.ActivityThread.performPauseActivity
852676398633983java.lang.NullPointerException
at com.huawei.inputmethod.hwpal.PinyinIME.showCandidateWindow
9591910108633875android.view.WindowManager$BadTokenException
10270742575611676java.lang.NullPointerException
at com.erdo.unicom.WelcomeForm.onKeyUp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149616.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Next.js 入门笔记

前言 之前初步体验了 React 的魅力, 又看文档理解了一下 useState 和 useEffect, 目前初步理解的概念是: useState 用来声明在组件中使用并且需要修改的变量 useEffect 用来对 useState 声明的变量进行初始化赋值 可能理解的不太准确, 不过大概差不多是这么个意思. 但是再往后…

React项目部署 - Nginx配置

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

012-第二代硬件选型

第二代硬件选型 文章目录 第二代硬件选型项目介绍重新换平台缘由X86 && Arm 架构切换 ARM Linux 硬件选型系统确定Qt 版本确定总结一下 关键字&#xff1a; Qt、 Qml、 Arm、 X86、 linux 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QM…

国庆day2---select实现服务器并发

select.c&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)#define IP "192.168.1.3" #define PORT 8888int main(int argc, const char *argv[]) {//创建报式套接字socketi…

华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome

华为云云耀云服务器L实例评测&#xff5c;部署个人音乐流媒体服务器 navidrome 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 产品优势1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 navidrome3.1 navidrome 介绍3.…

区别对比表:阿里云轻量服务器和云服务器ECS对照表

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网分享ECS和轻量应用服务器区别对照表&#xff1a; 目录 轻量应用服务器和云服务器ECS区别对照表 轻…

字符串函数的模拟实现

引言&#xff1a;对于字符串来说&#xff0c;我们通常想要对其完成各种各样的目的&#xff0c;不管是排序还是查找都是最普遍的功能&#xff0c;而我们的C语言中也包含着一系列函数是为了实现对字符串的一些功能&#xff0c;今天我们就来介绍他们。 strlen函数&#xff1a; 求字…

网课搜题 小猿题库多接口微信小程序源码 自带流量主

多接口小猿题库等综合网课搜题微信小程序源码带流量主&#xff0c;网课搜题小程序, 可以开通流量主赚钱 搭建教程1, 微信公众平台注册自己的小程序2, 下载微信开发者工具和小程序的源码3, 上传代码到自己的小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_…

计算机网络笔记3 数据链路层

计算机网络系列笔记目录&#x1f447; 计算机网络笔记6 应用层计算机网络笔记5 运输层计算机网络笔记4 网络层计算机网络笔记3 数据链路层计算机网络笔记2 物理层计算机网络笔记1 概述 文章前言 &#x1f497; 站在巨人的肩膀上&#xff0c;让知识的获得更加容易&#xff01…

Python爬虫——爬虫基础模块和类库(附实践项目)

一、简单介绍 Python爬虫是使用Python编程语言开发的一种自动化程序&#xff0c;用于从互联网上获取信息。通过模拟浏览器的行为&#xff0c;爬虫可以访问网页、解析网页内容&#xff0c;并提取所需的数据。 python的爬虫大致可以分为通用爬虫和专用爬虫&#xff1a; 通用爬虫…

Linux 基本语句_5_创建静态库|动态库

静态库 创建主函数&#xff1a;main.c 应用函数&#xff1a;add.c、sub.c、mul.c 创建calc.h文件作为头文件 生成可执行文件*.o文件 gcc -c add.c -o add.o ....包装*.o文件为静态库 ar -rc libmymath.a add.o sub.o mul.o编译静态库并指明创建静态库的位置 sudo gcc mai…

Python操作MongoDb创建文档及CRUD基本操作

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 MongoDB 操作手册----文档…

git提交代码实际操作

1.仓库的代码 2.克隆代码下存在的分支 git clobe https://gitee.com/sadsadasad/big-event-11.git 3.查看当下存在的分支 git branch -a 在很多情况下,我们是要围绕着dev分支进行开发,所以我们可以在开发之前问明白围绕那个分支进行开发。 4.直接拉去dev分支代码 5.如果没在…

程序三高的方法

程序三高的方法 目录概述需求&#xff1a; 设计思路实现思路分析1.1&#xff09;高并发 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,c…

安卓教材学习

文章目录 教材学习第一行代码 Android 第3版环境配置gradle配置下载包出现问题 教材学习 摘要&#xff1a;选了几本教材《第一行代码 Android 第3版》&#xff0c;记录一下跑案例遇到的问题&#xff0c;和总结一些内容。 第一行代码 Android 第3版 环境配置 gradle配置 gradl…

人机关系不是物理关系也不是数理关系

人机关系是一种复杂的社会技术系统&#xff0c;涉及到人类和机器、环境之间的相互作用和影响。它不仅限于物理接触和数理规律&#xff0c;同时还包括了思维、情感、意愿等方面的交流和互动。在人机关系中&#xff0c;人类作为使用者和机器作为工具&#xff08;将来可能会上升到…

【网站】让自己的个人主页能被Google检索

参考&#xff1a; https://zhuanlan.zhihu.com/p/129022264

JUC第十五讲:JUC集合-ConcurrentHashMap详解(面试的重点)

JUC第十五讲&#xff1a;JUC集合-ConcurrentHashMap详解 本文是JUC第十五讲&#xff1a;JUC集合-ConcurrentHashMap详解。JDK1.7之前的ConcurrentHashMap使用分段锁机制实现&#xff0c;JDK1.8则使用数组链表红黑树数据结构和CAS原子操作实现ConcurrentHashMap&#xff1b;本文…

1.3.OpenCV技能树--第一单元--图像的基础操作(基础篇)

文章目录 1.文章内容来源2.图像的基本操作2.1.图像加载2.2.图像显示2.3.数据读取2.4.截取图像2.5.颜色通道提取2.5.1.保留红色处理2.5.2.保留绿色处理2.5.3.保留蓝色处理 3.易错点总结与反思 1.文章内容来源 1.题目来源: 2.资料来源:https://edu.csdn.net/skill/opencv/opencv…

C++笔记之信号量、互斥量与PV操作

C笔记之信号量、互斥量与PV操作 文章目录 C笔记之信号量、互斥量与PV操作1.信号量概念2.信号量例程一3.信号量例程二4.信号量例程三5.互斥量6.PV操作概念7.PV操作详解——抄自&#xff1a;https://mp.weixin.qq.com/s/vvjhbzsWQNRkU7-b_dURlQ8.PV操作的英文全称 1.信号量概念 …