目的:使用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文件內容如下:
到這里就完成了日志信息的輸出了、散會 ~