python nose測試框架全面介紹七--日誌相關
阿新 • • 發佈:2017-11-27
問題分析 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==2eq_(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測試框架全面介紹七--日誌相關