Pytest22--记录日志
记录日志
日志的作用
1)记录测试过程中的重要事件(成功执行了什么代码,执行代码出了何种错误、执行代码有无发现缺陷)
2)向控制台输出日志信息(相当于之前的print)
3)将日志信息记录到文件
日志的等级
1)有低到高的分类
debug、info、warning、error、critical
调试 信息 警告 错误 严重错误
2)输出日志时,使用哪种等级,自己确定
3)日志等级设置好以后,凡是低于等级的事件,均不输出日志,凡是高于等级的事件,均输出日志
①如日志等级设置为warning,则只输出warning、error、critical的事件,debug和info都不输出(这两个命令不执行)
编写日志函数
1)导入模块
导入模块logging
2)创建日志对象
logger=logging.getLogger()
①若内存中已存在创建的对象,则不会重复创建,此特点会导致,输出日志时,同一日志会重复输出多次
②解决方法
在第2)步之后,第3)步之前,加入代码
if not logger.handlers: #表示如果日志处理器中是空的
3)设置日志输出等级
logger.setLevel(logging.INFO)
4)设置日志输出格式
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s [%(filename)s:%(lineno)d]')
①%s之间的内容全部是关键字,不能改变
②asctime:当前时间(精确到ms)
③levelname:日志等级
④message:自定义消息
⑤filename:模块名
⑥lineno:行号
5)创建日志流处理器
console=logging.StreamHandler()
①用于设定日志输出到控制台
6)设置日志流处理器的日志输出格式
console.setFormatter(formatter)
7)日志流处理器增加到日志对象
logger.addHandler(console)
8)关闭日志流处理器
console.close()
9)指定日志文件名
import time
now=time.strftime('%Y%m%d%H%M%S')
logfile='../log/'+now+'.log'
10)创建日志文件处理器
file=logging.FileHandler(logfile, encoding, mode)
①logfile:日志文件名
②encoding='utf-8':向日志中写汉字时,需要指定编码方式
③mode:日志默认是追加方式,若要覆盖可用mode='w'
11)设置日志文件处理器的日志输出格式
file.setFormatter(formatter)
12)日志文件处理器增加到日志对象
logger.addHandler(file)
13)关闭日志文件处理器
file.close()
14)返回日志对象
return logger
①与if对齐,不能放入if之中
调用日志函数
log().info('日志消息')
log().warning('日志消息')
log().error('日志消息')
log().critical('日志消息')
在代码中记录日志
1)把原来的print全部替换为日志输出(同时将日志存入文件)
2)定义好什么时候使用何种日志等级
比如我们约定:
①成功执行代码时,日志输出为info等级
②测试通过时,日志输出为info等级
③测试失败,发现缺陷时,日志输出为warning等级
④代码执行出错,日志输出为error等级
在项目根目录下创建pytest.ini
只要测试代码中有日志相关代码,即可自动启用日志记录
在pytest.ini文件中指定日志记录到控制台还是文件,以及日志级别、日期格式、日志格式等
日志以覆盖模式写入,暂无法追加日志
pytest.ini
[pytest]
log_cli = 1
log_level = INFO
log_cli_format=%(asctime)s [%(levelname)s] %(message)s [%(filename)s:%(lineno)s]
log_cli_date_format=%Y-%m-%d %H:%M:%S
log_file =pytest.log
log_file_format=%(asctime)s [%(levelname)s] %(message)s [%(filename)s:%(lineno)s]
log_file_date_format=%Y-%m-%d %H:%M:%S
日志文件名使用日期时间命名
import configparser,time
conf=configparser.ConfigParser()
confile='pytest.ini'
conf.read(confile)
node='pytest'
key='log_file'
value=time.strftime('%Y%m%d_%H%M%S')+'.log'
conf.set(node, key, value)
fil=open(confile, 'w') #不能用wb
conf.write(fil) #把要修改的节点的内容写到文件中
fil.close()
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15590037.html

浙公网安备 33010602011771号