首先我们知道使用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  后面有点难,后面再看好了

monkey 进阶使用手册,monkey随机测试后怎么定位问题的更多相关文章

  1. monkey测试===什么是monkey测试(系列一)转

    本文转自:http://www.cnblogs.com/liu-ke/p/4353926.html Monkey工具使用 一. 什么是Monkey Monkey是Android中的一个命令行工具,可以 ...

  2. monkey 测试 adb shell monkey

    adb shell monkey -p com.android.recorder --throttle 360 --ignore-crashes --monitor-native-crashes -- ...

  3. 堪称教科书级别的Android音视频入门进阶学习手册,开源分享!

    概述 随着整个互联网的崛起,数据传递的形式也在不断升级变化,总的流行趋势如下: 纯文本的短信,QQ -> 空间,微博,朋友圈的图片文字结合 -> 微信语音 -> 各大直播软件 -&g ...

  4. (进阶篇)PHP实现用户注册后邮箱验证,激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...

  5. C++之路进阶——codevs4416(FFF的后宫)

    4416 FFF 团卧底的后宫  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 你在某日收到了 FFF 团卧底的求 ...

  6. Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?

    各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...

  7. 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)

    一.Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 import unittest import pytest class TestCase(unittest.T ...

  8. 看php手册2015-03-19版后备注

    类与对象->基本概念:1,#############################::class 自 PHP 5.5 起,关键词 class 也可用于类名的解析.使用 ClassName::c ...

  9. 解决replace格式替换后光标定位问题

    场景:格式化银行卡444格式 手机号344格式 身份证号684格式 校验数据格式,replace后光标定位错乱 或光标一直定位在最后 解决,只针对input,代码用的vue: 获取光标位置: getC ...

随机推荐

  1. js获取当前日期并格式yyy-MM-dd

    //格式化日期:yyyy-MM-dd function formatDate(date) { var myyear = date.getFullYear(); var mymonth = date.g ...

  2. eslint 检查单个文件的错误

    问题: 批量检查时,没有针对性,想针对单个文件进行检查 解决办法:./node_modules/.bin/eslint  your file

  3. CSS中盒子模型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Linux基础(二)之命令

    01-基础命令 1. 创建一个目录 mkdir /data 创建多级目录 mkdir -p /oldboy/data 2. 查看目录里面的内容 ls /data 3. 查看目录里面的详细信息 ls - ...

  5. silverlight开发实例(Prism+MVVM+RIA)(二)--创建shell及用户登录

    在上篇基本说清了本项目的基本框架,下面开始说下项目的加载和shell.开始之前在建立EF时出现了一个问题,我在数据库中建立了视图,而在EF导入视图时出现因无法匹配主键导致无法导入视图的问题,检查发现是 ...

  6. Python标准组件ConfigParser配置文件解析器,保存配置时支持大写字母的方法

    虽然自己已经改用xml作为配置文件首选格式了,但是有时候还是需要解析ini.cfg文件(为了兼容早期版本或者其他作者的软件). 基本上Python自带的ConfigParser足够应对了,但是美中不足 ...

  7. iOS 企业版 打包

    iOS 企业版 打包 使用 iOS 企业版的证书发布应用可以跳过 Appstore,直接发布到自己的网站,让其他人在自己的网站上下载安装,但前提是要用苹果自带的Safari 浏览器才能下载安装,其他浏 ...

  8. Python3命名规范

    1.模块 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) # 正确的模块名 import decoder import html_parser # 不推荐的模 ...

  9. CentOS 安装jdk 1.8

    方法一:手动解压JDK的压缩包,然后设置环境变量   1.在/usr/目录下创建java目录  [root@localhost ~]# mkdir/usr/java [root@localhost ~ ...

  10. Matlab中psf2otf()函数在opencv中的实现

    在Matlab中有个psf2otf()函数,可以将小尺寸的点扩散函数,扩大尺寸,并作二维傅里叶变换,opencv中没有这个函数,所以编了这么个函数: /************************ ...