pythonpytest测试框架介绍五---⽇志实时输出同样的,在使⽤pytest进⾏⾃动化测试时,需要将实时⽇志打印出来,⽽不是跑完后才在报告中出结果。
不过,好在pytest在3.3版本开始,就⽀持这⼀功能了,⽽不⽤再像nose⼀样,再去装第三⽅插件。
⽹上也有相关实时的⽇志输⼊说明,但我尝试后,不是我想要的,⽐如:
看看我们下⾯这样⼀段代码,以unittest模式写的:
#coding:utf-8
'''
Created on 2017年8⽉31⽇
@author: huzq
'''
from__future__import print_function import pytest
from unittest import TestCase
from selenium import webdriver
import logging,sys
log = Logger(__name__) class TestClass(TestCase):
@classmethod
def setUpClass(cls):
log.info('setup_class()')
cls.driver = webdriver.Firefox()
("www.baidu")        log.info("xxxxxxxxxxxxxxx")
@classmethod
def teardown_class(cls):
log.info('teardown_class()')
def setUp(self):
log.info('\nsetup_method()')
self.addCleanup(self.screen_shot)
def screen_shot(self):
log.info("yyyyyyyyyyyyyy")
log.info("sereen_shot")
def qqq(self):
log.info("xxxxxxxxxxxqqqq")
assert 4==5
#def teardown_method(self, method): def tearDown(self):
log.info("ffjiafuiodafdfj___teardown")
@pytest.mark.slow
def test_7(self):
import time
time.sleep(10)
log.info('- test_7()')
@pytest.mark.qq
def test_4(self):
import pdb;pdb.set_trace()
def test_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 = 1
log_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
结果如下:
python怎么读取py文件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"
结果就会像下⾯这样

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。