2017-12-07 9 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

これは、StreamHandlersetup_methodwhich will be called once for each test runのロガーに追加するためです。あなたは両方のテストを実行した場合はどうなります:

  1. setup_methodが呼び出され、StreamHandlerの1つのインスタンスが
  2. test_one実行ロガーに追加され、ロガーは
  3. setup_methodですがstdoutにメッセージoneを送る1つのハンドラを持っています別のインスタンスtest_two
  4. ロガーハンドラへ StreamHandlerのランを追加して、第二の時間を求め、今ロガーは、二つのハンドラを有し、両方のメッセージを送信 twoこれを克服するために

stdoutに、あなたは、各テストの実行に1 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()) 

     ... 

かワンとしてロガーの設定を宣言

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

関連する問題