💡 はじめに
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.inipyproject.tomlsetup.cfg
pytest.iniによるファイル名変更の例
pytest.iniファイルに以下の設定を追加すると、「check_で始まるファイル」をテストファイルとして検出するようになります。
# pytest.ini [pytest] python_files = check_*.py
この柔軟性のおかげで、pytestは非常にクリーンなコマンドライン操作(例:pytest)と、高度なカスタマイズの両立を実現しています。
📚 まとめ
pytestは、「test_」というプレフィックスを持つファイル、クラス、関数を自動で探してくれることで、テスト実行を極めてシンプルにしています。この命名規則の統一と再帰的なスキャンこそが、pytestの使いやすさの核心です。
この技術メモが、あなたの開発の一助となれば幸いです。


