私のチームと私は、Pytest + Jenkinsを使用して製品テストを自動化しています。 pythonの標準ログライブラリを使用して、テスト中、各テストの前後などに適切なログメッセージを取得しています。ログの複数のレイヤーがあり、エラー、警告、情報をログアウトします。 DEBUG。ロガーのデフォルト値はINFOです。テストのプライマリセットアップでロガーオブジェクトを作成し、作成された各オブジェクトに渡すので、すべてのログが同じロガーに送られます。
これまでのところ、新しい機能やテストを開発しているときは、ローカルでDEBUGモードで作業しており、SVNに新しいコードを送信するときにINFOに戻しますが、CLIを使用してログレベルを変更するオプションを追加しようとしていますが、簡単に実装できるものは見つかりませんでした。フィクスチャの使用を検討しましたが、私が理解していることから、これらはテスト自体のためのものであり、セットアップ/ティアダウンフェーズのためのものではなく、ログはテストに関係なく作成されます。ログレベルの変更をサポートするためにCLIコマンドにPytestオプションを追加する方法に関するハックやアイデアはありますか?
pytestコマンドラインオプション と コマンドラインの例からのpythonログレベル を組み合わせると、次のことができます。
以下をconftest.py
に追加します。
import pytest
import logging
def pytest_addoption(parser):
parser.addoption(
"--log", action="store", default="WARNING", help="set logging level"
)
@pytest.fixture
def logger():
loglevel = pytest.config.getoption("--log")
logger = logging.getLogger(__name__)
numeric_level = getattr(
logging,
loglevel.upper(),
None
)
if not isinstance(numeric_level, int):
raise ValueError('Invalid log level: %s' % loglevel)
logger.setLevel(numeric_level)
return logger
次に、テストでlogger
フィクスチャをリクエストします
def test_bla(logger):
assert True
logger.info("True is True")
次に、次のようにpytestを実行します
py.test --log INFO
ログレベルをINFO
に設定します。
--log-cli-level=INFO
をお試しください
お気に入り:
pytest -vv -s --log-cli-level=INFO --log-cli-format="%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" --log-cli-date-format="%Y-%m-%d %H:%M:%S" ./test_file.py
これは現在、pytestに組み込まれています。テストを実行するときは、コマンドラインに「--log-level =」を追加するだけです。例えば:
pytest --log-level=INFO
ドキュメントの更新はここにあります: https://docs.pytest.org/en/latest/logging.html