問題描述:
pytest-xidst: 程序級的併發執行pytest外掛程式,-n 指定cpu數量, --loadfile 引數來控制順序 ,預設是無序。
在利用pytest-xidst實現case併發執行,與框架中的日誌處理logging模組不相容,遇到一些日誌列印問題。 logging模組內日誌輪轉的handlers是多執行緒安全,不支援多程序。所以需要改動日誌框架支援多程序。
簡要說明下logging模組常用的handlers:
def __init__(self, filename, mode='a', encoding=none, delay=false):
解決方案:可修改原始碼加鎖保證程序安全。我這裡選取現有concurrentloghandler模組進行處理,在logging模組上進行的擴充套件。需要提前安裝pip3 install concurrentloghandler。
formatter = logging.formatter('%(asctime)s - %(levelname)-5s - %(message)s')
logger = logging.getlogger("testlog")
logger.setlevel(logging.info)
log_path = 'xx.log' # 日誌檔案路徑
if not logger.handlers: # 判斷是否有handlers,有直接記錄日誌, 不需要建立多個控制代碼,否則會有日誌重複列印問題
# concurrentrotatingfilehandler
rotatehandler = concurrentrotatingfilehandler(log_path, "a", 512*1024, 5)
rotatehandler.setlevel(logging.info)
rotatehandler.setformatter(formatter)
logger.addhandler(rotatehandler)
# streamhandler
stream_handler = logging.streamhandler(sys.stderr)
stream_handler.setlevel(logging.info)
stream_handler.setformatter(formatter)
logger.addhandler(stream_handler)
logger.info(msg)
執行pytest -n 3 -m "mark" --alluredir=./allure-results: 就可以正常執行列印日誌。 html列印日誌 日誌檔案
日誌檔案的主要作用是記錄了某個時刻,某個地點發生了什麼!對乙個程式設計師而言,日誌系統在程式開發 維護的過程中是非常重要的,日誌系統可以幫助我們快速定位程式錯誤發生的時間和位置 以及程式出錯的大致原因。在日誌資訊足夠詳細的前提下,日誌還可以幫助我們分析使用者行為,從而更好地為客戶爸爸們提供精準有效的...
iOS 列印日誌
簡單介紹以下幾個巨集 1 va args 是乙個可變引數的巨集,這個可變引數的巨集是新的c99規範中新增的,目前似乎只有gcc支援 vc6.0的編譯器不支援 巨集前面加上 的作用在於,當可變引數的個數為0時,這裡的 起到把前面多餘的 去掉,否則會編譯出錯。2 file 巨集在預編譯時會替換成當前的源...
Python日誌列印
簡單示例 import sys import ctypes import logging import logging.handlers reload sys sys.setdefaultencoding utf 8 log file test log logging.basicconfig fil...