这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崩溃和无响应手足无措?的更多相关文章

  1. android app崩溃日志收集以及上传

    源代码获取请到github:https://github.com/DrJia/AndroidLogCollector 已经做成sdk的形式,源代码已公开,源代码看不懂的请自行google. 假设想定制 ...

  2. monkey测试===如何获取android app的Activity

    方法一(推荐): 手机连接adb,手机界面在需要取得activity的界面. 推荐使用该命令: adb shell dumpsys activity top | findstr ACTIVITY 获取 ...

  3. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  4. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  5. App崩溃监控

    常见马虎导致崩溃 1 数组越界: 2 多线程问题,在子线程刷新UI: 3 主线程无响应,主线程超过系统规定的时间没有响应,就会被watchdog杀掉: 4 野指针: 崩溃信息的收集却并没有那么简单.因 ...

  6. IE8浏览器总是无响应或卡死崩溃怎么办

    IE8浏览器总是无响应或卡死崩溃怎么办 2016-05-11 11:22:31 来源:百度经验 作者:qq675495787 编辑:Jimmy51 我要投稿 IE在打开某些网页的时候经常崩溃或无响应, ...

  7. Android APP压力测试(三)之Monkey日志自动分析脚本

    Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...

  8. Android APP压力测试(一)之Monkey工具介绍

    Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...

  9. Android app主线程UI更新间歇性崩溃的问题

    对App进行开发测试时,偶尔出现app崩溃的问题.日志如下: 10-25 18:44:52.935 15290-15290/com.zzq.cnblogs E/AndroidRuntime﹕ FATA ...

随机推荐

  1. [JavaWeb基础] 021.Action中result的各种转发类型

    在struts2中, struts.xml中result的类型有多种,它们类似于struts1中的forward,常用的类型有dispatcher(默认值).redirect.redirectActi ...

  2. HttpSession之简易购物车

    创建一个简单的购物车模型,由三个 jsp 和两个 Servlet 组成: step1.jsp <%@ page language="java" contentType=&qu ...

  3. Java实现 LeetCode 793 阶乘函数后K个零 (分析)

    793. 阶乘函数后K个零 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * - * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 ...

  4. Java实现 蓝桥杯VIP 算法训练 与1连通的点的个数(并查集)

    试题 算法训练 与1连通的点的个数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 没有问题描述. 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 ...

  5. Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题)

    524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到.如果答案不止一个,返回长度最长且字典顺序最小的字符 ...

  6. Java实现 蓝桥杯VIP 算法训练 调和数列

    问题描述 输入一个实数x,求最小的n使得,1/2+1/3+1/4+-+1/(n+1)>=x. 输入的实数x保证大于等于0.01,小于等于5.20,并且恰好有两位小数.你的程序要能够处理多组数据, ...

  7. Java实现指定年份月份的日历表

    输入指定的年份与月份,看这个月的日历表 package Xueying_Liu; import java.util.Scanner; public class rilibiao { public st ...

  8. Linux 用户管理命令-useradd

    useradd [选项] 用户名,用来添加用户,实质是创建了几个用户信息的相关文件,选项可以支持手动创建 常见选项 -u UID:手动指定用户的UID -d 家目录 -c 用户说明 -g 组名:指定用 ...

  9. vue使用 video.js动态切换视频源视频源不刷新问题

    网上的垃圾代码太多,最后翻了video.js的官方文档,就这么简单,浪费了我这么久,注:我这里使用的vue //html <video  id="my-player" con ...

  10. java正则匹配 指定内容以外的 内容

    今天,遇到一个需要 匹配出 指定内容以外的 内容的需求. 乍一看,需求貌视很简单啊,直接上 非贪婪模式的 双向零宽断言(有的资料上也叫 预搜索.预查.环视lookaround): 比如,我要匹配 串内 ...