测试人员遇到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 ...
随机推荐
- [ES6系列-03]ES6中关于参数相关特性详解(参数默认值与参数解构赋值与剩余参数)
[原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 今天总结一下 ES6 中跟参数相关的内容. 欢迎补充斧正.留言交流. 让我们互相学习一起进步. 1. ES6 参数默认值( ...
- 读了这一篇,让你少踩 ArrayList 的那些坑
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...
- JAVA自学笔记(1)
JAVA入门级知识储备(一) 1.Scanner的欢乐接收 import java.util.Scanner; public class first { public static void main ...
- GitHub的raw.githubusercontent.com无法链接
今天在用Github下载是总报错,其中错误一开始是DNS的问题 查资料后得知是DNS污染,之后就先找真实的IP地址,添加进C:\Windows\System32\drivers\etc hosts文件 ...
- MySQL 可重复读,差点就我背上了一个 P0 事故!
小黑黑的碎碎念 哎,最近有点忙,备考复习不利,明天还要搬家,好难啊!! 本想着这周鸽了,但是想想还是不行,爬起来,更新一下,周更可不能断.偷懒一下,修改一下之前的一篇历史文章,重新发布一下. P0 事 ...
- Shell 脚本 —— java 代码远程调用shell脚本重启 tomcat
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.创建maven 工程 maven 依赖: <dependency> <grou ...
- Java实现 蓝桥杯 算法训练 My Bad(暴力)
试题 算法训练 My Bad 问题描述 一个逻辑电路将其输入通过不同的门映射到输出,在电路中没有回路.输入和输出是一个逻辑值的有序集合,逻辑值被表示为1和0.我们所考虑的电路由与门(and gate, ...
- Java实现 蓝桥杯 算法训练 大小写转换
算法训练 大小写转换 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小 ...
- Java实现 LeetCode 447 回旋镖的数量
447. 回旋镖的数量 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺 ...
- Java实现 洛谷 P1159 排行榜
输入输出样例 输入 #1 5 HIGHHOPES UP LOWFEELINGS UP UPANDDOWN DOWN IAMSTILLSTANDING DOWN FOOLINGAROUND DOWN 输 ...