2017-01-04 12 views
0

私はpytestを使ってテストメソッドを実行しています。そして、私は各テストメソッドのログファイルを実装しようとしています。現在実行中のテストを見つける方法

次のテストモジュールをテスト方法とみなします。

#content of test_module.py 
def test_1(log): 
    log.info('inside test_1') 
    util.abc(log) 


def test_2(log): 
    log.info('inside test_2') 
    util.abc(log) 

私のutilモジュールの内容は次のとおりです。

#content of util.py module 
def abc(log): 
    # perform some logic here and calculate result.  
    log.info('the value is: %s' % result) 

そして、ここでは私のconftest.pyファイルです。

#conftest.py 
@pytest.fixture() 
def log(request): 
    test_path = request.node.parent.name.strip(".py") 
    test_name = request.node.name 
    node_id = request.node.nodeid 
    logs_dir = pkg_resources.resource_filename("test_results", "logs") 
    log_file_path = '%s/%s' % (logs_dir, test_path) 
    if not os.path.exists(log_file_path): 
     os.makedirs(log_file_path) 
    logger_obj = logger.make_logger(test_name, log_file_path, node_id) 
    yield logger_obj 
    handlers = logger_obj.handlers 
    for handler in handlers: 
     handler.close() 
     logger_obj.removeHandler(handler) 

テストモジュールtest_module.pyは、tests /ディレクトリの下にあります。したがって、py.test testsを使用してテストを実行すると、test_1とtest_2メソッドが実行され、test_results /ディレクトリのテスト固有情報が各テスト固有のログファイルに記録されます。 test_1.logとtest_2.log。

これは私のために働く。しかし、問題は、テストメソッドからログオブジェクトをテストメソッドから呼び出す各メソッドに渡さなければならないことです。

この例では、私がutil.abcメソッドを呼び出すとき、私はテストメソッドからログオブジェクトを渡しています。したがって、utilモジュール内のメソッドabcは、どのログファイルをログに記録するかを知っています。しかし、私はテストメソッドから呼び出すすべてのメソッドにこのようにログオブジェクトを渡したくありません。私はもっ​​と良い方法があるはずだと信じています。どのようなテストメソッドがメソッドabcを呼び出すかを知る方法があるなら、私はこのようにログオブジェクトを渡す必要はないと思っています。誰かがこれを理解する方法を知っていますか?またはこれを達成するための他のアイデア?ありがとうございました!

答えて

1

まあ、いつでもloggerモジュールを作成することができます。あなたの試験方法では、loglogger.log

#content of test_module.py 
def test_1(log): 
    logger.log = log 
    log.info('inside test_1') 
    util.abc() 

def test_2(log): 
    logger.log = log 
    log.info('inside test_2') 
    util.abc() 

にして、通常の方法では、ちょうど私が順次私のテストを実行する場合、これは仕事だと思う、それ

def abc(): 
    # perform some logic here and calculate result.  
    logger.log.info('the value is: %s' % result) 
+0

を呼び出し割り当てます。しかし、私はそれらを並行して実行する予定です。 – sridhar249

+0

@ sridhar249 pytestを並列に実行したことはありませんが、マルチプロセッシングに基づいていれば(マルチスレッドではない可能性が高いです)、 'logger.log'を共有するべきではないと思います。 –

+0

@ sridhar249私は、https://pypi.python.org/pypi/pytest-xdistの文書をチェックしました。すべてがサブプロセスに基づいているので、解決策が機能するはずです。 –

関連する問題