python + appium 自动化测试方案 — 输出log日志

用json配置log日志参数,形成自定义的log日志风格,用于自动化测试执行完成后输出操作日志以及捕获崩溃日志。


1、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
basicConfig中的参数说明:
  • level 日志等级
日志等级(level) 描述
DEBUG 最详细的日志信息,典型应用场景是 问题诊断
INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息
  • format 日志输出格式

%(asctime)s %(levelname)s %(message)s
输出格式为:日志捕获时间:日志器名称:日志内容

日志器设置的日志格式默认是BASIC_FORMAT,其值为:

%(levelname)s:%(name)s:%(message)s

  • datefmt 时间格式
  • filename 日志输出的文件名
  • filemode 日志文件的读写模式

2、log使用

logger = LogConfig.getLogger()
logger.info('ActionParser: back...')
logger.error('found element fail.')

3、捕获崩溃日志

在测试过程中,应用发生崩溃,测试希望日志输出能够整合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')
adb logcat 命令格式:adb logcat [选项] [过滤项]

– 选项解析:

  • ”-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级及以上的日志

4、线程

日志捕获要与测试同时运行,在操作过程开始之前启动日志线程。
注意:单纯的杀死线程是无法停止“adb logcat”命令的,可使用 “adb kill-server”命令终止。

你可能感兴趣的:(python,appium,自动化测试)