python - 向单元测试中的所有装置添加日志分隔符

标签 python unit-testing logging global fixtures

我正在使用单元测试模块。我需要将setUp、setUpClass、teardown 和teardownClass 日志与单元测试日志分开。输出应该类似于:

**************setting things up**************
INFO: preparing database
INFO: create new users
**************end of setup****************
INFO: starting test one
INFO: ...
**************Cleaning things**************
INFO: delete users
...

我尝试重写unittest.suite中的一些函数(_handleClassSetUp、_handleModuleFixtures、_tearDownPreviousClass)以在调用之前和之后记录分隔符。因此,即使测试用例不包含setUpClass和tearDownClass,分隔符也会被记录。而且,安装和拆卸没有分隔符。

如何做到这一点?

最佳答案

您可以使用元类来实现此功能。它所做的就是查找您提供的函数名称列表,然后将装饰器应用于这些函数。装饰器处理打印入口和导出语句。

import functools
import unittest

FUNCTIONS_TO_LOG = ('setUp', 'tearDown')


def log_start_and_end(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        print '********** start {}'.format(f.__name__)
        f(*args, **kwargs)
        print '********** end {}'.format(f.__name__)
    return wrapper


class LoggingMeta(type):
    def __new__(cls, name, bases, namespace):
        for attr, obj in namespace.items():
            if attr in FUNCTIONS_TO_LOG:
                namespace[attr] = log_start_and_end(obj)
        return super(LoggingMeta, cls).__new__(cls, name, bases, namespace)


class BaseTest(unittest.TestCase):
    __metaclass__ = LoggingMeta

    def setUp(self):
        print 'inside setup'

    def tearDown(self):
        print 'inside teardown'

    def test_test(self):
        print 'inside test'

if __name__ == '__main__':
    unittest.main()

这会产生输出:

********** start setUp
inside setup
********** end setUp
inside test
********** start tearDown
inside teardown
********** end tearDown
.

Ran 1 test in 0.000s

OK

关于python - 向单元测试中的所有装置添加日志分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32610482/

相关文章:

c# - 在 C# 中使用 DI 登录到控制台

java - 如何设置 netbeans 中的记录器将异常信息打印到文件?

python - 分别为多个文件保存每个文件中的多个图形

python - 如何在webapp中实现标签?

javascript - 类型错误 : undefined not a constructor when using beforeEach in jasmine test

PHPUnit 测试 - Controller 或模型

javascript - 错误 : Enzyme Internal Error: unknown composite type undefined

python - CELERY 4.0.2 没有登录文件

python - 多处理进程 os.system ('kill -9 {0}' .format(pid)) 在 Linux 上失败

python - matplotlib 在数据坐标中注释 basemap