国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python自動化測試通過日志3分鐘定位bug

python自動化測試通過日志3分鐘定位bug

2022-03-04 00:18軟件測試君 Python

軟件開發中通過日志記錄程序的運行情況是一個開發的好習慣,對于錯誤排查和系統運維都有很大幫助,Python標準庫自帶了強大的logging日志模塊,在各種python模塊中得到廣泛應用

一、簡單使用

入門小案例

import logging
logging.basicConfig(level=logging.DEBUG,  #設置級別,根據等級顯示
  format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 設置輸出格式
logging.debug('This is a debug log')
logging.info('This is a info log')
logging.warning('This is a warning log')
logging.error('This is a error log')
logging.critical('This is a critical log')

日志級別

根據不同情況設置了五種日志等級,不同情況輸出不同等級的日志。

python自動化測試通過日志3分鐘定位bug

日志器設置的級別會過濾掉低于這個級別的日志

import logging
logging.basicConfig(level=logging.WARNING,  #設置級別,根據等級顯示
  format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 設置輸出格式
logging.debug('This is a debug log')
logging.info('This is a info log')
logging.warning('This is a warning log')
logging.error('This is a error log')
logging.critical('This is a critical log')

2020-09-11 17:39:26,667-WARNING-This is a warning log

2020-09-11 17:39:26,669-ERROR-This is a error log

2020-09-11 17:39:26,669-CRITICAL-This is a critical log

配置

basicConfig 方法支持一下關鍵字參數進行配置。

python自動化測試通過日志3分鐘定位bug

格式化規則

日志的輸出格式可以通過下面格式自由組合輸出

python自動化測試通過日志3分鐘定位bug

常用格式:%(asctime)s-[%(filename)sC>line:%(lineno)d]-%(levelname)s:% (message)s

import logging
logging.basicConfig(level=logging.DEBUG,  #設置級別,根據等級顯示
  format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 設置輸出格式
logging.debug('This is a debug log')

[DEBUG]-2020-09-11 17:36:50,125C4:This is a debug log

日志寫到文件

只需要配置 filename 參數即可

import logging
logging.basicConfig(
  level=logging.WARNING,  #設置級別,根據等級顯示
  filename='example.log'
  format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 設置輸出格式
logging.debug('This is a debug log')
logging.info('This is a info log')
logging.warning('This is a warning log')
logging.error('This is a error log')
logging.critical('This is a critical log')

注意,配置了 fielname 后,日志將不會輸出在控制臺。

 

二、高級用法

簡單的代碼通過 logging 直接使用即可,如果要深入使用需要按照面向對象的方式使用 logging。

日志組件

logging 模塊包含一下幾個組件。

python自動化測試通過日志3分鐘定位bug

步驟

1 創建日志記錄器

import logging
#  第一步創建一個logger,用來產生日志
logger = logging.getLogger('%s_log' % __name__)
logger.setLevel(logging.DEBUG)  # 設置日志等級

通過 getLogger 這個方法可以創建一個日志記錄器,注意要給名字否則返回根日志記錄器。

通過 setLevel 設置日志記錄器的等級。

2 創建日志處理器

# 創建一個文本處理器用來將日志寫入到文件
file_handler = logging.FileHandler(filename='py34.log',encoding='utf-8')
file_handler.setLevel('WARNING')  # 設置處理器的日志等級
# 創建一個控制臺處理器用來將日志輸出到控制臺
console_handler = logging.StreamHandler()
console_handler.setLevel('INFO')  # 設置控制臺處理器的日志等級

日志處理器就是將日志發送到指定的位置

FileHandler 將日志發送到文件

StreaHandler 將它可將日志記錄輸出發送到數據流例如 sys.stdout, sys.stderr 或任何文件類對象默認sys.stdout 即控制臺。

RotatingFileHandler 支持根據日志文件大小進行輪轉

TimedRotatingFileHandler 支持根據時間進行輪轉日志文件

更多詳情見官方文檔

(https://docs.python.org/zh-cn/3/library/logging.handlers.html?utm_source=testingpai.com#module-logging.handlers)

3 創建格式化器

formatter = logging.Formatter(fmt='%(levelname)s %(asctime)s [%(filename)s-->line:%(lineno)d]:%(message)s')

格式化器需要設置到處理器上

file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

4 創建過濾器

過濾器用來過濾指定日志。具體使用略,一般用不到。

詳情見官方文檔

(https://docs.python.org/zh-cn/3/howto/logging-cookbook.html?utm_source=testingpai.com#filters-contextual )

5 將處理器添加到記錄器上

logger.addHandler(file_handler)
logger.addHandler(console_handler)

6 記錄日志

logger.info('This is a info')

2020-09-11 22:22:44,095-[C>line:1]-INFO:This is a info

logger.warning('This is a warning')

2020-09-11 22:23:20,337-[C>line:1]-WARNING:This is a warning

 

三、日志模塊封裝

功能分析

  • 能夠自定義日志器名
  • 能夠自定義日志文件名和路徑
  • 能夠自定義日志文件編碼方式
  • 能夠自定義日志格式
  • 使用時間輪轉處理器,并能夠配置

封裝成函數

在 common 目錄下創建模塊 log_handler.py 在其中創建如下函數。

import logging
from logging.handlers import TimedRotatingFileHandler
def get_logger(name, filename, encoding='utf-8', fmt=None, when='d', interval=1, backup_count=7, debug=False):
  """
  :param name: 日志器的名字
  :param filename: 日志文件名(包含路徑)
  :param encoding: 字符編碼
  :param fmt: 日志格式
  :param when: 日志輪轉時間單位
  :param interval: 間隔
  :param backup_count: 日志文件個數
  :param debug: 調試模式
  :return:
  """
  logger = logging.getLogger(name)
  logger.setLevel(logging.DEBUG)
  # 文件處理器的等級一般情況一定比控制臺要高
  if debug:
      file_level = logging.DEBUG
      console_level = logging.DEBUG
  else:
      file_level = logging.WARNING
      console_level = logging.INFO
  if fmt is None:
      fmt = '%(levelname)s %(asctime)s [%(filename)s-->line:%(lineno)d]:%(message)s'
  file_handler = TimedRotatingFileHandler(
      filename=filename, when=when, interval=interval, backupCount=backup_count, encoding=encoding)
  file_handler.setLevel(file_level)
  console_handler = logging.StreamHandler()
  console_handler.setLevel(console_level)
  formatter = logging.Formatter(fmt=fmt)
  file_handler.setFormatter(formatter)
  console_handler.setFormatter(formatter)
  logger.addHandler(file_handler)
  logger.addHandler(console_handler)
  return logger
if __name__ == '__main__':
  log = get_logger(name='py41', filename='py41.log', debug=True, when='s')
  log.info('我是普通信息')
  import time
  time.sleep(3)
  log.warning('我是警告信息')

 

四、應用到項目中

導入

日志器生成函數的導入不能像 Excel 數據讀取函數一樣,每個用例模塊里都導入一遍。因為它返回一個日志器對象,當多次調用日志器生成函數,且日志器名稱相同時,會給同一個日志器添加多個日志處理器,從而出現重復記錄日志器的問題。

為了解決上面的問題,在 common 文件夾下創建一個名為 init.py 的文件,在 common 模塊被導入時會自動執行這個文件里的代碼,且只會執行一次。

init.py 文件編寫如下代碼:

from .log_handler import get_logger
logger = get_logger('py41', 'py38.log')

那么在項目中的其他模塊中就可以通過如下代碼導入

from common import logger

從而可以保證在項目執行過程中,get_logger 方法只會執行一遍。

記錄日志

日志的作用是記錄程序的運行狀態和當程序出現問題時能提供定位分析錯誤的依據。

什么時候需要記錄日志,記錄什么日志,根據每個人對程序的理解,以及經驗。

我們的項目中,在用例執行的過程是核心,所以我們的日志也是圍繞著用例的執行。

使用日志記錄每個用例的測試數據,和測試結果,代碼如下:

...
@list_data(*cases)
  def test_login(self, case):
      """
      登陸測試
      """
      logger.info('測試用例【{}】開始測試'.format(case['title']))
      # 1. 測試數據
      # 傳入進來的case參數
      logger.info('測試用例【{}】的測試數據是:{}'.format(case['title'], case))
      # 2. 測試步驟
      res = login_check(case['username'], case['password'])
      logger.info('測試用例【{}】的測試結果是:{}'.format(case['title'], res))
      # 3. 斷言
      try:
          self.assertEqual(res, case['expect'])
      except AssertionError as e:
          logger.error('測試用例【{}】斷言失敗'.format(case['title']))
          raise e
      else:
          logger.info('測試用例【{}】斷言成功'.format(case['title']))
      finally:
          logger.info('測試用例【{}】測試結束')

以上就是python自動化測試通過日志3分鐘定位bug的詳細內容,更多關于日志定位bug的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/AI_Green/article/details/121401061

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜看片网站 | 亚洲美女性视频 | 国产精品成人一区二区三区夜夜夜 | 欧美国产日韩一区 | 一本大道专区 | 欧美一级二级三级 | 成人欧美一区二区三区在线观看 | 午夜视频网 | 毛片在线观看网站 | 亚洲精品国精品久久99热 | 久久精品中文字幕 | 亚洲午夜精品 | 97久久精品人人澡人人爽 | 日韩精品一区二区三区在线 | 91精品一区二区三区久久久久久 | 日韩不卡一区二区三区 | 国产乱码一区二区三区 | 成人黄页在线观看 | 欧美精品一二区 | 一区二区三区视频 | 中文av一区二区 | 国产成人精品一区二 | 99re热精品视频 | 亚洲一区中文字幕 | 日韩一区久久 | 亚洲精品视频免费观看 | 欧美一级片免费播放 | 一级看片 | 欧美成人高清视频 | 久色视频在线观看 | 久久久午夜爽爽一区二区三区三州 | 日韩在线精品 | 96成人爽a毛片一区二区 | 亚洲精品9999 | 狠狠躁躁夜夜躁波多野结依 | 中文字幕免费视频 | 一级毛片儿 | 免费成人在线视频网站 | 国产精品久久av | 国产欧美综合一区二区三区 | 涩涩久久 |