1. 程式人生 > >python nose測試框架全面介紹七--日誌相關

python nose測試框架全面介紹七--日誌相關

問題分析 odin message handlers 自己 file trac 配置 statement

引:

之前使用nose框架時,一直使用--logging-config的log文件來生成日誌,具體的log配置可見之前python nose測試框架全面介紹四。

但使用一段時間後,發出一個問題,生成的報告只有錯誤提示,沒有日誌,查看nose的官網,nose默認支持將日誌顯示的,如下:

技術分享圖片

腳本如下:

#coding:utf-8
‘‘‘
Created on 2016年6月22日
@author: huzq
‘‘‘

import logging
from test_case import new
from nose.tools import ok_
from nose.tools import eq_
import nose import os from nose.plugins.attrib import attr from nose.plugins.skip import SkipTest import sys #TODO:jfjfjf log = logging.getLogger(__name__) def test_learn_1(): u‘‘‘測試取消‘‘‘ print xxx log.info("afdffdfdfd") #raise SkipTest #print "test_lean_1" #pass #assert 1==2
eq_(7, 9, msg=u"錯誤") test_learn_1.slow=1 @attr(mode=2) def test_lean_2(): u‘‘‘測試失敗‘‘‘ try: print "test_learn_2" ok_(4==3,msg="xxx") print sys._getframe().f_code.co_name except Exception: print sys._getframe().f_code.co_name @attr(mode
=2) def test_lean_3(): u‘‘‘測試成功‘‘‘ pass def setUp(): #set_trace() global a print "0001 test setUp" #addCleanup(aa) def tearDown(): print "0001 test teardown" a=resource setup b=c #assert a==b print a

可以看出,報告中將日誌及print的日誌也都打印出來了。

問題分析


但存在一個問題是,日誌日誌,格式好像不太美觀

那我們就重溫下nose的Logcapture: capture logging during tests

支持以下幾個參數:

--nologcapture
Disable logging capture plugin. Logging configuration will be left intact. [NOSE_NOLOGCAPTURE]
不抓log

--logging-format=FORMAT
Specify custom format to print statements. Uses the same format as used by standard logging handlers. [NOSE_LOGFORMAT]
自定義log格式

--logging-datefmt=FORMAT
Specify custom date/time format to print statements. Uses the same format as used by standard logging handlers. [NOSE_LOGDATEFMT]
log時間格式

--logging-filter=FILTER
Specify which statements to filter in/out. By default, everything is captured. If the output is too verbose, use this option to filter out needless output. Example: filter=foo will capture statements issued ONLY to foo or foo.what.ever.sub but not foobar or other logger. Specify multiple loggers with comma: filter=foo,bar,baz. If any logger name is prefixed with a minus, eg filter=-foo, it will be excluded rather than included. Default: exclude logging messages from nose itself (-nose). [NOSE_LOGFILTER]
log過濾

--logging-clear-handlers
Clear all other logging handlers

--logging-level=DEFAULT
Set the log level to capture

接下來我們就通過實例來演示下

--nologcapture 這個就不解釋了,不會抓取日誌

--logging-format

默認格式是:

logformat = %(name)s: %(levelname)s: %(message)s

可以看出,默認格式是沒有日期的,我們可以重新定義日期

nosetests -v   test_case_0001.py l --logging-format=%(asctime)s:%(name)s:%(levelname)s:%(message)s

nosetests -v   test_case_0001.py  --logging-format="%(asctime)s:%(name)s:%(levelname)s: %(message)s"

註意,帶空格的日期必須要雙引號擴起來,單引號不行

結果如下

技術分享圖片

--logging-filter

將日誌過濾,比如要有多文件要運行時,不同的日誌要過濾,可以使用該參數

nosetests -v   test_case_0001.py  --logging-filter=root

只過濾root的日誌

使用文件來定義參數


在參數一多時,每次運行要輸那麽多參數,不方便,可以使用文件形式來定義

nose執行時,默認使用home目錄下的.noserc或者nose.cfg文件,也可以自己寫文件如下

[nosetests]
verbosity=2
logging-format=%(asctime)s%(name)s:%(levelname)s:%(message)s

執行時,使用-c指定文件即可

nosetests -v  test_case_0001.py -c nose.ini

遺留問題:

在運行測試時,本想同時使用--logging-file及--logging-format來同時在運行時顯示日誌及運行後抓取日誌至報告。

但--logging-file是最高級別,會忽略其它日誌配置。

so,想同時看日誌或結果報告中帶日誌只能二選一了。

python nose測試框架全面介紹七--日誌相關