首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖python日志记录以提高测试效率

覆盖python日志记录以提高测试效率
EN

Stack Overflow用户
提问于 2011-08-24 16:04:13
回答 1查看 1K关注 0票数 5

在许多情况下,使用python的logging包会显着降低单元测试的速度。假设日志记录对于测试不是必需的,那么您将如何干净利落地覆盖每个测试的logging,以便有效地跳过日志命令。

假设使用多个记录器,如下所示:

代码语言:javascript
复制
logger1 = logging.getLogger('logger1')
logger2 = logging.getLogger('logger2')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-24 16:29:00

选项1:

日志记录可以通过调用disabled来实现

代码语言:javascript
复制
logging.disable(logging.CRITICAL)

并重新打开

代码语言:javascript
复制
logging.disable(logging.NOTSET)

然而,即使在禁用日志记录之后,诸如logger.info之类的日志记录语句仍然会导致Python在到达isEnabledFor方法之前执行一些属性查找和函数调用。不过,这可能已经足够好了。

选项2:

使用mocking:

代码语言:javascript
复制
class MockLogger(object):
    def debug(msg, *args, **kwargs): pass
    def info(msg, *args, **kwargs): pass
    def warn(msg, *args, **kwargs): pass
    def error(msg, *args, **kwargs): pass
    def critical(msg, *args, **kwargs): pass

class Test(unittest.TestCase):
    def test_func(self):
        _logger1=testmodule.logger1
        _logger2=testmodule.logger2
        testmodule.logger1=MockLogger()
        testmodule.logger2=MockLogger()
        # perform test
        testmodule.logger1=_logger1
        testmodule.logger2=_logger2

这将把日志记录语句所消耗的时间减少到执行一次属性查找和一次(noop)函数调用所需的时间。如果这不能令人满意,我认为剩下的唯一选择就是删除日志语句本身。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7172290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档