自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本
作为测试,在测试工作中一定会经常抓log,有时log收集时间很长,导致log很大,可能达到几G,想找到能打开如此大的log文件的工具都会变得困难;即使log不大时,我们可以直接把log发给开发同学去分析定位问题,这样对我们测试人员来说最“省事”,但同时也不能很好的体现出测试人员的价值,那有没有更好的办法来提升测试人员的产出呢?是不是可以通过自动化的形式来完成对log中的各种问题的定位呢?
针对以上需求,我写了一个Python脚本,脚本能完成的工作:
1.统计出log中Anr,Crash,Singnal等出现的次数,并以txt文本的形式输出
2.在log中定位出现Anr,Crash,Singnal的行数,并截取问题出现行数上下3000行的数据,再以txt文本的形式输出(为什么是取上下3000行的数据?开发同学说一般定位问题时看问题出现的坐在行和下一行,如果不能准确定位问题,就需要查看log中上下7秒所打印出的内容)
脚本的使用方法:
1.运行脚本
2.待提示“将Log文件拖入窗口,并点击回车”,完成提示的操作
3.等待脚本执行完成(可能是漫长的等待)。。。
4.生成两个txt文件:log1、log2
5.log1中统计各类问题出现的次数,log2中截取上下3000行的数据
脚本:
# -*- coding: cp936 -*- #为了在窗口中显示中文
# -*- coding: utf8 -*- #Author:
#Data:2018-1-17 import os
import string log_and_file_Path = ''
log_path = ''
key_words = ['ANR in', 'FATAL EXCEPTION', 'signal 6', 'signal 7', 'signal 11', ': Fatal', 'OutOfMemoryError']
anr_num = 0
singnal6_num = 0
singnal7_num = 0
singnal11_num = 0
exception_num = 0
other_fatal_num = 0
oom_num = 0
key_list = []
lines = 0 #遍历log,记录需提取的行号,记录各项次数
def Process():
global anr_num, singnal6_num, singnal7_num, singnal11_num, exception_num, other_fatal_num, lines
f = open(log_and_file_Path)
i = 0
for line in f:
i += 1
if string.find(line, key_words[0]) != -1:
anr_num = anr_num + 1
key_list.append(i)
print '发现 ANR 行号:%s / %s' % (i, line)
elif string.find(line, key_words[1]) != -1:
exception_num = exception_num + 1
key_list.append(i)
print '发现 EXCEPTION 行号:%s / %s' % (i, line)
elif string.find(line, key_words[2]) != -1:
singnal6_num = singnal6_num + 1
key_list.append(i)
print '发现 signal 6 行号:%s / %s' % (i, line)
elif string.find(line, key_words[3]) != -1:
singnal7_num = singnal7_num + 1
key_list.append(i)
print '发现 signal 7 行号:%s / %s' % (i, line)
elif string.find(line, key_words[4]) != -1:
singnal11_num = singnal11_num + 1
key_list.append(i)
print '发现 signal 11 行号:%s / %s' % (i, line)
elif string.find(line, key_words[5]) != -1:
other_fatal_num = other_fatal_num + 1
key_list.append(i)
print '发现 其它类型FATAL 行号:%s / %s' % (i, line)
elif string.find(line, key_words[6]) != -1:
other_fatal_num = other_fatal_num + 1
key_list.append(i)
print '发现 OOM问题 行号:%s / %s' % (i, line) else:
continue
f.close()
lines = i def SetLogAndFilePath():
global log_and_file_Path
log_and_file_Path = raw_input('将Log文件拖入窗口,并点击回车\n\n')
log_and_file_Path = log_and_file_Path.replace('\\','\\\\') def SetLogPath():
global log_path
log_path = log_and_file_Path.replace(log_and_file_Path.split('\\\\')[-1], '') def SaveLog1(fileName):
global log_path
f = open(log_path+fileName, 'wb')
log_str = 'anr = %s \nsingnal 6 = %s\nsingnal 7 = %s \nsingnal 11 = %s \nexception = %s \nother fatal = %s \noom = %s' % (anr_num, singnal6_num, singnal7_num, singnal11_num, exception_num, other_fatal_num, oom_num)
f.writelines(log_str)
f.close() def SaveLog2(fileName, checklines):
global log_and_file_Path, log_path
d = open(log_path + fileName, 'wb')
d.writelines('')
for num in key_list:
print '*'*50
d.write('\n'+'*'*50+'\n'+'*'*50+'\n\n\n')
if num >= checklines:
min_num = num - checklines
else:
min_num = 0
if num + checklines <= lines:
max_num = num + checklines
else:
max_num = lines
i2 = 0
f = open(log_and_file_Path)
for line in f:
i2 += 1
if i2 >= min_num and i2 <= max_num:
new_context = line+'\n'
d.write(new_context)
print 'Save %s' % line
else:
continue
f.close()
d.close() if __name__ == '__main__':
SetLogAndFilePath()
SetLogPath()
Process()
SaveLog1('log1.txt')
SaveLog2('log2.txt', 3000)
脚本说明:
1.可以在第12行的list中定义要查找问题的关键字
2.目前只在windows环境中跑通
自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本的更多相关文章
- 自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本 (转载)
自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本 转自:https://www.cnblogs.com/ailiailan/p/8304989.html 作为测试, ...
- 脚本自动统计安卓log中Anr、Crash等出现的数量(Python)
作为测试,在测试工作中一定会经常抓log,有时log收集时间很长,导致log很大,可能达到几G,想找到能打开如此大的log文件的工具都会变得困难:即使log不大时,我们可以直接把log发给开发同学去分 ...
- 统计mysql数据库中数据表/字段等数量的sql
1.查询一个表中有多少个字段: SELECT COUNT(*) FROM information_schema. COLUMNSWHERE table_schema = '数据库名'AND table ...
- 统计MSSQL数据库中所有表记录的数量
SELECT a.name as '表名', b.rows as '记录数' FROM sysobjects AS aINNER JOIN sysindexes AS b ON a.id = b.id ...
- orale 10g和11g中的自动统计任务
orale 10g和11g中的自动统计任务 博客分类: 数据库相关/oracle 1) 先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Or ...
- Oracle 10g和11g中的自动统计任务
1) 先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动 ...
- iOS:项目中疑难Crash问题集锦
项目中疑难Crash问题集锦 iOS App运行中遇到Crash的情况相信大家都遇到过,开发和者测试中遇到了可能很方便的办法就是直接拿着设备连接一下,然后使用Xcode自带的工具就可以解析出Crash ...
- PowerShell脚本自动设置安卓手机wifi代理
在实际测试工作中,经常要将安卓手机通过wifi代理的形式连接到本机的fiddler或charles服务器代理进行抓包测试.最近一直在想,有没有什么方法可以自动设置安卓手机的wifi代理,曾经想通过修改 ...
- Oracle的自动统计信息不收集直方图的信息
Oracle的自动统计信息不收集直方图的信息 在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10 ...
随机推荐
- 《HelloGitHub》第 22 期
公告 年前最后一期,下次就是年后了,老时间 每月的 28 号,年后见- <HelloGitHub>第 22 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 G ...
- 一篇文章帮你解决python的包管理
写python代码的人都知道,一个项目写下下来,不可避免的都需要使用很多第三方包,通常我们都是通过pip install ,然而当我们需要上线的时候问题来了,如果中间你自己不记得自己安装了多少个包,这 ...
- Java之IO流学习总结【下】
2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...
- nginx中支持.htaccess并禁止php在特定目录无法运行
在nginx.conf中的server里面 include /yjdata/www/thinkphp/.htaccess; 在对应的目录下面创建.htaccess,并填写以下内容,(image是跟目下 ...
- scrapy_图片下载
需要安装第三方库: 安装 pillow库 pip install -i https://pypi.doubanio.com/simple pillow 如何对图片进行自动下载? 首先明白,图片去哪下? ...
- Linux指令--mkdir
本篇博客参照http://www.cnblogs.com/peida/archive/2012/10/25/2738271.html. linux mkdir 命令用来创建指定的名称的目录,要求创建目 ...
- KVM详情
KVM介绍 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器 ...
- Delphi json解析相关
身为一个资深的Delphi 开发者, 最近在做一个小工具的时候,开始捡起来pascal语言. 主要是开发一个内部用的小工具, 主要功能: 1.解析json格式 2.格式化json文件 3.校验json ...
- java之过滤器Filter (应用场景)
filter在开发中的常见应用: * 1.filter可以目标资源执行之前,进行权限检查,检查用户有无权限,如有权限则放行,如没有,则拒绝访问 * 2.filter可以放行之前,对re ...
- vue打包后不使用服务器直接访问方法
根据官网打包执行npm run build 后dist文件夹打开的index.html 是空白 需要开启http服务器才能访问,以下是解决办法 1.找到config文件夹下的index文件 修改成 2 ...