面试如何看待行业前景 Monkey 说退出测试行业,却迟迟不退

2053人阅读
Android核心(66)
转载请注明出处!
Monkey的介绍
Monkey是一个命令行工具,可以运行在模拟器里或实际设备中,使用安卓调试桥(adb)来运行它,向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试,可以根据获取的log信息进行修复。
Monkey的基本使用
连接设备:adb devices 查看设备是否连接成功adb shell 进入shell界面设备安装要运行的程序包或apk(或者通过查看data/data下的程序包):adb安装apk:在所安装的apk路径下,使用adb install **.apk执行monkey测试命令:monkey -p your.package.name -v 500
在不知道所安装的apk的包名的时候,采用adb命令查看包名:
adb logcat|grep START打开已安装的apk,查看出现的ActivityManager信息,cmp=name,此name就是打开的apk的包名。
Monkey命令使用
列出简单用法
作用:命令行上的每一个-v都将增加反馈信息的详细级别。
Level0(默认),除了启动、测试完成和最终结果外只提供较少的信息。
Level1,提供了较为详细的测试信息,如逐个发送到Activity的事件信息。
Level2,提供了更多的设置信息,如测试中选中或未选中的Activity信息。
adb shell monkey -v 10
adb shell monkey -v -v 10
adb shell monkey -v -v -v 10
作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件序列。
例: adb shell monkey -s 12345 -v 10
--throttle &milliseconds&
作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。
例: adb shell monkey –throttle 300 -v 10
注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件,所以此处一般设置为300毫秒。
-p &allowed-package-name&
作用:如果你指定一个或多个包,Monkey将只允许访问这些包中的Activity。如果你的应用程序需要访问这些包(如选择联系人)以外的Activity,你需要指定这些包。如果你不指定任何包,Monkey将允许系统启动所有包的Activity。指定多个包,使用多个-p,一个-p后面接一个包名。
例: adb shell monkey -p com.android.browser -v 10
-c &main-category&
作用:如果你指定一个或多个类别,Monkey将只允许系统启动这些指定类别中列出的Activity。如果你不指定任何类别,Monkey将选择谢列类别中列出的Activity,Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多个类别使用多个-c,每个-c指定一个类别。
例: adb shell monkey -p com.paipai.ershou -v 10 -c
--pct-touch &percent&
作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)
例: adb shell monkey –pct-touch 100 -v 10
注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。
--pct-motion &percent&
作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)
例: adb shell monkey –pct-motion 100 -v 10
注:常用参数,需注意的是移动事件是直线滑动,下面的trackball移动包含曲线移动。
--ignore-crashes
作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-timeouts
作用:事件请求超时会影响monkey的测试。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
保存测试日志其实很简单,命令如下:
adb shell monkey -p com.ihongqiqu -v -v -v 500 & monkeytest.txt
Monkey测试信息
在Monkey测试过程中可能会出现程序崩溃(CRASH)和程序无响应的情况(ANR),要将测试的log信息获取到,从而解决bug。
CRASH即崩溃信息,程序在运行中非正常退出。 不设置忽略crashes,在测试过程中出现CRASH,会中断测试,并显示CRASH信息和seed信息
根据seed值来完成bug的复现:adb shell monkey -p com.feicuiedu.monkeytestdemo -s 6 -v 1000
Applicaton Not Responsing.
同样在monkey测试过程中,如果出现ANR现象,会输出相应的信息,以ANR开头,获取到信息进行问题的解决,同样可以通过seed来进行复现。
附:如果在手动测试过程中出现ANR,日志信息出现在手机中:
adb shellcd /data/anr 切换到设备路径下ls 可以看到traces.txt 里面即为log信息
MonkeyScript
MonkeyScript是monkey的脚本语言,是一组可以被Monkey识别的命令集合,可以帮我们完成一系列的被固定的重复性操作,Monkey通过脚本来进行测试,简单快捷、不需要任何工具,只是一个记事本文件,缺点是在坐标、按键等方面没有逻辑性。
脚本格式
#头文件、控制monkey发送消息的参数
type=raw events
#以下为monkey命令
start data &&
DispatchPress (KEYCODE_HOME)
DispatchPress (KEYCODE_MENU)
常用API的介绍,其中keycode参考
LaunchActivity(pkg_name, cl_name): 启动应用的Activity。参数:包名和启动的Activity。
Tap(x, y, tapDuration): 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。
DispatchPress(keyName): 按键。参数: keycode
RotateScreen(rotationDegree, persist): 旋转屏幕。 参数:rotationDegree为旋转角度, e.g. 1代表90度;persist表示旋转之后是否固定,0表示旋转后恢复,非0则表示固定不变。
DispatchFlip(true/false): 打开或者关闭软键盘。
LongPress(): &长按2秒。
PressAndHold(x, y, pressDuration): &模拟长按事件。
DispatchString(input): &输入字符串。
Drag(xStart, yStart, xEnd, yEnd, stepCount): &用于模拟一个拖拽操作。
PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放手势。
UserWait(sleepTime): 休眠一段时间
DeviceWakeUp(): 唤醒屏幕。
PowerLog(power_log_type, test_case_status): 模拟电池电量信息。
WriteLog(): 将电池信息写入sd卡。
RunCmd(cmd): 运行shell命令。
DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags):向指定位置,发送单个手势。
DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags):发送按键消息。
LaunchInstrumentation(test_name,runner_name): 运行一个instrumentation测试用例。
DispatchTrackball: 模拟发送轨迹球事件。
ProfileWait: 等待5秒。
StartCaptureFramerate(): &获取帧率。
EndCaptureFramerate(input): 结束获取帧率。
API方法中控件位置(X,Y轴的坐标)的获取:使用Android提供的工具uiautomatorviewer.bat
在Android SDK路径下--& tools --& uiautomatorviewer.bat,打开就可以展示设备/模拟器上展示的视图,展示视图结构和坐标。
#头文件、控制monkey发送消息的参数
type=raw events
#以下为脚本正文
start data &&
#1.打开浏览器
LaunchActivity(com.android.browser,com.android.browser.BrowserActivity)
ProfileWait()
#2.清空网址
Tap(223,146)
ProfileWait()
DispatchPress(112)
ProfileWait()
#3.输入网址
DispatchString()
ProfileWait()
#4.确认,载入网址
DispatchPress(KEYCODE_ENTER)
ProfileWait()
#5.完成退出浏览器
DispatchPress(KEYCODE_HOME)
ProfileWait()
1.脚本完成后将.txt 文件push到手机中
adb push name.txt path
其中name是指monkey脚本文件的名称,path是要push到手机上的路径
2.运行Monkey脚本
monkey -f path/name.txt -v 500
path是push的路径,name是脚本文件的名称。
随机事件流对MonketTestDemo进行测试:
1. adb devices 查看设备是否连接
2. adb shell 进入shell界面
3. monkey -p com.feicuiedu.monkeytestdemo -v 500 执行monkey命令
4. (可选)monkey -p com.feicuiedu.monkeytestdemo -v 500 & monkeytest.txt 执行monkey命令,并将monkey日志存储
一次随机的自动化Monkey测试完成。
MonkeyScript对MonkeyTestDemo进行测试:
1. 完成monkey.txt脚本的编写,保存到某一路径下
2. 切换到monkey.txt路径下
3. adb push monkey.txt /data/local/temp/(设备的任一路径,无确切规定)
4. adb shell 切换到设备下
5. cd /data/local/temp 切换到monkey.txt路径下
6. monkey -f monkey.txt -v 10 执行monkey脚本及执行次数
一次MonkeyScript的自动化Monkey测试完成。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:30511次
排名:千里之外
原创:54篇
转载:15篇
(5)(3)(12)(14)(35)Monkey日志如何分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Monkey日志如何分析
上传于|0|0|文档简介
&&日志如何分析
你可能喜欢查看: 8079|回复: 5
好像昨天看了一个群里的方法
设置了增大音量的操作,好像是打开了工程模式
现在关机、重启都无法进行
提示:monkey测试中,不能停止
请哪位大神告知解决方法,
请输入验证码:
长按关机键,不行的话只能等没电了
关闭的那个对号,是不能激活的
你们的大神也是这样吗
*#调出来;我不知道怎么搞的测试……
忘记月亮 发表于
长按关机键,不行的话只能等没电了
大神root怎么还没好啊
我的也是这个问题
本帖最后由 超级大神 于
13:41 编辑
今天刚刚打开工程模式调整喇叭音量,不小心也是点击了monkey测试,导致很多软件使用不流畅,关机重启都无法进行,提示:monkey测试中,不能停止。
按2楼的办法按了没管用,百度后在酷友社区发现相同的问题,一个没有登录的大神用户回复,长按关机键8秒就可以重新启动机器恢复正常了,我试验了一下,管用。感谢2楼的朋友,还有酷友社区那位朋友。
移动叔叔. 版权所有,专业的网络售后平台 (
商务合作||||一种可实现业务化定制的monkey测试技术改进 - 推酷
一种可实现业务化定制的monkey测试技术改进
【背景介绍】
稳定性测试是移动端产品专线测试中的重要一项测试,是移动端产品保证稳定性的重要手段,也是移动端产品发版上线的一个重要质量标准。Android系统一般使用系统自带的monkey工具来做稳定性测试。
一、原生monkey工具缺点
原生monkey工具是一种随机UI事件流,用来测试长时间随机操作是否会导致应用出现异常。因为原生monkey操作的随机性,所以在实际使用过程中,原生monkey会暴露出以下一些缺点:
1.1&原生monkey的测试对象是针对整个android系统或者某个应用,但是无法针对应用里的某个模块或者界面。这样在产品迭代过程中存在的一个局限是:每个迭代时做的稳定性测试都重新做一遍,而无法针对该迭代新增的功能模块做单独的稳定性测试(或者叫做增量稳定性测试)。
以百度云这个应用为例,在某个迭代中集成了“百度钱包”这个新模块,使用原生的monkey工具可能出现的现象是大部分操作可能都落在了百度云的其他模块,而没有操作到“百度钱包”这个模块。
所以,我们期望的稳定性测试能够从系统和应用级范围转移到模块或者activity级别的范围。
1.2 原生monkey工具的操作是随机的,这样可能导致一些用户路径操作不到或者操作时间过短;以百度直达号的支付业务为例,所有的支付操作必须是基于百度账号登录的前提下才能进行,这样在支付时就必须经历登录百度账号这个用户路径。那么问题来了,原生monkey因为是随机的,无法输入指定的用户名/密码来登录百度账户。
二、 实现业务化配置
2.1 && 支持特定模块或者Activity
1)&实现思路
一般进入一个模块会有一个固定的入口,而退出这个模块,也会退回到这个固定入口界面。在使用时,每次操作之后都去检查当前的界面是否为该界面,如果是,则去点击这个入口控件,就回到了这个模块,继续测试;这样即可保证稳定性测试一直保持在这个模块中进行。
检测到当前界面为关注的activity时,通过与手机上的ViewServer通信,获取该activiy的控件信息,得到指定的控件的坐标信息;再对这个坐标做一个点击的操作,即回到了指定的模块界面。
2) 使用方法
在执行monkey命令是扩展一个sa参数,参数格式是package/activity/item,通过该参数可指定入口界面元素;同时在扩展一个ea参数,参数格式也是
package/activity/item,通过该参数指定出口界面元素,当碰到出口界面元素时再次主动进入入口界面
2.2 && 配置业务操作及比例
1)实现思路
大家知道,执行monkey命令时需要配置各个事件的比例,而该优化点的思路就是将业务操作写成自动化脚本,然后将该脚本抽象成一个monkey事件,并且可以配置执行比例。
2) 使用方法
在执行monkey命令时扩展一个m参数,参数格式是 脚本路径 --pct-custom 业务比例
例如,测试百度浏览器时定期去打开百度首页:
将脚本browser_test.sh push 到/data/local/tmp/目录下(需要保证browser_test.sh有可执行权限)
monkey命令参数配置 -m /data/local/tmp/browser_test.sh --pct-custom 5
三、 工具使用环境配置
从以上介绍可知,原生monkey测试技术的改进需要扩展monkey命令参数,为了实现这点,需要对android官方自带的monkey.jar包进行源码修改,然后重新编译生成一个新的monkey jar包。下面的介绍是针对新monkey jar生成以后用户的配置步骤,而对于android各平台的monkey jar的下载地址可参考附录。
3.1 根据android平台版本,将对应平台的monkey.jar push到/data/local/tmp/monkey.jar
3.2 生成以下可执行文件/data/local/tmp/monkey
# Script to start &monkey& on the device, which has a very rudimentary
base=/data/local/tmp
export CLASSPATH=$base/monkey.jar
trap && HUP
exec app_process /system/bin mands.monkey.Monkey $*
3.3& & 对data/local/tmp/monkey增加执行权限
3.4 使用该扩展功能的monkey 运行命令类似:
adb -d shell /data/local/tmp/monkey -s 0 -p packagename --throttle 2000 --pct-touch 15 --kill-process-after-error --pct-nav 25 --pct-majornav 15 --pct-appswitch 2 --pct-anyevent 16 --monitor-native-crashes -a package/activity/itemname/[index] -v -v 100
-a&参数即指定需要关注的activity,以及入口控件名称,格式为:
-a package/activity/itemname/[index]
其中,package/activity可通过Hierarchy Viewer来查看,如下图
itemname也可通过Hierarchy Viewer来查看,如下图
index是指这个item名称在这个界面上出现的位置,使用hierarchyviewer从上面开始数从左到右,从上到下。例如,关注的item名称为TextView,需要从hierarchyviewer上看,从左到右,从上到下数所有出现的TextView,找到关注的TextView的index。
Index是一个可选字段,如果不填则默认为0,index用于在同一个activity上有多个相同名称的item时,指定特定的item。
四、使用备注
android出于安全考虑,当系统属性ro.secure=0 且ro.debuggable=1时才允许开启viewServer服务,所以只有满足这个条件的手机才能使用本文所述的-a参数扩展功能。如果需要更改系统属性ro.secure=0 且ro.debuggable=1,可以通过先root手机,再修改boot.img的方法来实现。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 怎样看待保险行业 的文章

 

随机推荐