为什么会这样? 重复通话,因为我添加了" 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%]
有谁帮助过我?
答案 0 :(得分:3)
这是因为您要在StreamHandler
,which will be called once for each test run中向记录器添加setup_method
。如果你同时运行两个测试会发生什么:
setup_method
被调用,StreamHandler
的一个实例被添加到记录器test_one
运行,记录器有一个处理程序,将消息one
发送到stdout setup_method
第二次被调用,将{{1>}的另一个实例添加到记录器处理程序StreamHandler
运行,但现在记录器有两个处理程序,都将消息test_two
发送到stdout 要解决此问题,您可以清除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())
...