python selenium2樣本 - 日誌管理

來源:互聯網
上載者:User

標籤:方法   應用   調用   實現   日誌管理   ctime   inf   基本功   自動   

 

 

前言

       在自動化測試實踐過程中,必不可少的就是進行日誌管理,方便調試和生產問題追蹤,python提供了logging模組來進行日誌的管理。下面我們就logging模組的學習和使用進行一個層層推進示範學習。

      Python的logging模組提供了通用的日誌系統,可以方便第三方模組或應用使用。這個模組提供了不同的記錄層級,並可以採用不同的方式進行日誌記錄,比如檔案,HTTP GET/POST, SMTP, socket等等,甚至可以自定實現具體的日誌記錄方式。

    logging模組與java的log4j的機制是一樣的,只是具體的語言實現細節有些不同。python logging模組提供了logger、handler、filter、formatter等基礎類。

1、logger: 提供日誌介面,供應用程式調用。logger最常用的操作有兩大類:配置和發送日誌訊息。

2、handler:將日誌記錄發送到合適的目的,比如檔案、socket等等。一個logger對象可以通過addhandler方法添加0到N個handler,每個hangdler又可以定義不同的記錄層級,以實現日誌分級過濾。

3、filter:提供了一種優雅的方式決定一個日誌記錄是否發送到handler。

4、formatter:指定日誌記錄的輸出格式。formatter的構造方法需要兩個參數:訊息的格式字串和日期文字,這兩個參數是可選的。

預設情況下,logging將日誌輸出至console,記錄層級為WARNING。

logging中按記錄層級大小關係為CRITICAL > ERROR > WARNING > INFO >DEBUG > NOTSET,當然也可以自訂記錄層級。

 

簡單日誌

下面我們看一下一個簡單的日誌樣本,將日誌記錄輸出到console:

#-*- coding:utf-8 -*-

import logging

if __name__ == ‘__main__‘:

    logging.debug(u‘這是bug層級日誌記錄‘)

    logging.info(u‘這是提示資訊層級日誌記錄‘)

    logging.warning(u‘這是警告層級日誌記錄‘)

在console中將輸出一下資訊:

WARNING:root:這是警告層級日誌記錄

 

為什麼只輸出了一條呢?因為logging預設情況下的日誌輸出層級是:WANRING

 

日誌格式和層級控制

接下來我們看看如何控制日誌的輸出格式和記錄層級。程式碼範例如下:

#-*- coding:utf-8 -*-

import logging

if __name__ == ‘__main__‘:

    logging.basicConfig(level=logging.DEBUG,  # 記錄層級設定
        format="%(asctime)s  %(filename)s [line: %(lineno)d] %(levelname)s %(message)s",
        datefmt=‘%a, %d %b %Y %H:%M:%S‘,
        filename=‘mylog.log‘,
        filemode=‘w‘
    )
    logging.debug(u‘這是debug層級日誌記錄‘)
    logging.info(u‘這是資訊層級日誌記錄‘)
    logging.warning(u‘這是警告層級日誌記錄‘)
   

在目前的目錄下mylog.log檔案中的內容為:
Mon, 20 Mar 2017 16:21:28 log.py [line: 14] DEBUG 這是debug層級日誌記錄
Mon, 20 Mar 2017 16:21:28 log.py [line: 15] INFO 這是資訊層級日誌記錄
Mon, 20 Mar 2017 16:21:28 log.py [line: 16] WARNING 這是警告層級日誌記錄

 

logging.basicConfig函數各參數說明

filename: 指定日誌輸出檔案名

filemode:和file函數的意義相同,指定記錄檔的開啟模式,‘w或a’

format:指定日誌輸出格式和內容,format可以輸出很多有用的資訊,如上例所示:

    %(levelno)s: 列印記錄層級的數值

    %(levelname)s: 列印記錄層級名稱

    %(pathname)s: 列印當前執行程式的路徑,其實就是sys.argv[0]

    %(filename)s: 列印當前執行程式名

    %(funcName)s: 列印日誌的當前函數

    %(lineno)d: 列印日誌的當前行號

    %(asctime)s: 列印日誌的時間

    %(thread)d: 列印線程ID

    %(threadName)s: 列印線程名稱

    %(process)d: 列印進程ID

    %(message)s: 列印日誌資訊

datefmt:指定時間格式,同time.strtime()

level:指定記錄層級,預設為logging.WARNING

stream:指定日誌的輸出資料流,可以指定輸出到sys.stderr, sys.stdout或檔案,預設輸出到sys.stderr,當stream和filename同時指定時,stream被忽略。

 

日誌輸入定向

下面我們來看看如何把日誌同時輸出到console和檔案中,程式碼範例如下:

#-*- coding:utf-8 -*-

import logging

if __name__ == ‘__main__‘:

    logging.basicConfig(level=logging.DEBUG,  # 記錄層級設定

        format="%(asctime)s  %(filename)s [line: %(lineno)d] %(levelname)s %(message)s",

        datefmt=‘%a, %d %b %Y %H:%M:%S‘,

        filename=‘mylog.log‘,

        filemode=‘w‘)

    #####################################################
    # 定義一個StreamHandler,將info層級的或更進階別的日誌輸出到標錯錯誤
    # 並將其添加到當前的Tlog對象
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter(‘%(name)-12s: %(levelname)-8s %(message)s‘)
    console.setFormatter(formatter)
    logging.getLogger(‘‘).addHandler(console)
    ####################################################
    logging.debug(u"這是debug日誌記錄")
    logging.info(u‘這是info日誌記錄‘)
    logging.warning(u‘這是warning日誌記錄‘)

 

在console中輸出以下日誌記錄:
root        : INFO     這是info日誌記錄
root        : WARNING  這是warning日誌記錄

在目前的目錄下mylog.log檔案中內容為:
Mon, 20 Mar 2017 17:32:43  log.py [line: 26] DEBUG 這是debug日誌記錄
Mon, 20 Mar 2017 17:32:43  log.py [line: 27] INFO 這是info日誌記錄
Mon, 20 Mar 2017 17:32:43  log.py [line: 28] WARNING 這是warning日誌記錄

在本樣本中實現了根據不同需要,將不同層級的日誌重新導向輸出至不同的目標。

 

日誌配置

在上述所有的樣本中,日誌的配置都是在代碼中實現,但在實際的應用過程中,我們一般都需要動態配置日誌資訊,或是滿足自訂的需要,下面我們就自訂日誌配置進行樣本示範:

# 定義一個設定檔,這裡命名為logger.conf,為標準的INI格式的檔案,內容如下

###############################################

###### 下面定義了三個logger: root,demo01,demo01

[loggers]

keys=root,demo01,demo01

[logger_root]

level=DEBUG

handlers=hand01,hand02

[logger_demo01]

handlers=hand01,hand02

qualname=demo01

propagate=0

[logger_demo02]

handlers=hand01,hand03

qualname=demo02

propagate=0

###############################################

#### 下面定義了三個handler: hand01,hand02,hand03

[handlers]

keys=hand01,hand02,hand03

[handler_hand01]

class=StreamHandler

level=INFO

formatter=form02

args=(sys.stderr,)

[handler_hand02]

class=FileHandler

level=DEBUG

formatter=form01

args=(‘mylog.log‘, ‘a‘)

[handler_hand03]

class=handlers.RotatingFileHandler

level=INFO

formatter=form02

args=(‘mylog.log‘, ‘a‘, 10*1024*1024, 5)

###############################################

### 下面定義了兩種formatter: form01,form02

[formatters]

keys=form01,form02

[formatter_form01]

format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

datefmt=%a, %d %b %Y %H:%M:%S

[formatter_form02]

format=%(name)-12s: %(levelname)-8s %(message)s

datefmt=

 

使用demo01 logger程式碼範例:

#-*- coding:utf-8 -*-

import logging

import logging.config

if __name__ == ‘__main__‘:

    logging.config.fileConfig("logger.conf")

    logger = logging.getLogger("demo01")

    logger.debug(u‘這是demo01 debug日誌記錄‘)

    logger.info(‘u‘這是demo01 info日誌記錄‘)

   logger.warning(u‘這是demo01 warning日誌記錄‘)

 

下面是使用demo02 logger程式碼範例:

#-*- coding:utf-8 -*-

import logging

import logging.config

if __name__ == ‘__main__‘:

    logging.config.fileConfig("logger.conf")

    logger = logging.getLogger("demo02")

    logger.debug(u‘這是demo02 debug日誌記錄‘)

    logger.info(‘u‘這是demo02 info日誌記錄‘)

    logger.warning(u‘這是demo02 warning日誌記錄‘)

  結束語

本文從日誌的基本應用到更進階的應用方式層層推進進行示範,當然了在實際的自動化測試實踐中,還需要對logging模組進行更進階的封裝以提高其複用性,達成高可用的目的。對於測試人員而言更需要加強編程基本功,提升測試技術能力,更加靈活的應用各種基礎技術。

 

 

轉自:開優測試

 

python selenium2樣本 - 日誌管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.