测试日志:测试过程内部执行情况、错误异常信息
测试报告:测试内容、测试步骤、测试结果
测试报告是给用户还有管理者查看的,确认我们最终的测试结果
日志主要是用来测试脚本的和测试框架的调试,或者出现错误的时候,来进行定位
日志分内嵌日志和公共日志
如果测试执行的内容不是特别多,也就一两个,脚本里面的逻辑也不不是很复杂,那是可以用print语句代替日志的。一个测试框架对应一个项目的所有文件,如果测试脚本非常多,测试脚本之间的关联关系也是非常的多,如果写一推的查询语句打印语句是非常麻烦的
输出日志一般选择日志文件这种方式来做
日志级别默认显示warning这个级别,以及这个级别以上的,ERROR和ctitical都在这个级别以上,所以这三条都会打印
如何显示指定的日志级别显示?
logging.basicConfig(leval=logging.级别)
format格式:时间、文件名、代码的第几行、级别的名称、级别方法后面所写的信息
datefmt日期格式
filename:日志文件放在什么地方以及叫什么名字
filemode='a':表示追加写入
这里是提供了5个级别的方法
- # 日志文件输出
- import logging
- # *******************************
- # pytest日志输出试验,不同级别的日志如何控制输出
- # *******************************
- # 进行log级别的设置
- # logging.basicConfig(level=logging.error)
- logging.basicConfig(level=logging.INFO,
- format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
- datefmt='[%Y-%m_%d %H:%M:%S]',
- filename='./my.log1',
- filemode='a')
- logging.critical('logging critical message')
- logging.error('logging error message')
- logging.warning('logging warning message')
- logging.info('logging info message')
- logging.debug('logging debug message')
getlogger是来获取main函数(__name__)
初始化logger对象
初始化控制台对象
把控制台对象添加到日志handler中
输出日志信息在控制台
- # 日志控制台输出
- import logging
- # 初始化Logger对象
- logger = logging.getLogger(__name__)
- logger.setLevel(level = logging.DEBUG)
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- #初始化控制台对象
- console = logging.StreamHandler()
- console.setFormatter(formatter)
- #把控制台对象添加到日志Handler中
- logger.addHandler(console)
- #输出日志信息在控制台
- logger.info("Start print log")
- logger.debug("Do something")
- logger.warning("Something maybe fail.")
- logger.info("Finish")
初始化日志对象
初始化日志文件对象
初始化控制台对象
添加日志文件和控制台对象
公共日志模块设置脚本
有一个commlog这样的名字,就认为它是一个公共日志模块的名称,这个名称可以自己随便改,设置好之后,在其他脚本里面引用就非常简单了
- #**********************************
- #公共日志模块设置
- #**********************************
- import logging
- #初始化日志对象
- logger = logging.getLogger('commlog')
- logger.setLevel(level=logging.DEBUG)
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
-
- #初始化日志文件对象
- handler = logging.FileHandler('log1.txt')
- handler.setLevel(logging.INFO)
- handler.setFormatter(formatter)
-
- #初始化控制台对象
- console = logging.StreamHandler()
- console.setLevel(logging.DEBUG)
- console.setFormatter(formatter)
-
- #添加日志文件和控制台对象
- logger.addHandler(handler)
- logger.addHandler(console)
-
引用公共日志模块的和脚本
当前脚本,把这个com_log引进来,getlogger后面的引入公共配置文件后一定要加.sub
- # 引用公共日志模块的脚本
- from test_log import comm_log
- import logging
-
- module_logger = logging.getLogger('commlog.sub')
- module_logger.info('this is another module using logging')
- module_logger.warning('另一个模块打印的警告')
还有一种方法日志公共配置conf文件设置。日志这块也提供了一个配置文件,只不过后缀变成了.conf,只要把格式搞清楚,这个是最基础的公共配置文件,够我们日常使用了
,以后无非就是修改一些级别,增加一些handle的输出,增加一些格式选项,整个写的方式就是按照这样的模板来做
第一块是loogers的初始化对象
里面handles是指要不要输出到控制台,后面是控制台的内容
想在控制台输出就是要有handles对象
handles的类型是,class=streamhandler,上下的leval不一样有什么问题吗?
args是指我要启用这个控制台,把参数传给命令行,通过常量进行传递,常量的名字是不能随便改的
接下来输出的格式是什么,对formatters做了一个设置
formatters下面可以定义多种格式,对应不同的级别可以使用不同的格式
log.conf文件
- ###############################################
- [loggers]
- keys=root
- [logger_root]
- level=DEBUG
- handlers=hand01
- ###############################################
- [handlers]
- keys=hand01
- [handler_hand01]
- class=StreamHandler
- level=DEBUG
- formatter=form01
- args=(sys.stderr,)
- ###############################################
- [formatters]
- keys=form01,form02
- [formatter_form01]
- format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
- datefmt=%a, %d %b %Y %H:%M:%S
- [formatter_form02]
- format=%(name)-12s: %(levelname)-8s %(message)s
- datefmt=%a, %d %b %Y %H:%M:%S
要引用公共公共配置文件的脚本
- # 引用公共配置文件log.conf
- # 控制台输出
- import logging
- import logging.config
-
- logging.config.fileConfig("log.conf")
- logger = logging.getLogger("root")
- logger.debug('This is debug message')
- logger.info('This is info message')
- logger.warning('This is warning message')
conf配置文件2
定义类两个关键字可以用root进行初始化,也可以用main进行初始化。输出的对象有两个,一个是文件,一个是控制台
学习的重点不是语法背下来多少,很多东西靠记忆力是记不住的,反复应用,多用几次就记住了
现在学的都是零散的基础试验
我们要理解它的原理和他对应的一个关系,有一些关键字的引用
要引用的文件名要一致
初始化logger的对象,要看conf的关键字叫什么名字,再引用一样的名字就好
logger.conf
- [loggers]
- keys=root,main
-
- [handlers]
- keys=consoleHandler,fileHandler
-
- [formatters]
- keys=fmt
-
- [logger_root]
- level=DEBUG
- handlers=consoleHandler
-
- [logger_main]
- level=DEBUG
- qualname=main
- handlers=fileHandler
-
- [handler_consoleHandler]
- class=StreamHandler
- level=DEBUG
- formatter=fmt
- args=(sys.stdout,)
-
- [handler_fileHandler]
- class=logging.handlers.RotatingFileHandler
- level=DEBUG
- formatter=fmt
- args=('test.log','a',20000,5,)
-
- [formatter_fmt]
- format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
要引用公共配置文件的脚本,输出控制台日志和脚本日志
- # 引用公共配置文件log.conf
- # 控制台输出又日志文件输出
-
- import logging
- import logging.config
-
- logging.config.fileConfig('logger.conf')
- root_logger = logging.getLogger('root')
- root_logger.debug('test root logger...')
-
- logger = logging.getLogger('main')
- logger.info('test main logger')
- logger.info('test another')