中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-03-04 11:37:14 來源:億速云 閱讀:220 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“python自動化測試通過日志3分鐘定位bug的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“python自動化測試通過日志3分鐘定位bug的示例分析”這篇文章吧。

    一、簡單使用

    入門小案例

    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)s–>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,125–4: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-[–>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

    三、日志模塊封裝

    功能分析

    • 能夠自定義日志器名

    • 能夠自定義日志文件名和路徑

    • 能夠自定義日志文件編碼方式

    • 能夠自定義日志格式

    • 使用時間輪轉處理器,并能夠配置

    封裝成函數

    在 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的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    恭城| 西乌珠穆沁旗| 绥宁县| 临高县| 开鲁县| 讷河市| 盐城市| 大埔县| 梅州市| 子长县| 安溪县| 前郭尔| 涟源市| 金昌市| 达日县| 莱阳市| 洱源县| 利辛县| 潮安县| 墨脱县| 手机| 宁晋县| 宜都市| 阿拉善右旗| 武山县| 绥芬河市| 依兰县| 晋城| 石景山区| 抚顺市| 南昌县| 浦东新区| 霍林郭勒市| 芜湖县| 蛟河市| 滦南县| 民勤县| 平原县| 泾源县| 茂名市| 蒙阴县|