ztwo

Android持续集成-日志管理

August 29, 2016 |

持续集成中最后一环,测试结果与测试报告的输出,分两篇博客分别来说明额机制运行的机制。
代码已经从持续集成中剥离,丰富了一些逻辑,可独立运行。目前功能测试的时候也会开启此脚本进行记录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()

输出效果: 2016082993715屏幕快照 2016-08-29 下午8.23.05.png

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内

输出结果:

2016082965851QQ20160829-0@2x.png

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

结语:实现log清晰展示,自动保存与清洗。