python - 即使测试通过,也让 Nose 测试运行器显示日志记录

标签 python unit-testing logging nose

我正在使用 nosetests test.py 来运行单元测试:

import unittest
import logging


class Test(unittest.TestCase):
    def test_pass(self):
        logging.getLogger('do_not_want').info('HIDE THIS')
        logging.getLogger('test').info('TEST PASS')
        self.assertEqual(True, True)

    def test_fail(self):
        logging.getLogger('do_not_want').info('HIDE THIS')
        logging.getLogger('test').info('TEST FAIL')
        self.assertEqual(True, False)

当测试失败时,它会打印出所有的日志信息。我可以使用 --logging-filter 来过滤掉一些记录器:

nosetests test.py --verbosity=2 --logging-filter=test
test_fail (test.Test) ... FAIL
test_pass (test.Test) ... ok

======================================================================
FAIL: test_fail (test.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../test.py", line 14, in test_fail
    self.assertEqual(True, False)
AssertionError: True != False
-------------------- >> begin captured logging << --------------------
test: INFO: TEST FAIL
--------------------- >> end captured logging << ---------------------

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

但是,当测试通过时,它不会显示任何内容。

我希望在测试通过时查看一个特定记录器的输出。我发现我可以使用 -s 来显示所有不完全是我需要的 stdout/stderr 文本 - 它会打印所有内容。我尝试使用各种设置,例如 --nologcapture--nocapture--logging-filter,但我无法得到想要的效果。

最佳答案

nosetests --help 一点也不明显,但答案是 --debug 标志。此标志将您希望从中接收消息的记录器的名称作为参数。

这是 OP 代码的略微修改版本:

# test.py
import unittest
import logging

class Test(unittest.TestCase):
    def test_pass(self):
        logging.getLogger('hide.this').info('HIDE THIS')
        logging.getLogger('show.this').info('TEST PASS')
        self.assertEqual(True, True)

    def test_fail(self):
        logging.getLogger('hide.this').info('HIDE THIS')
        logging.getLogger('show.this').info('TEST FAIL')
        self.assertEqual(True, False)

对于这个例子,nosetests test.py --debug=show.this 应该可以解决问题。

关于python - 即使测试通过,也让 Nose 测试运行器显示日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32565562/

相关文章:

java - log4j2 控制台附加程序是否同步

python - 在气隙机器上的 Anaconda 中安装非 conda 包

python - 如何找到多边形内的点?

python - 如何让 Pycharm 从测试文件夹递归运行所有 python 单元测试

unit-testing - 一个单元如何测试基于过程或基于事件的代码部分

java - 如何使用 Spring Boot/slf4j 在日志文件的名称中包含日期?

C# 条件日志记录/跟踪

python - Django Rest 框架字段是必填错误

python - 如何在 stackoverflow 上测试 Django 问题的答案

java - 模拟restTemplate的问题