python中logging结合pytest打印日志

目的:使用pytest框架执行测试用例时、把对应的报错信息添加到log文件中去

前言:日志一共有五个等级、排序为:DEBUG < INFO < WARNING < ERROR < CRITICAL

知识点:日志格式内容设置参考:

参数                       作用
%(levelno)s             打印日志级别的数值
%(levelname)s           打印日志级别的名称
%(pathname)s            打印日志当前执行的路径、即sys.argv[0]
%(filename)s            打印当前执行程序名
%(funcName)s            打印日志的当前函数
%(lineno)d              打印梯子的当前行号
%(asctime)s             打印日志的时间
%(thread)d              打印线程ID
%(threadName)s          打印线程名称
%(message)s             打印报错信息
%(process)d             打印进程ID

步骤一:设置日志的信息格式、如下:

import datetime #python自带的时间模块 
import logging   #python中自带的日志模块
def myLogger(name=__name__):
    #1-定义日志的名称
    loggerName=datetime.datetime.now().strftime("%Y%m%d %H%M")  #以时间为文件名
    #2-定义生成日志的存放位置
    logDir=f"../log/{loggerName}.log"
    #3-创建日志对象
    logObj=logging.getLogger(name)   #缺省值参数 __name__
    #4- 定义日志级别
    logObj.setLevel(logging.INFO) #这是设置的是INFO,那么其可以记录等级比其高的错误信息、不会记录等级比其低的错误信息(即DEBUG级别的错误)
    #5- 日志文件的属性
    fHandler = logging.FileHandler(logDir,mode="w",encoding="utf-8")
    #6- 日志内容的格式 (参数内容根据个人需求 参考以上知识点中内容即可)
    formatter=logging.Formatter("%(asctime)s %(levelname)s %(funcName)s %(filename)s[%(lineno)d]: %(message)s")
    fHandler.setFormatter(formatter)
    #7- 把对应的属性添加到日志对象中
    logObj.addHandler(fHandler)
    return logObj

步骤二、具体使用、这里结合trackback模块:

from tools.loginBasic import myLogger
import traceback
import pytest

log=myLogger()  #先调用方法、返回日志对象
class Test:
    def test_demo(self):
        res={"username":123,"password":"123"}
        try:
            assert res["age"] == "测试"  #因为res中没有age这个键、所以这语句会报错、except中就可以抓到这个异常了
        except Exception as e:
            log.error(traceback.format_exc())  #这里把错误信息定义为error级别的
            raise e   #如果使用了allure报告查看结果、那么这里需要我们手动抛出异常给框架、要不报告中看不到错误

if __name__ == '__main__': 
    pytest.main(["-s",'test_login.py',"-k test_demo"])  #运行查看结果即可

步骤三、生成的log文件内容如下:

  到这里就完成了日志信息的输出了、散会 ~

posted @ 2021-04-19 11:43  miracle2  阅读(1299)  评论(0编辑  收藏  举报