最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年11月19日 14:57:17   作者:軟件測試君  
軟件開發(fā)中通過日志記錄程序的運行情況是一個開發(fā)的好習慣,對于錯誤排查和系統(tǒng)運維都有很大幫助,Python標準庫自帶了強大的logging日志模塊,在各種python模塊中得到廣泛應用

一、簡單使用

入門小案例

import logging
logging.basicConfig(level=logging.DEBUG,  #設置級別,根據(jù)等級顯示
    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')

日志級別

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

在這里插入圖片描述

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

import logging
logging.basicConfig(level=logging.WARNING,  #設置級別,根據(jù)等級顯示
    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 方法支持一下關鍵字參數(shù)進行配置。

在這里插入圖片描述

格式化規(guī)則

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

在這里插入圖片描述

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

import logging
logging.basicConfig(level=logging.DEBUG,  #設置級別,根據(jù)等級顯示
    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,125–4:This is a debug log

日志寫到文件

只需要配置 filename 參數(shù)即可

import logging
logging.basicConfig(
    level=logging.WARNING,  #設置級別,根據(jù)等級顯示
    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 直接使用即可,如果要深入使用需要按照面向?qū)ο蟮姆绞绞褂?logging。

日志組件

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

在這里插入圖片描述

步驟

1 創(chuàng)建日志記錄器

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

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

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

2 創(chuàng)建日志處理器

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

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

FileHandler 將日志發(fā)送到文件

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

RotatingFileHandler 支持根據(jù)日志文件大小進行輪轉(zhuǎn)

TimedRotatingFileHandler 支持根據(jù)時間進行輪轉(zhuǎn)日志文件

更多詳情見官方文檔

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

3 創(chuàng)建格式化器

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

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

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

4 創(chuàng)建過濾器

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

詳情見官方文檔

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-[–>line:1]-INFO:This is a info

logger.warning('This is a warning')

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

三、日志模塊封裝

功能分析

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

封裝成函數(shù)

在 common 目錄下創(chuàng)建模塊 log_handler.py 在其中創(chuàng)建如下函數(shù)。

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: 日志輪轉(zhuǎn)時間單位
    :param interval: 間隔
    :param backup_count: 日志文件個數(shù)
    :param debug: 調(diào)試模式
    :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('我是警告信息')

四、應用到項目中

導入

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

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

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

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

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

from common import logger

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

記錄日志

日志的作用是記錄程序的運行狀態(tài)和當程序出現(xiàn)問題時能提供定位分析錯誤的依據(jù)。

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

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

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

...
@list_data(*cases)
    def test_login(self, case):
        """
        登陸測試
        """
        logger.info('測試用例【{}】開始測試'.format(case['title']))
        # 1. 測試數(shù)據(jù)
        # 傳入進來的case參數(shù)
        logger.info('測試用例【{}】的測試數(shù)據(jù)是:{}'.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的詳細內(nèi)容,更多關于日志定位bug的資料請關注腳本之家其它相關文章!

相關文章

  • 解決Python requests 報錯方法集錦

    解決Python requests 報錯方法集錦

    這篇文章主要介紹了解決Python requests 報錯方法集錦的相關資料,需要的朋友可以參考下
    2017-03-03
  • 使用Python高效獲取網(wǎng)絡數(shù)據(jù)的操作指南

    使用Python高效獲取網(wǎng)絡數(shù)據(jù)的操作指南

    網(wǎng)絡爬蟲是一種自動化程序,用于訪問和提取網(wǎng)站上的數(shù)據(jù),Python是進行網(wǎng)絡爬蟲開發(fā)的理想語言,擁有豐富的庫和工具,使得編寫和維護爬蟲變得簡單高效,本文將詳細介紹如何使用Python進行網(wǎng)絡爬蟲開發(fā),包括基本概念、常用庫、數(shù)據(jù)提取方法、反爬措施應對以及實際案例
    2025-03-03
  • Python如何實現(xiàn)讀取csv文件時忽略文件的編碼格式

    Python如何實現(xiàn)讀取csv文件時忽略文件的編碼格式

    我們再日常讀取csv文件的時候經(jīng)常會發(fā)現(xiàn)csv文件的格式有多種,所以這篇文章為大家介紹了Python如何實現(xiàn)讀取csv文件時忽略文件的編碼格式吧
    2025-03-03
  • python挖礦算力測試程序詳解

    python挖礦算力測試程序詳解

    這篇文章主要介紹了python挖礦算力測試程序詳解的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python報錯之如何解決matplotlib繪圖中文顯示成框框問題

    Python報錯之如何解決matplotlib繪圖中文顯示成框框問題

    這篇文章主要介紹了Python報錯之如何解決matplotlib繪圖中文顯示成框框問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python深拷貝與淺拷貝用法實例分析

    Python深拷貝與淺拷貝用法實例分析

    這篇文章主要介紹了Python深拷貝與淺拷貝用法,結合實例形式分析了Python對象的復制、深拷貝、淺拷貝等操作原理、用法及相關注意事項,需要的朋友可以參考下
    2019-05-05
  • Python + selenium + crontab實現(xiàn)每日定時自動打卡功能

    Python + selenium + crontab實現(xiàn)每日定時自動打卡功能

    這篇文章主要介紹了Python + selenium + crontab實現(xiàn)每日定時自動打卡功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python cookbook(數(shù)據(jù)結構與算法)找到最大或最小的N個元素實現(xiàn)方法示例

    Python cookbook(數(shù)據(jù)結構與算法)找到最大或最小的N個元素實現(xiàn)方法示例

    這篇文章主要介紹了Python找到最大或最小的N個元素實現(xiàn)方法,涉及Python基于heapq模塊進行集合運算的相關操作技巧,需要的朋友可以參考下
    2018-02-02
  • Python unittest 簡單實現(xiàn)參數(shù)化的方法

    Python unittest 簡單實現(xiàn)參數(shù)化的方法

    今天小編就為大家分享一篇Python unittest 簡單實現(xiàn)參數(shù)化的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python實現(xiàn)從線程獲取返回值

    Python實現(xiàn)從線程獲取返回值

    本文介紹了Python中線程的概念、創(chuàng)建線程的方法和在線程中獲取函數(shù)返回值的技巧,線程作為進程中的執(zhí)行單元,可以實現(xiàn)程序的并發(fā)運行,文章通過示例代碼展示了如何在Python中使用Thread類創(chuàng)建線程,并講解了在線程中傳遞參數(shù)和獲取返回值的方法
    2024-09-09

最新評論

阜南县| 井研县| 正定县| 洱源县| 福安市| 右玉县| 安岳县| 偏关县| 饶河县| 苍梧县| 乌鲁木齐市| 中牟县| 古交市| 赤壁市| 施甸县| 安义县| 辽宁省| 龙胜| 安顺市| 云和县| 茌平县| 自治县| 兰溪市| 罗山县| 独山县| 西乌| 黑龙江省| 陕西省| 广汉市| 丘北县| 于田县| 天峻县| 广河县| 许昌市| 搜索| 修文县| 元阳县| 永川市| 武城县| 多伦县| 华宁县|