首先我们知道使用monkey后,我们可以查看三种类型的日志,一种是安卓内核日志,一种是安卓系统自己的日志,还有一种是monkey日志。
当我们使用monkey进行随机测试时,如何才知道我们这次随机测试是否有问题。
 
1.使用命令产生随机事件
adb shell monkey -p vchat.faceme -v  100    简单adb命令,执行100次随机事件并输出简单日志
完整mokey命令:
 adb shell monkey -p vchat.faceme  --throttle 1000 -s 100 -v -v 500000 >C:\Users\admin\Downloads\TESTER\monkey_log\java_monkey_log.txt
 
monkey日志可以导入到text文件中自己查看,同事安卓的内核和系统日志可以在monkey结束后,自己使用adb logcat命令来查看
 
2.查看monkey日志

1.程序无响应,ANR问题:在日志中搜索“ANR”
2.崩溃问题:在日志中搜索“CRASH”

3.其他问题:在日志中搜索”Exception”

搜索了一下,发现无1,2问题,但又一个Exception异常

Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument) 
// Injection Failed

百度后,发现别人这样解释的:monkey发送各种事件操作app,中间有一个io异常,但是并没有堆栈,所以没有任何意义。

如果在这里发现monkey崩溃日志,应该要看monkey当时执行了什么事情,自己手动执行看看是否出现,如果不出现,再次使用相同的seed和相同的页面,再次启动app monkey再来一次随机测试,如果没有出现,证明次问题是偶然性问题。

3.adb logcat查看安卓日志

记得只查看并过滤自己操作的app日志,不过在屏幕上输出并不好找出问题,最好把它输出到text文件再查看

命令如下:

adb logcat  -v time | findstr vchat.faceme >C:\Users\admin\Downloads\TESTER\monkey_log\andriod_log.txt

一样的搜索关键字ANR/CRASH/Exception 查看日志异常

搜索到一个崩溃和一个异常:

08-13 11:09:27.658 D/CrashReport(15779): >>> vchat.faceme.ui.personal.PersonalSettingActivity onResumed <<<

08-12 20:12:20.073 D/Error   ( 4763): ERR: stack=android.util.Log$TerribleFailure: {"ptid":"4763-1*","stack":"java.lang.NumberFormatException: Invalid long: \"gp-500108\"\\n\tat java.lang.Long.invalidLong(Long.java:124)\\n\tat java.lang.Long.parse(Long.java:363)\\n\tat java.lang.Long.parseLong(Long.java:353)\\n\tat java.lang.Long.parseLong(Long.java:321)\\n\tat vchat.common.util.IMDecodeUtil.decodeContactByTargetId(IMDecodeUtil.java:96)\\n\tat vchat.faceme.message.adapter.MessageListAdapter.convert(MessageListAdapter.java:65)\\n\tat vchat.faceme.message.adapter.MessageListAdapter.convert(MessageListAdapter.java:47)\\n\tat com.chad.library.adapter.base.BaseQuickAdapter.onBindViewHolder(BaseQuickAdapter.java:937)\\n\tat com.chad.library.adapter.base.BaseQuickAdapter.onBindViewHolder(BaseQuickAdapter.java:66)\\n\tat androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6890)\\n\tat androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6932)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5852)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6119)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5958)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5954)\\n\tat androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2226)\\n\tat androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)\\n\tat androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)\\n\tat androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)\\n\tat androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3990)\\n\tat androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3402)\\n\tat android.view.View.measure(View.java:18831)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1248)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1593)\\n\tat android.view.View.measure(View.java:18831)\\n\tat vchat.common.widget.MyDrawerLayout.onMeasure(MyDrawerLayout.java:1115)\\n\tat android.view.View.measure(View.java:18831)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1248)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1593)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.FrameLayout.onMeasure(FrameLayout.java:194)\\n\tat androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)\\n\tat android.widget.LinearLayout.measureVertical(LinearLayout.java:748)\\n\tat android.widget.LinearLayout.onMeasure(LinearLayout.java:630)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.FrameLayout.onMeasure(FrameLayout.java:194)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)\\n\tat android.widget.LinearLayout.measureVertical(LinearLayout.java:748)\\n\tat android.widget.LinearLayout.onMeasure(LinearLayout.java:630)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.FrameLayout.onMeasure(FrameLayout.java:194)\\n\tat com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:26

出现了一个崩溃异常,给开发反馈后,开发果然知道是出现了什么问题,然后正在看,对我来说,合适蛮有成就感的哈哈哈

停止monkey的办法:

注意 Monkey启动后会不断地向被测对象发送随机事件流,直到事件执行完毕或者发生异常时才停止。在Monkey运行过程中,即便断开 与PC的连接,Monkey依然可以在手机上继续运行。

停止Monkey的方法是:直接杀掉手机上的Monkey进程。具体方法如下:

adb shell 进入脚本界面

shell界面输入

ps |grep monkey

获取到com.android.commands.monkey的进程ID

kill pid进程号

使用monkey查看app是否有内存泄露:

adb shell monkey -p vchat.faceme --pct-touch 100  --throttle 1000 -s 100 -v -v 50 >C:\Users\admin\Downloads\TESTER\monkey_log\java_monkey_log.txt

adb shell 查看进程内存

dumpsys meminfo  后面有点难,后面再看好了

最新文章

  1. SQL Server群集如何在线检测
  2. NYOJ之题目325 zb的生日
  3. Lind.DDD.Caching分布式数据集缓存介绍
  4. css3 transition
  5. LeetCode之226. Invert Binary Tree
  6. H5的FormData对象完成ajax上传文件multiFile
  7. opencv的学习笔记3
  8. 视觉(3)blepo
  9. svn常用操作命令(不断更新中......)
  10. jquery压缩图片插件
  11. hdu 5036 Explosion(概率期望+bitset)
  12. 【转】unity3d的常用快捷键
  13. 笔记-Nodejs中的核心API之Events
  14. 通过非root用户访问VNC
  15. 【转】安卓Fragment不完全介绍
  16. UNIX网络编程——原始套接字的魔力【续】
  17. 单片机开发——03工欲善其事必先利其器(AD软件安装破解)
  18. linux-shell系列5-统计
  19. ActiveMQ_3Java实现
  20. Eclipse更新maven项目仓库依赖

热门文章

  1. pytest.fixture和普通函数调用
  2. 设置placeholder 颜色
  3. Zabbix - LINUX下CPU,硬盘,流量,内存监控
  4. 简单说 JavaScript实现雪花飘落效果
  5. Ironic 的 Rescue 救援模式实现流程
  6. C基础知识(6):指针--函数指针与回调涵数
  7. JavaScript高程第三版笔记-面向对象编程
  8. MSSQL数据库日志满的快速解决办法
  9. PHP常用的 五种设计模式及应用场景
  10. Spring Bean 管理