相关疑难解决方法(0)

5409
推荐指数
22
解决办法
75万
查看次数

Python记录到StringIO处理程序

我有一个python测试,我想测试日志记录是否正常工作.例如,我有一个创建用户的函数,最后日志记录将响应写入日志文件.

logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
handler = logging.handlers.WatchedFileHandler('mylogfile.log')
formatter = logging.Formatter('%(asctime)s: %(message)s',
                              '%d/%b/%Y:%H:%M:%S %z')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('Some log text')
Run Code Online (Sandbox Code Playgroud)

在我的测试用例中,我想将日志输出发送到StringIO.

class MyTest(unittest.TestCase):
    def setUp(self):
        stream = StringIO()
        self.handler = logging.StreamHandler(stream)
        log = logging.getLogger('mylogger')
        log.removeHandler(log.handlers[0])
        log.addHandler(self.handler)

    def tearDown(self):
        log = logging.getLogger('mylogger')
        log.removeHandler(self.handler)
        self.handler.close()
Run Code Online (Sandbox Code Playgroud)

问题是,我不确定我应该如何测试我的记录器是否正常工作.

python logging unit-testing stringio

14
推荐指数
1
解决办法
9143
查看次数

如何pythonically有部分互斥的可选参数?

举一个简单的例子,取一个可以返回其属性的class 椭圆,例如面积A,周长C,长轴/短轴a/b,偏心率e等.为了得到它,显然必须提供其两个参数以获得所有其他参数,虽然作为一个特殊情况,只提供一个参数应该假设一个圆圈.三个或更多一致的参数应该产生警告但是有效,否则显然会引发异常.

所以有效Ellipses的一些例子是:

Ellipse(a=5, b=2)
Ellipse(A=3)
Ellipse(a=3, e=.1)
Ellipse(a=3, b=3, A=9*math.pi)  # note the consistency
Run Code Online (Sandbox Code Playgroud)

而无效的将是

Ellipse()
Ellipse(a=3, b=3, A=7)
Run Code Online (Sandbox Code Playgroud)

因此构造函数要么包含许多=None参数,

class Ellipse(object):
    def __init__(self, a=None, b=None, A=None, C=None, ...):
Run Code Online (Sandbox Code Playgroud)

或者,可能更明智,一个简单的**kwargs,可能添加提供a,b作为位置参数的选项,

class Ellipse(object):
    def __init__(self, a=None, b=None, **kwargs):
        kwargs.update({key: value
                       for key, value in (('a', a), ('b', b))
                       if value is not None})
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但现在实际实现,即确定提供哪些参数,哪些参数不是,并根据它们确定所有其他参数,或在需要时检查一致性.

我的第一种方法是许多人的简单而乏味的组合

if 'a' in kwargs:
    a = kwargs['a'] …
Run Code Online (Sandbox Code Playgroud)

python arguments optional-parameters

12
推荐指数
5
解决办法
1375
查看次数

在 Pycharm 下运行 django 测试的日志输出

django.test.TestCase在 PyCharm 下运行/调试单个测试时,不会显示 logging.logger 消息。我已经尝试logging.basicConfig(level=logging.DEBUG)按照在 PyCharm 中进行单元测试时如何查看日志消息的建议进行设置但这也无济于事。我怀疑这可能是 django 的TestCase设置干扰。

在测试设置或运行器配置中是否有其他方法可以为测试运行打开调试日志记录?

我现在在 settings.py 中设置的日志记录是:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/var/log/em/mcqueen-dev.log',
            'when': 'midnight',
            'formatter': 'verbose',
        },
    },
    'formatters': {
        'verbose': {
            'format': '%(asctime)s.%(msecs).03d - %(process)d - %(thread)d - %(levelname)8s - %(filename)s:%(lineno)d - %(funcName)s - %(message)s'
        },
        'simple': {
            'format': '%(asctime)s - %(levelname)s %(message)s'
        },
    }, …
Run Code Online (Sandbox Code Playgroud)

django logging unit-testing pycharm

11
推荐指数
2
解决办法
1万
查看次数