スポンサーリンク

💡 はじめに

pytestは非常に強力なPythonのテストフレームワークです。最大の利点の一つは、コマンド一つでテストファイルを自動的に見つけて実行してくれる機能です。この記事では、なぜpytestとコマンドを実行するだけでテストが走るのか、その裏側にあるテスト検出(Test Discovery)の仕組みを解説します。

🔍 テスト検出のメカニズム

pytestがテストを自動で実行できるのは、実行時に指定されたパス(通常は実行したディレクトリ)から再帰的にファイルをスキャンし、pytest独自の命名規則(Naming Conventions)に一致するものをテストとして収集するからです。

1. テストファイルの検出規則

pytestは、以下の命名規則に一致するファイルをテストモジュールとして扱います。

  • test_*.py
  • *_test.py

💡 メモ: pytestを実行すると、カレントディレクトリとそのサブディレクトリ全体を再帰的に検索します。

2. テスト項目(関数・クラス・メソッド)の検出規則

テストモジュール(.pyファイル)内で、pytestは以下の規則に一致する項目を個々のテストとして収集します。

項目命名規則詳細
テスト関数test_で始まる関数def test_addition(): など
テストクラスTestで始まるクラスclass TestUserManagement: など
テストメソッドテストクラス内のtest_で始まるメソッドdef test_login(self): など

⚠️ 注意点(テストクラス): pytestがテストクラスとして認識するのは、Testで始まり、継承されていない(またはunittest.TestCaseを継承していない)クラスです。

スポンサーリンク

⚙️ 検出規則のカスタマイズ方法

デフォルトの命名規則は非常に便利ですが、プロジェクトの慣習に合わせて変更することも可能です。プロジェクトのルートディレクトリに設定ファイルを配置することで、これらのルールを上書きできます。

一般的な設定ファイルは以下の通りです。

  • pytest.ini
  • pyproject.toml
  • setup.cfg

pytest.iniによるファイル名変更の例

pytest.iniファイルに以下の設定を追加すると、「check_で始まるファイル」をテストファイルとして検出するようになります。

# pytest.ini
[pytest]
python_files = check_*.py

この柔軟性のおかげで、pytestは非常にクリーンなコマンドライン操作(例:pytest)と、高度なカスタマイズの両立を実現しています。

📚 まとめ

pytestは、test_」というプレフィックスを持つファイル、クラス、関数を自動で探してくれることで、テスト実行を極めてシンプルにしています。この命名規則の統一再帰的なスキャンこそが、pytestの使いやすさの核心です。

この技術メモが、あなたの開発の一助となれば幸いです。


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事