姬長信(Redy)

python – py.test将消息和测试结果/断言记录…


我现在开始使用py.test进行新项目.我们正在配置Linux服务器,我需要编写一个脚本来检查这些服务器的设置和配置.我认为py.test是实现这些测试的好方法,直到现在它才能正常工作.

我现在面临的问题是,在这些测试结束时我需要一个日志文件,显示每个测试的一些日志消息和测试结果.对于日志消息,我使用logger:

logging.basicConfig(filename='config_check.log', level=logging.INFO)
pytest.main()
logging.info('all done')

作为示例测试我有这个:

def test_taintedKernel():
    logging.info('checking for tainted kernel')
    output = runcmd('cat /proc/sys/kernel/tainted')
    assert output == '0', 'tainted kernel found'

所以在我的日志文件中我想要一个像这样的输出:

INFO:root:checking for tainted kernel
ERROR:root:tainted kernel found
INFO:root:next test
INFO:root:successful
INFO:root:all done

但是我无法将测试结果输入到日志文件中,而是在测试后获得stdout上的标准输出:

======================================= test session starts =======================================
platform linux2 -- Python 2.6.8 -- py-1.4.22 -- pytest-2.6.0
collected 14 items 

test_basicLinux.py .............F

============================================ FAILURES =============================================
_______________________________________ test_taintedKernel ________________________________________

    def test_taintedKernel():
        logging.info('checking for tainted kernel')
        output = runcmd('cat /proc/sys/kernel/tainted')
>       assert output == '0', 'tainted kernel found'
E       AssertionError: tainted kernel found

test_basicLinux.py:107: AssertionError
=============================== 1 failed, 13 passed in 6.07 seconds ===============================

对于我的脚本用户来说,这可能会让人感到困惑.我试图进入logger和pytest_capturelog,因为这里经常提到它,但我确实做错了,因为我没有得到它.也许只是缺乏理解这是如何工作的.希望你能给我一些暗示.如果这里遗漏了什么,请告诉我.

在此先感谢您的帮助,

斯蒂芬