用json配置log日志参数,形成自定义的log日志风格,用于自动化测试执行完成后输出操作日志以及捕获崩溃日志。
将log定义为全局参数,在需要使用处调取
class LogConfig:
@staticmethod
def init(path):
global logger
if not os.path.exists('./log'):
os.mkdir('./log')
nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename = './log/'+nowTime+'.log',
filemode='a')
logger = logging.getLogger()
@staticmethod
def getLogger():
return logger
日志等级(level) | 描述 |
---|---|
DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
%(asctime)s %(levelname)s %(message)s
输出格式为:日志捕获时间:日志器名称:日志内容
日志器设置的日志格式默认是BASIC_FORMAT,其值为:
%(levelname)s:%(name)s:%(message)s
logger = LogConfig.getLogger()
logger.info('ActionParser: back...')
logger.error('found element fail.')
在测试过程中,应用发生崩溃,测试希望日志输出能够整合crash日志。此功能需要抓去手机的运行情况,因此使用adb命令输出手机运行日志。
def start_log():
cmd = "adb logcat AndroidRuntime:E *:S"
lines = os.popen(cmd).readlines()
if len(lines) > 0:
logger = LogConfig.getLogger()
for line in lines:
if 'E' in line:
string = line.strip('\n').split('):')[-1]
logger.error('crash: ' + string)
def end_log():
os.system('adb kill-server')
– 选项解析:
”-s”选项 : 设置输出日志的标签, 只显示该标签的日志;
”-f”选项 : 将日志输出到文件, 默认输出到标准输出流中, -f 参数执行不成功;
”-r”选项 : 按照每千字节输出日志, 需要 -f 参数, 不过这个命令没有执行成功;
”-n”选项 : 设置日志输出的最大数目, 需要 -r 参数, 这个执行 感觉 跟 adb logcat 效果一样;
”-v”选项 : 设置日志的输出格式, 注意只能设置一项;
”-c”选项 : 清空所有的日志缓存信息;
”-d”选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;
”-t”选项 : 输出最近的几行日志, 输出完退出, 不阻塞;
”-g”选项 : 查看日志缓冲区信息;
”-b”选项 : 加载一个日志缓冲区, 默认是 main, 下面详解;
”-B”选项 : 以二进制形式输出日志;
adb logcat -t 5
输出近5行日志
– 过滤器解析:
过滤项格式: [:priority](标签:日志等级),默认的日志过滤项是 ” *:I ”
V : Verbose (明细);
D : Debug (调试);
I : Info (信息);
W : Warn (警告);
E : Error (错误);
F: Fatal (严重错误);
S : Silent(Super all output) (最高的优先级, 可能不会记载东西);
adb logcat AndroidRuntime:E *:S
输出包含“AndroidRuntime”字符串的S级及以上的日志
日志捕获要与测试同时运行,在操作过程开始之前启动日志线程。
注意:单纯的杀死线程是无法停止“adb logcat”命令的,可使用 “adb kill-server”命令终止。