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文件內容如下:

  到這里就完成了日志信息的輸出了、散會 ~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM