conftest
解決
最も侵襲性の低い解決策はconftest.py
、repo/
ディレクトリに指定された空のファイルを追加することです。
$ touch repo/conftest.py
それでおしまい。sys.path
をマングリングしたり、ドラッグすることを忘れないPYTHONPATH
で、またはそれが属していないディレクトリに配置するためのカスタムコードを記述する必要はありません(ただし、 Apteryxの回答で提案されているように__init__.py
使用することは良い解決策です!)。python -m pytest
その後のプロジェクト ディレクトリ:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
説明
pytest
テスト コレクションでモジュールを検索してconftest
カスタム フックとフィクスチャを収集し、それらからカスタム オブジェクトをインポートするためにpytest
、 の親ディレクトリを に追加しますconftest.py
(sys.path
この場合はrepo
ディレクトリ)。
その他のプロジェクト構造
他のプロジェクト構造がある場合はconftest.py
、パッケージのルート ディレクトリ (パッケージを含むが、パッケージ自体ではないため、を含まないディレクトリ)に__init__.py
を配置します。次に例を示します。
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
レイアウト
このアプローチはsrc
レイアウトで使用できますが(ディレクトリconftest.py
に配置src
):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
に追加すると、レイアウトPYTHONPATH
の意味と利点が損なわれることに注意してください。src
インストールされたパッケージではなく、リポジトリからコードをテストすることになります。それを行う必要がある場合、ディレクトリはまったく必要ないかもしれませんsrc
。
ここからどこへ
もちろん、conftest
モジュールはソース コードの発見に役立つ単なるファイルではありません。ここで、フレームワークのプロジェクト固有の機能強化とpytest
テスト スイートのカスタマイズがすべて行われます。ドキュメント全体に散らばっているモジュールpytest
に関する多くの情報があります。で始まる: ディレクトリごとのローカルプラグインconftest
conftest.py
conftest
また、SO にはモジュールに関する優れた質問があります。py.test では、conftest.py ファイルの使用は何ですか?