pytest xdist 日誌列印問題

2021-10-11 04:38:10 字數 1402 閱讀 7314

問題描述:

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...