为什么pytest调用重复的方法

时间:2017-12-07 08:00:41

标签: python pytest self

为什么会这样? 重复通话,因为我添加了" self.log"

import logging, logging.handlers
class TestCase:

    def setup_method(self,test_method):
            self.log = logging.getLogger('test')
            self.log.addHandler( logging.StreamHandler())

    def test_one(self):
            log = self.log
            log.info('one')
    def test_two(self):
            log = self.log
            log.info('two')

控制台

$pytest -s
=========================================== test session starts ===========================================
platform darwin -- Python 3.6.2, pytest-3.3.1, py-1.5.2, pluggy-0.6.0
rootdir: /Users/taeun/dev/workspace/test/pytest-test/tests, inifile:
collected 2 items

test_one.py one
.two
two
.                                                                                      [100%]
有谁帮助过我?

1 个答案:

答案 0 :(得分:3)

这是因为您要在StreamHandlerwhich will be called once for each test run中向记录器添加setup_method。如果你同时运行两个测试会发生什么:

  1. setup_method被调用,StreamHandler的一个实例被添加到记录器
  2. test_one运行,记录器有一个处理程序,将消息one发送到stdout
  3. setup_method第二次被调用,将{{1>}的另一个实例添加到记录器处理程序
  4. StreamHandler运行,但现在记录器有两个处理程序,都将消息test_two发送到stdout
  5. 要解决此问题,您可以清除two中的处理程序,以确保每次测试运行时都有一个setup_method

    StreamHandler

    或者您将记录器配置声明为一次性操作(如果您问我,这是一个更清洁的解决方案):

    class TestCase:
    
        def setup_method(self):
            self.log = logging.getLogger('test')
            self.log.handlers = [h for h in self.log.handlers
                                 if not isinstance(h, logging.StreamHandler)]
            self.log.addHandler(logging.StreamHandler())
    
            ...
    
相关问题