Android持续集成-日志管理
持续集成中最后一环,测试结果与测试报告的输出,分两篇博客分别来说明额机制运行的机制。
代码已经从持续集成中剥离,丰富了一些逻辑,可独立运行。目前功能测试的时候也会开启此脚本进行记录log,非常方便
日志管理
主要功能:
- 1.日志格式化:不同类型log区分颜色,类似Android tools ddms
- 2.日志自动保存
- 3.自动筛选出日志中的Exception
- 4.支持过滤日志关键字
- 5.支持多设备
- 6.支持win,mac,linux
运行方式:
控制台:python logcat.py
- [-c] : clear temporary logcat and save logcat
- [Keyword] : Filtering keywords
环境:
- 移动设备:Android
- 桌面环境:需要配置adb
1.日志格式化
class colour:
def c(self, msg, colour):
try:
from termcolor import colored, cprint
p = lambda x: cprint(x, '%s' % colour)
return p(msg)
except:
print msg
def show_verbose(self, msg):
self.c(msg, 'white')
def show_debug(self, msg):
self.c(msg, 'blue')
def show_info(self, msg):
self.c(msg, 'green')
def show_warn(self, msg):
self.c(msg, 'yellow')
def show_error(self, msg):
self.c(msg, 'red')
def L(num, r):
c = colour()
if ' V/' in r:
c.show_verbose(r)
elif ' D/' in r:
c.show_debug(r)
elif ' I/' in r:
c.show_info(r)
elif ' W/' in r:
c.show_warn(r)
elif ' E/' in r:
c.show_error(r)
elif r == '':
print 'List of devices attached'
num += num + 1 #某些手机会出现两行空字符
if num > 2:
exit()
输出效果:
2.日志自动保存
import time
def GetTime():
return time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))
gtime = GetTime()
class Txt():
def __init__(self, filename):
fileN = '%s/log' % os.path.split(os.path.realpath(sys.argv[0]))[0]
if os.path.exists(fileN) == False:
os.mkdir(fileN)
self.path = '%s/%s' % (fileN, gtime)
if os.path.exists(self.path) == True:
self.f = open('%s/%s.log' % (self.path, filename), 'w')
else:
os.mkdir('%s' % self.path)
self.f = open('%s/%s.log' % (self.path, filename), 'w')
def write(self, text):
self.f.write('%s\n' % text)
3.日志过滤
- 先判断日志行内是否有Exception关键词,在通过log_id获取剩余错误日志,存到log内
输出结果:
4.多设备:获取当前设备列表,手动选择设备列表id
import os
def devicesMain():
devices = []
for device in os.popen('adb devices'):
if 'device' in device and 'devices' not in device:
device = device.split('\t')[0]
devices.append(device)
if len(devices) > 1:
for device in range(0, len(devices)):
print '%s: %s' % (device, devices[device])
num = raw_input('Please enter a device number:')
if len(devices) >= int(num):
log_cat(devices[int(num)])
else:
print 'Please enter the correct number'
elif len(devices) == 1:
print devices
log_cat(devices[0])
else:
print 'No device'
5.日志获取:
def logcat(self):
return self.adb('logcat -v time')
6.其他
* 保存:创建当前日期目录,保存所有log