🐡

conftest.pyを小分けにする

2022/07/14に公開

conftest.pyを小分けにする

conftest.pyに定義するフィクスチャも増えてくると次のようにファイルを分割したくなる。

tests
|-- conftest.py
`-- fixtures
  |-- module1.py
  `-- module2.py

インポートによる問題

# conftest.py
from .fixtures.module1 import *
from .fixtures.module2 import *

こうすることで分けたモジュールから定義したフィクスチャを持ってこれるが、アスタリスクでインポートすると望んでいないものもインポートされてしまうので避けたい。
そもそもアスタリスクによるインポートはコード検証ツールに引っかかる可能性が高い。

pytest_pluginsによるロード

pytest_pluginsは元々はpytestのプラグイン作成で利用するフックなのだが、これによる解決もできる。

pytest_plugins = (
    "tests.fixtures.module1",
    "tests.fixtures.module2",
)

サブパッケージで分ける

公式ドキュメントにドストライクなconftest.py: sharing fixtures across multiple filesという箇所がある。

これは各サブパッケージにconftest.pyを配置すると、そのパッケージのテストが実行される際に利用されるという仕組みによるもの。

tests
|-- conftest.py
|-- module1
|  |-- conftest.py
|  `-- test_module1.py
`-- module2
   |-- conftest.py
   `-- test_module2.py

こういった構成の場合、module1.test_module1を実行した時のconftestはtests.module1.conftest < tests.conftestとなる。

GitHubで編集を提案

Discussion