作为测试,在测试工作中一定会经常抓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等出现的数量(Python)的更多相关文章

  1. 自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本 (转载)

    自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本   转自:https://www.cnblogs.com/ailiailan/p/8304989.html 作为测试, ...

  2. 自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本

    作为测试,在测试工作中一定会经常抓log,有时log收集时间很长,导致log很大,可能达到几G,想找到能打开如此大的log文件的工具都会变得困难:即使log不大时,我们可以直接把log发给开发同学去分 ...

  3. 使用python脚本实现统计日志文件中的ip访问次数

    使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...

  4. sql server编写通用脚本自动统计各表数据量心得

    工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...

  5. PowerShell脚本自动设置安卓手机wifi代理

    在实际测试工作中,经常要将安卓手机通过wifi代理的形式连接到本机的fiddler或charles服务器代理进行抓包测试.最近一直在想,有没有什么方法可以自动设置安卓手机的wifi代理,曾经想通过修改 ...

  6. [linux] shell脚本编程-统计日志文件中的设备号发通知邮件

    1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|gr ...

  7. orale 10g和11g中的自动统计任务

    orale 10g和11g中的自动统计任务 博客分类:  数据库相关/oracle   1)  先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Or ...

  8. Oracle 10g和11g中的自动统计任务

    1)  先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动 ...

  9. 自动清理IIS log 日志脚本

    系统环境:windows server 2012 r2 IIS 版本:IIS8 操作实现清理IIS log File 脚本如下: @echo off ::自动清理IIS Log file set lo ...

随机推荐

  1. go语言之数据类型和格式化输出

    1.数据类型 package main import ( "fmt" "reflect" ) func main() { //整形 var v1 int32 v ...

  2. [转]VB.net中 excel 的range方法

    本文转自:https://blog.csdn.net/bigheadsheep/article/details/7711235 第五章 Range对象基本操作应用示例(1)Range对象可能是VBA代 ...

  3. SAP 资产相关日期

    1. Capitalized Date(资本化日期) 可以手工输入资本化日期,或者如果不输入,则通常默认写入First Acquisition Date (资产第一次购置时输入资产价值日). 2.As ...

  4. SAP depreciation key config

    正常折旧 Configure 1.分配总帐科目 spro进入后台配置 –> Financial Accounting(New) –> Asset Accounting –> Depr ...

  5. MySQL基础之常用函数

    数学函数的使用 常用数学函数 函数 作用 函数 作用 ceil() 进一取整 abs() 取绝对值 floor() 舍掉小数部分 power() 幂运算 round() 四舍五入 pi() 圆周率 t ...

  6. Redis主从复制的基本操作

    一,安装: 1.1.将redis压缩包放到 /opt 下. 2.解压 3.进入目录执行  make 4.执行  make  install 5.在 / 下创建redis文件夹mkdir redis 6 ...

  7. Oracle impdp导入数据临时表空间与undo表空间爆满解决实例

    Oracle impdp导入数据临时表空间与undo表空间爆满解决实例 [日期:2018-01-24] 来源:Linux社区  作者:rangle [字体:大 中 小]   针对Oracle数据迁移, ...

  8. pip 查看软件包 可用版本并安装; pip 查看 numpy 可用版本并安装

    最近需要安装 numpy 的旧版本,发现不知道如何查看可以安装旧版本,解决方法在此进行记录: 然后找到你对应的版本进行安装就可以了: 保持更新,更多精彩内容,请关注 cnblogs.com/xuyao ...

  9. 002 C/C++ 数组的传递

    传递一个数组给一个函数的正确做法: 1.传递数组的内存首地址. 2.传递数组的有效长度.指数组的元素数量. 编译器总是将数组类型的变量作为指针传递. 计算数组的长度: int length = siz ...

  10. 201871010101-陈来弟《面向对象程序设计(java)》第一周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...