在Android系统测试中,经常要抓取log,而内置的BugReport功能无异是最方便全面的。那么问题来了,BugReport包含的信息虽多,但分析起来就成了麻烦,当然觉得麻烦的不只我一个,还有space2。这位前辈为此写了一个名为chkbugreport的开源工具,可以直接把对BugReport进行分析,好吧,我的麻烦被别人解决了。同时受同事启发,把chkbugreport工具做了个强化,实现一键分析BugReport ^_^,非常简单,就是把获取BugReport和分析BugReport一起实现,全当拿Python练练手。
前提:
- 已配置java环境
- 下载chkbugreport.jar(下载后请名字改成chkbugreport.jar)
方法:
- 将下面的代码保存到chkbugreport相同目录
- 运行
- # -*- coding: utf-8 -*
import os
from subprocess import Popen, PIPE
def devices():
'''
获取设备信息,根据不同状态给出返回值
1. 未连接设备时,返回值为 0
2. 已连接仅一台设备时,返回值为 1
3. 已连接多台设备时,返回值为 2
'''
resp = Popen(
'adb devices', shell=True, stdout=PIPE, stderr=PIPE).stdout.readlines()
cmd = []
for i in resp:
cmd.append(i.strip('\r\n'))
if cmd[-2] == cmd[0]:
print ('...... Devices not fond ......')
return 0
elif len(cmd) > 3:
print ('...... Fond %s devices ......' %
(len(cmd) - 2))
return 2
else:
print ('...... Device is fond ......')
return 1
def analysis_bugreport():
'''
获取Bugreport,并进行分析
'''
print 'getting bugreport......'
os.system('adb shell bugreport > %s\\bugreport.log' % os.getcwd())
print 'Got it.'
# Bugreport
os.system('java -jar chkbugreport.jar bugreport.log')
print 'Analysis complete.'
if __name__ == '__main__':
if devices() == 1:
analysis_bugreport()
# raw_input('Press Enter key to continue......')
- 国际惯例,感谢space2,还有我的同事郑 虹向我推荐chkbugreport。
其实原博主写了这么多,提取出来就两点东西:
1、adb shell bugreport > bugreport.log 获取系统的bugreport报告
2、将上面生成的报告和下载的chkbugreport.jar放在同一目录,并运行java -jar chkbugreport.jar bugreport.log
将会自动生成相应的html文件