私は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を呼び出すかを知る方法があるなら、私はこのようにログオブジェクトを渡す必要はないと思っています。誰かがこれを理解する方法を知っていますか?またはこれを達成するための他のアイデア?ありがとうございました!
を呼び出し割り当てます。しかし、私はそれらを並行して実行する予定です。 – sridhar249
@ sridhar249 pytestを並列に実行したことはありませんが、マルチプロセッシングに基づいていれば(マルチスレッドではない可能性が高いです)、 'logger.log'を共有するべきではないと思います。 –
@ sridhar249私は、https://pypi.python.org/pypi/pytest-xdistの文書をチェックしました。すべてがサブプロセスに基づいているので、解決策が機能するはずです。 –