python实时读取日志并打印关键字怎么实现_python pytest测试框架介绍五---日志实时输出...
同樣的,在使用pytest進行自動化測試時,需要將實時日志打印出來,而不是跑完后才在報告中出結果。
不過,好在pytest在3.3版本開始,就支持這一功能了,而不用再像nose一樣,再去裝第三方插件。
網上也有相關實時的日志輸入說明,但我嘗試后,不是我想要的,比如:pytest輸出Log
看看我們下面這樣一段代碼,以unittest模式寫的:
#coding:utf-8
'''Created on 2017年8月31日
@author: huzq'''
from __future__ importprint_functionimportpytestfrom unittest importTestCasefrom selenium importwebdriverimportlogging,syslog= logging.getLogger(__name__)classTestClass(TestCase):
@classmethoddefsetUpClass(cls):
log.info('setup_class()')
cls.driver=webdriver.Firefox()
cls.driver.get("http://www.baidu.com")
log.info("xxxxxxxxxxxxxxx")
@classmethoddefteardown_class(cls):
log.info('teardown_class()')defsetUp(self):
log.info('\nsetup_method()')
self.addCleanup(self.screen_shot)defscreen_shot(self):
log.info("yyyyyyyyyyyyyy")
log.info("sereen_shot")defqqq(self):
log.info("xxxxxxxxxxxqqqq")assert 4==5
#def teardown_method(self, method):
deftearDown(self):
log.info("ffjiafuiodafdfj___teardown")
@pytest.mark.slowdeftest_7(self):importtime
time.sleep(10)
log.info('- test_7()')
@pytest.mark.qqdeftest_4(self):importpdb;pdb.set_trace()
self.result=self.addCleanup(self.qqq)
log.info('- test_4()')deftest_5(self):
log.info('- test_4()')assert 4==5
如果沒有加日志實時輸出會是怎么樣的,如下:
可以看出,日志在過程中沒有實時輸出,在實際跑項目錄,這個有點不太好看。
解決:
看看pytest是怎么解決的呢。
首先pytest是從pytest.ini中讀取log_cli配置的,默認是關閉的。如上圖中顯示,我們的pytest.ini文件是空的
再看看pytest -h文件:
關于log的help有以下:
--no-print-logs disable printing caught logs on failed tests.--log-level=LOG_LEVEL
logging level used by the logging module--log-format=LOG_FORMAT
log format as used by the logging module.--log-date-format=LOG_DATE_FORMAT
log date format as used by the logging module.--log-cli-level=LOG_CLI_LEVEL
cli logging level.--log-cli-format=LOG_CLI_FORMAT
log format as used by the logging module.--log-cli-date-format=LOG_CLI_DATE_FORMAT
log date format as used by the logging module.--log-file=LOG_FILE path to a file when logging will be written to.--log-file-level=LOG_FILE_LEVEL
log file logging level.--log-file-format=LOG_FILE_FORMAT
log format as used by the logging module.--log-file-date-format=LOG_FILE_DATE_FORMAT
log date format as used by the logging module.
View Code
然后你還會發現一行:
[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:
所以,有兩種方法解決
1) 在當前文件夾下寫pytest.ini或tox.ini或setup.cfg文件,然后將日志相關寫在里面,如下:
[pytest]
log_cli= 1log_cli_level=INFO
log_cli_format= %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format=%Y-%m-%d %H:%M:%S
這時就可以正常打印日志出來。
2)直接用pytest -o方式重寫,這個功能在pytest 3.4之后才實現,如下
pytest pytest_lean2.py -o log_cli=true -o log_cli_level=INFO
結果如下:
update更新下:
實際在項目過程中,實時日志需要時間及文件名還有行號,可在后面加這樣的參數:
-vv -o log_cli=true -o log_cli_level=INFO --log-date-format="%Y-%m-%d %H:%M:%S" --log-format="%(filename)s:%(lineno)s %(asctime)s %(levelname)s %(message)s"
結果就會像下面這樣
總結
以上是生活随笔為你收集整理的python实时读取日志并打印关键字怎么实现_python pytest测试框架介绍五---日志实时输出...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于CSS中的相对路径和绝对路径
- 下一篇: jquery mobile自定义图标实现