appium第五章:日志管理

本章概要

不管是在项目开发还是测试过程中,项目运行一旦出现问题日志信息就非常重要了。日志是定位问题的重要手段,就像侦探人员要根据现场留下的线索来推断案情。在appium测试中,日志管理也是不可缺少的,本章详解日志的原理和代码操作

日志管理原理:

一、日志级别

脚本运行会有很多的情况,比如调试信息、报错异常信息等。日志要根据这些不同的情况来继续分级管理,不然对于排查问题的筛选会有比较大的干扰。 。日志一般定位的级别如下:

级别何时使用
DEBUG调试信息,也是最详细的日志信息。
INFO证明事情按预期工作。
WARNING表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常工作。
ERROR由于更严重的问题,软件已不能执行一些功能了。
CRITICAL严重错误,表明软件已不能继续运行了。

首先我们日志需要按照info、debug、error等级别来进行区分的。当然这个级别可以自己去设置。在一般的情况下我们普通的输出我们直接用info类型,调试的时候用debug类型,如果预计有错误时那么我们就需要用error类型的日志,一般情况去info级别最为合适。

二、日志格式

日志格式化是为了提高日志的可阅读性,比如:时间+模块+行数+日志具体信息 的内容格式。如果日志信息杂乱无章的全部输出来,这样也不利于定位问题。如下所示就是日志格式化输出,非常便于阅读查看。

2018-01-10 18:02:35,633 backup.py[line:18] INFO test backup====
2018-01-10 18:02:39,253 backup.py[line:20] INFO click backup button
2018-01-10 18:02:54,025 backup.py[line:23] INFO click next button

三、日志位置

一个项目中会有很多的日志采集点,而日志采集点必须结合业务属性来设置。比如在登录代码执行前可以插入“准备登录…”日志信息,如果登录完成之后,再设置登录的提示日志就会给人造成误解,无法判断到底是登录之前的问题还是登录之后的问题,因此日志采集点的位置很重要。

日志代码实现

Python的logging模块提供了通用的日志系统,这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现方式记录日志

一、logging构成

  1. Logger 记录器,用于设置日志采集。
    basicConfig(**kwargs) 为日志记录系统做基本配置。参数分别是:Handler 处理器、Filter 过滤器、Formatter 格式化器
  2. Handler 处理器,将日志记录发送至合适的路径。
    参数:filename 指定日志文件名称
    参数:filemode 指定打开文件的模式,如果指定了filename(如果文件模式未指定,则默认为’a)
    Tips:文件读写模式
    1) w 以写方式打开,
    2)W 文件若存在,首先要清空,然后(重新)创建
    3) a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
    4) r+ 以读写模式打开
    5) w+ 以读写模式打开 (参见 w )
    6) a+ 以读写模式打开 (参见 a )
  3. Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
    参数:level 将根记录器级别设置为指定级别。
    在这里插入图片描述
  4. Formatter 格式化器,指明了最终输出中日志的格式。
    参数:format 为处理程序使用指定的格式字符串
格式描述
%(levelno)s打印日志级别的数值
%(levelname)s打印日志级别名称
%(pathname)s打印当前执行程序的路径
%(filename)s打印当前执行程序名称
%(funcName)s打印日志的当前函数
%(lineno)d打印日志的当前行号
%(asctime)s
%(thread)d打印线程id
%(threadName)s打印线程名称
%(process)d打印进程ID
%(message)s打印日志信息

使用方法:
logging.basicConfig(filename=‘runlog.log’,level=logging.DEBUG,format=’%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s’)
输出结果:
2018-04-19 17:25:04,679 logging_test.py[line:12] DEBUG debug info
2018-04-19 17:25:04,680 logging_test.py[line:13] INFO hello 51zxw 2020
2018-04-19 17:25:04,680 logging_test.py[line:14] WARNING waning info

二、日志格式配置

将log输出格式,输出路径等参数抽离出来作为一个配置表,可以直接调用,如下所示:
名称 log.conf

[loggers]               #创建记录器
keys=root,infoLogger   #一个默认记录器、一个定义为infoLogger记录区

[logger_root]           #默认记录器
level=DEBUG             #过滤的级别
handlers=consoleHandler,fileHandler      #配置:控制台的输出和文件的输出

[logger_infoLogger]      #定义为infoLogger记录区
handlers=consoleHandler,fileHandler   #配置:输出的控制台和输出的文件
qualname=infoLogger      #日志的引用名称
#等于0:表示输入日志,消息不传递。等于1:表示输入日志,消息往更高级别传递,root最高
propagate=0 

[handlers]      #控制台
keys=consoleHandler,fileHandler  # 控制台的输出和文件的输出

[handler_consoleHandler]   #  输出的控制台
class=StreamHandler    #  类型:文件流的对象
level=INFO     #过滤级别
formatter=form02    #输出格式
args=(sys.stdout,)       #标注流输出

[handler_fileHandler]
class=FileHandler
level=INFO
formatter=form01
args=('runlog.log', 'a')   #输出文件路径,现在为当前路径

[formatters]   #创建文件格式
keys=form01,form02    #创建的两个格式

[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

[formatter_form02]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

在需要调用的模块增加如下代码:

import logging
import logging.config
CON_LOG='log.conf'

logging.config.fileConfig(CON_LOG)
logging=logging.getLogger()

desired_caps = {··· }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

logging.info('开始测试了!')

注意:该放在作用是从ConfigParser格式的文件中读取日志配置,同时如果当前脚本有配置log参数,则覆盖当前log配置选项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值