压力测试 Monkey 应用程序无响应ANR Application No Response(转)
压力测试 第一次接触这个概念,客户端做压力测试,没听说过。其实是有的,典型:疯狂的点击屏幕。今天试验了一把,原理:用脚本疯狂去模拟点击事件,如何去模拟点击事件呢,就是好比一个人,随便去点,不一定非得就去点击有反应的控件。
看看打印的log:
m.android.settings/.WirelessSettings } in package com.android.settings
:Sending Pointer ACTION_DOWN x=209.0 y=147.0
:Sending Pointer ACTION_UP x=209.0 y=147.0
:Sending Pointer ACTION_MOVE x=-2.0 y=0.0
// Rejecting start of Intent { act=android.intent.action.MAIN cat=[android.i
ntent.category.HOME] cmp=com.android.launcher/.Launcher } in package com.android //这种非本程序的包,是不去模拟的
.launcher
:Sending Pointer ACTION_DOWN x=219.0 y=29.0 //疯狂模拟各个位置的点击事件
:Sending Pointer ACTION_UP x=219.0 y=29.0
:Sending Pointer ACTION_DOWN x=319.0 y=18.0
:Sending Pointer ACTION_UP x=319.0 y=18.0
:Sending Pointer ACTION_DOWN x=179.0 y=91.0
:Sending Pointer ACTION_UP x=179.0 y=91.0
:Sending Pointer ACTION_DOWN x=212.0 y=176.0
:Sending Pointer ACTION_UP x=212.0 y=176.0
:Sending Pointer ACTION_DOWN x=196.0 y=193.0
:Sending Pointer ACTION_UP x=196.0 y=193.0
:Sending Pointer ACTION_MOVE x=-5.0 y=-2.0
// CRASH: com.acp.main (pid 325)
// Short Msg: Array index out of range: 0
// Long Msg: java.lang.ArrayIndexOutOfBoundsException: Array index out of range://程序出问题了,数组越界了,测试到这,测试就会自动停止了。
0
// Build Label: android:generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-k
eys
// Build Changelist: 35983
// Build Time: 1273161972
// ID:
// Tag: AndroidRuntime
// java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
// at java.util.Vector.elementAt(Vector.java:331)
// at com.acp.main.BuyTg$3.onItemClick(BuyTg.java:142)
// at android.widget.AdapterView.performItemClick(AdapterView.java:284)
// at android.widget.ListView.performItemClick(ListView.java:3285)
// at android.widget.AbsListView.onKeyUp(AbsListView.java:1757)
// at android.widget.ListView.commonKey(ListView.java:2059)
// at android.widget.ListView.onKeyUp(ListView.java:1968)
// at android.view.KeyEvent.dispatch(KeyEvent.java:1061)
// at android.view.View.dispatchKeyEvent(View.java:3683)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:746)
// at android.widget.ListView.dispatchKeyEvent(ListView.java:1943)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:748)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:748)
// at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:748)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyE
vent(PhoneWindow.java:1655)
// at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(Phone
Window.java:1102)
// at android.app.Activity.dispatchKeyEvent(Activity.java:2038)
// at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(
PhoneWindow.java:1631)
// at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2368)
// at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2338)
// at android.view.ViewRoot.handleMessage(ViewRoot.java:1641)
// at android.os.Handler.dispatchMessage(Handler.java:99)
// at android.os.Looper.loop(Looper.java:123)
// at android.app.ActivityThread.main(ActivityThread.java:4363)
// at java.lang.reflect.Method.invokeNative(Method.java:-2)
// at java.lang.reflect.Method.invoke(Method.java:521)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.ja
va:860)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
// at dalvik.system.NativeStart.main(NativeStart.java:-2)
** Monkey aborted due to error.
Events injected: 571
:Dropped: keys=0 pointers=15 trackballs=0 flips=0
## Network stats: elapsed time=68130ms (68130ms mobile, 0ms wifi, 0ms not connec
ted)
** System appears to have crashed at event 571 of 1500 using seed 0
# monkey -p com.acp.main -v 6000
monkey -p com.acp.main -v 6000
:Monkey: seed=0 count=6000
:AllowPackage: com.acp.main
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 15.0%
// 3: 25.0%
// 4: 15.0%
// 5: 2.0%
// 6: 2.0%
// 7: 1.0%
// 8: 15.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10000000;component=com.acp.main/.BootUI;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.acp.main/.BootUI } in package com.acp.main
:Sending Pointer ACTION_MOVE x=-4.0 y=2.0
// Allowing start of Intent { cmp=com.acp.main/.DesktopUI } in package com.a
cp.main //本程序内的跳转是允许的
// activityResuming(com.acp.main)
:Sending Pointer ACTION_UP x=0.0 y=0.0
// Allowing start of Intent { cmp=com.acp.main/.LoginUI } in package com.acp
.main
// activityResuming(com.acp.main)
如何使用Monkey:
1、第一步,cmd 进入“ adb shell”,进入avd 的根目录后,“ls ”看到了一个data的目录,里面就是我们要安装程序的
2、第二步,找到所有安装应用程序的包,其中里面就有你要测试的包的名称
3、当然你如果熟悉了Monkey的话,直接“adb -d shell monkey -p your.package.name -v 6000”也是可以的。
命令:adb shell
#ls
ls
cd /data/data
ls
adb -d shell monkey -p your.package.name -v 6000
参考文章:http://www.cnblogs.com/renjie/archive/2011/05/22/2053183.html
http://blog.csdn.net/li_guotao/archive/2011/03/03/6219729.aspx
在这过程中,可能会出现adb 命令不能用的情况
解决问题如下:
很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么呢? 其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为force close一个为wait。
可能触发ANR的情况
1. 长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞。
2. 执行耗时的运算,Android默认为超过5000ms即5秒开始弹出ANR窗口,某些应用可能首次执行时没有缓存十分耗时,可以通过Splash播放闪屏Logo等方式来延缓加载
3. Service和appWidget中也要注意多线程的使用,除非它和Activity工作在不同的进程。
避免ANR的方法
1. 单独开工作者线程,通过独立的Thread或使用类似AsyncTask的方式来处理耗时的内容。
2. 耗时的操作尽量分段处理,使用类似状态机的方法,类似Symbian的活动对象将一个复杂的事情,分段执行。
3. UI线程中不要处理过多的内容,比如将一个5MB的文本,让TextView去setText,要知道这种UI操作,没有什么好方法去解决的,所以Android123提示,遇到UI中需要执行复杂的操作,可以参考上面2提到的分段处理方式。
转载于:https://www.cnblogs.com/royi123/archive/2013/06/02/3114157.html
压力测试 Monkey 应用程序无响应ANR Application No Response(转)相关推荐
- Android Training - 避免程序无响应ANR
可能你写的代码在性能测试上表现良好,但是你的应用仍然有时候会反应迟缓(sluggish),停顿(hang)或者长时间卡死(frezze),或者应用处理输入的数据花费时间过长.对于你的应用来说最槽糕的事 ...
- Android App压力测试(Monkey和ADB)
压力测试简介 压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分.压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试.通常 ...
- Android笔记 ANR Application Not Response
ANR: Application Not Response 应用程序无响应 ANR产生原因:主线程要做很多事,如响应点击事件,更新UI.如果在主线程阻塞过久的时间,则发生ANR.单位时间内主线程(UI ...
- 鸿蒙系统测试失败,ANR-WatchDog-ohos: 一个简单的监测程序,可检测到鸿蒙系统的 ANR(Application Not Response-应用程序无响应)错误并引发有意义的异常...
ANR-WatchDog-ohos 一个简单的监测程序,可检测到鸿蒙系统的 ANR(Application Not Response-应用程序无响应)错误并引发有意义的异常 项目名称:ANR-Watc ...
- C# OpenFileDialog.ShowDialog 打不开,程序无响应(错误的解决)
1:C# OpenFileDialog.ShowDialog 打不开,程序无响应 环境:win7 .Net framework2.0 现象; c#写的一个程序,在xp下点击文件打开按钮没有任何问题,但 ...
- 您没有权限来打开应用程序_苹果建议:除非应用程序无响应,否则不要滑动强制退出...
紫金财经2月26日消息 今日,苹果公司发布的一条建议,成为了微博热搜的话题.苹果建议除非应用程序无响应,否则不要滑动强制退出. 苹果公司表示,滑动关闭iPhone的应用程序可能会缩短电池寿命,并使设备 ...
- Doom流量回放工具导致的测试环境服务接口无响应的排查过程
Doom流量回放工具导致的测试环境服务接口无响应的排查过程 现象描述: a)部分接口(A组接口)无响应 b)部分接口(B组接口)正常响应 c)还有一部分接口(C组接口),场景1无响应,场景2正常响应 ...
- chm打开秒退_Mac_Mac电脑程序无响应怎么办?Mac程序无响应解决方法,虽然Mac电脑一向以运行稳定、 - phpStudy...
Mac电脑程序无响应怎么办?Mac程序无响应解决方法 虽然Mac电脑一向以运行稳定.流畅而著称,但Mac电脑运行时间长了,难免也会遇到程序卡死无响应.一直"转菊花"的情况,可能是由 ...
- 简单有效的解决打开Xcode一直loading并显示程序无响应问题
简单有效的解决打开Xcode一直loading并显示程序无响应问题 项目场景: 问题描述: 原因分析: 解决方案: 项目场景: 打开一个旧的项目文件的 main.storyboard 时候Xcode崩 ...
- android服务器压力测试,Android压力测试Monkey工具
最近在Android程序测试过程中接触到了自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner其它test t ...
最新文章
- 使用Python判断俩张图像相同或以某种方式相似
- 按下回车表示确定提交
- 披上AI战衣的中国APP,正在让印度节节败退
- form表单序列化去除空值
- JavaScript 函数定义方式
- Teams中的快捷键让沟通协作更加高效
- Web设计与开发终极资源大全
- nginx关闭favicon.ico日志
- Citrix 桌面云 XenApp_XenDesktop_7.18 部署
- android开发rn插件,RN native module 插件开发
- yolo系列外文翻译_yolov3论文中英对照版
- appium-滑动、拖动操作
- 英语简单句——英语句子的基本结构、句子的成分(谓语、主语)、简单句的考点分析
- ECS架构 Entitas-CSharp学习之路(二)
- [Oracle- MySQL] Oracle通过dblink连接MySQL
- 【面试题】有一个数组,每隔两个数删掉一个数,到末尾又循环到开头继续进行,求最后一个被删除的数的原始下标位置
- 2020年十大办公室装修设计建议!
- NAACL 2022 | 机器翻译SOTA模型的蒸馏
- [转]Android 开源项目分类汇总
- .NET Core使用Cookie做身份验证
热门文章
- vue push 无效_深入浅出Vue响应式原理
- python同步远程文件夹_利用python实现两个文件夹的同步
- 8086cpu学习笔记(1):系统结构
- matlab软件及基础实验第8单元,知到高等数学与MATLAB启蒙第八单元章节测试答案...
- 数字盲打怎么练_数字键盘区的功能及指法技巧
- L1-023 输出GPLT (20 分) — 团体程序设计天梯赛
- 设置电脑右下角显示自己的大名
- 05 基本数据类型+五大数据类型
- 关闭软件的同时,也关闭软件的进程
- dfs序七个经典问题[转]