测试人员遇到Android APP崩溃和无响应手足无措?
这2天,在测APP兼容性时,遇到APP奔溃闪退的情况。将问题反馈给开发后,开发自己调试后,没有复现。由于又是远程,base地不在一块,我总不能把手机寄过去吧,那也太费事了。
所以就想到,提供明确的报错日志,让开发定位问题,岂不是就很方便了,也解决了远程的问题。
那如何抓取到Crash日志呢,我又没开发调试工具,也不可能在短时间内搭建一套开发环境。寻思答案后,最终得到了完美解决,且听细细道来。
了解Crash
我们先来简单了解下Crash:Crash,就是崩溃。anr(Application Not Responding -- 程序无响应)是Crash的一种。程序正常运行中,可能会出现未捕获到的异常,这就会造成崩溃。
常见Crash异常
NullPointerException 空指针
ClassCastException 类型转换异常
IndexOutOfBoundsException 下标越界异常
ActivityNotFoundException Activity 未找到异常
IllegalStateException 非法状态异常
ArrayIndexOutOfBoundsException 数组越界异常
SecurityException 安全异常
NoSuchMethodException 方法未找到异常
SQLException 操作数据库异常
抓取奔溃和无响应日志
对于开发人员来说,抓取日志是很方便的,但对于测试人员来说,就不是太方便了。大多都是直接dos窗口下执行adb命令来抓取日志,而每次都敲命令也是很麻烦。
所以通过adb程序与bat命令组合使用来抓取日志,就要方便很多了,短短几秒钟,可以轻松搞定日志的抓取,期不期待。
环境准备
安装JDK和ADB,这个安装很简单,可参见以前的博文,基于Python的Appium环境搭建合集。
bat文件制作
环境准备好后,就来写bat文件了。
捕获Crash异常的bat文件命令
命令参考如下,制作成logcat.bat文件,logcat.bat文件可以放置任意位置。注意:如果adb没有配置到环境变量中,则需要将logcat.bat文件放到adb对应文件夹中。
@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" SET timeStamp=%dt:~,%-%dt:~,%-%dt:~,%_%dt:~,%-%dt:~,%-%dt:~,%
SET mutID=_mut @ECHO ON
adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log" pause
上述命令实现原理:该工具的原理是bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地。
当手机需要重现Crash、或者某一段时间内已经发生过Crash,点击我们制作的bat文件,logcat文件中的命令会将手机的logcat日志拉下来并实时记录,直到你关闭cmd窗口。
然后在拉下来的txt中寻找FATAL关键字,附近上下文即为Crash日志。
捕获ANR异常的bat文件命令
anr:全称为Application Not Responding,意思为程序无响应。
命令参考如下,制作成anr.bat文件,anr.bat文件可以放置任意位置。注意:如果adb没有配置到环境变量中,则需要将anr.bat文件放到adb对应文件夹中。
@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
SET timeStamp=%dt:~,%-%dt:~,%-%dt:~,%_%dt:~,%-%dt:~,%-%dt:~,%
SET mutID=_mut
@ECHO ON
adb pull data/anr/traces.txt traces_%timeStamp%.txt
实现原理与捕获Crash异常是一样的,只是该命令是针对发生anr的情况。
具体实践
捕获Crash异常具体用法:
①将android手机连接电脑,开启开发者模式并允许usb调试;
②运行logcat.bat文件
③如果手机程序已经发生过crash,10秒后关闭cmd窗口;如果是想重现crash,则在手机端重现后即可关闭cmd窗口;
④在logcat.bat的同级目录下会生成一份log文件,从文件中搜查FATAL关键字,便可找到崩溃代码。

查看报错日志,报错如下所示:

如上所示截图,就是测试过程中,发生奔溃的日志了,将日志贴在bug里,既方便开发排查问题,又节约协作时间。
使用优点
使用bat文件捕获日志,有如下几个有点:手机无需root;无需开发环境支持;方便保存、查找日志;操作简单。
以上就是捕获报错日志的操作步骤了,希望对有需要的博友有所帮助。
测试人员遇到Android APP崩溃和无响应手足无措?的更多相关文章
- android app崩溃日志收集以及上传
源代码获取请到github:https://github.com/DrJia/AndroidLogCollector 已经做成sdk的形式,源代码已公开,源代码看不懂的请自行google. 假设想定制 ...
- monkey测试===如何获取android app的Activity
方法一(推荐): 手机连接adb,手机界面在需要取得activity的界面. 推荐使用该命令: adb shell dumpsys activity top | findstr ACTIVITY 获取 ...
- Android APP 性能优化的一些思考
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
- Android app 性能优化的思考--性能卡顿不好的原因在哪?
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
- App崩溃监控
常见马虎导致崩溃 1 数组越界: 2 多线程问题,在子线程刷新UI: 3 主线程无响应,主线程超过系统规定的时间没有响应,就会被watchdog杀掉: 4 野指针: 崩溃信息的收集却并没有那么简单.因 ...
- IE8浏览器总是无响应或卡死崩溃怎么办
IE8浏览器总是无响应或卡死崩溃怎么办 2016-05-11 11:22:31 来源:百度经验 作者:qq675495787 编辑:Jimmy51 我要投稿 IE在打开某些网页的时候经常崩溃或无响应, ...
- Android APP压力测试(三)之Monkey日志自动分析脚本
Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
- Android app主线程UI更新间歇性崩溃的问题
对App进行开发测试时,偶尔出现app崩溃的问题.日志如下: 10-25 18:44:52.935 15290-15290/com.zzq.cnblogs E/AndroidRuntime﹕ FATA ...
随机推荐
- python中几个双下划线用法的含义
_ _ init() _ _(self[,...]) 我们有时在类定义写__init()__方法,但是有时又没有.__init()__方法相当于其他面向对象的编程语言中的构造方法,也就是类在实例化成对 ...
- c# 优化代码的一些规则——使用is或as和强制类型转换的区别[三]
前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student stude ...
- 读Pyqt4教程,带你入门Pyqt4 _013
你是否曾经看着应用程序并思考特定的GUI项是如何产生的?大概每位程序员都这样过.然后你能看到你喜欢的GUI库提供的一系列窗口组件,但是你无法找到它.工具包通常仅仅提供最常用的窗口组件,比如按钮.文本组 ...
- [站点推荐]001.学习新技能的37个最佳网站(The 37 Best Websites To Learn Something New)
忘了过于褒奖的学校.整天呆在拥挤的教室而效果却差得可怜.这些网站和应用涵盖了科学.艺术和技术的无数话题.它们可以教会你实践练习任何技能,从制作豆 沙到用 node.js 开发 app,而且它们都是免费 ...
- Android 中加载本地Html 跨域问题,http协议允许加载
一.需求: 后台加载HTML的包时间太长,太卡,让把所有的HTML包放到前台:使用的是file://协议,有些内容和样式加载不出来,H5那边说需要用http://协议来加载: 二.处理过程: 安卓最简 ...
- 个人工具,编辑器visual studio code
个人收集的使用方法:简化版 主要基于基础web前端开发,visual studio code教程——基础使用.扩展插件安装使用 下载地址: https://visualstudio.microsoft ...
- DM7的聚簇索引和非聚簇索引(cluster属性)
早期的DM7或者DM8在创建带有主键的表时,默认会加上cluster属性:后期版本则全部为默认非cluster属性. 下面为显示的指定cluster属性: 1.创建主键的为聚集索引. create t ...
- vue 使用 elementUI 和 antd 的细微差别
Checkbox a-checkbox 没有value属性,绑定用checked Collapse 使用折叠面板的时候,antd 的层级关系是 .ant-collapse >.ant-colla ...
- 题解 P5329 【[SNOI2019]字符串】
用栈的做法来水一发. 首先我们有一个暴力的做法,枚举每个被删除的字符,然后排序输出,时间复杂度:$ O ( N \times N \times LogN ) $ . 然后我们观察一下数据,发现有一个数 ...
- Java实现 蓝桥杯 算法提高 快速排序
试题 算法提高 快速排序 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 用递归来实现快速排序(quick sort)算法.快速排序算法的基本思路是:假设要对一个数组a进行排序,且a ...