2017-12-07 34 views
3

왜 이런 일이 발생합니까? 중복 호출은 내가pytest가 중복 메소드를 호출하는 이유

코드

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%] 

사람이 나를 도와 "self.log"를 추가하기 때문에?

+0

소스 코드를 이미지가 아닌 텍스트로 붙여주십시오. –

+0

방금 ​​전에 업데이트! 고마워요 – taeun

답변

3

setup_method, which will be called once for each test run에 로거에 StreamHandler을 추가했기 때문입니다. 라고

  1. setup_method

    StreamHandler의 한 인스턴스가 로거에
  2. test_one 실행을 추가 로거는
  3. setup_method는 stdout에 메시지 one를 전송 한 핸들러를 가지고 : 당신이 모두 테스트를 실행하면 어떻게됩니까 로거 처리기에
  4. test_two 실행을 StreamHandler의 다른 인스턴스를 추가, 두 번째 시간을 요구하지만, 지금 로거는 모두 메시지를 보내는 두 개의 핸들러를 가지고

이를 극복하기 위해, 당신은 당신이 각 테스트 실행에 하나 StreamHandler이 있는지 확인하기 위해 setup_method에서 핸들러를 정리 할 수 ​​있습니다 표준 출력 :

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()) 

     ... 

또는들은 1 년으로 로거 구성을 선언 (당신이 저에게 묻는다면 훨씬 더 깨끗한 해결책) :

class TestCase: 

    @classmethod 
    def setup_class(cls): 
     logging.getLogger('test').addHandler(logging.StreamHandler()) 

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

    ... 
+0

오 세상에 ... 정말 친절하게 대답 해 주셔서 감사합니다. (_ _) – taeun

+1

@ 도와 드리면 기쁩니다! 코드를 밖으로 시도하십시오, 귀하의 질문에 해결 될 경우, 당신은 대답을 수락 고려할 수 있습니다 ... – hoefling