はじめに
七尾百合子さん、お誕生日 300日目 おめでとうございます! nikkieです。
最近pyproject.tomlに pytest の設定を書くようになりました。
目次
- はじめに
- 目次
- きっかけは11月の堅牢.py
- pytest 9 から [tool.pytest]
- [tool.pytest]に書いてます
- 『テスト駆動Python 第2版』8章
- 終わりに
- P.S. pytest 9 でついにsubTestが!
きっかけは11月の堅牢.py
しゅんけーさんの発表を聞いて、pytest はタスクランナーとして優秀なのでもっと使っていこうと思いました。
仕事でもプライベートでも現在は ADK (Agent Development Kit) が多いのですが、そこに pytest をゴリゴリ入れています1。
エージェントの手動動作確認の代わりに、ADK のInMemoryRunnerのrun_debug()メソッド2を pytest から実行して自動化を始めてみています。
なので、この記事は ADK で pytest を使っての話で、注目する設定値には偏りがあります。
pytest 9 から [tool.pytest]
https://docs.pytest.org/en/stable/changelog.html#pytest-9-0-0-2025-11-05
In
pyproject.toml, the native TOML configuration is under the[tool.pytest]table.The
[tool.pytest.ini_options]table remains supported,
[tool.<ツール名>]と他のツールと設定の書き方が揃い、書きやすくなりました。
pytest 8 -> 9の中で
— nikkie(にっきー) / にっP (@ftnext) 2025年12月19日
pyproject.tomlに[tool.pytest.ini_options]の代わりに
[tool.pytest]と書けるようになってる!https://t.co/hC9pmafev1
後方互換性を保つので前者もサポートされています
[tool.pytest]に書いてます
addopts
https://docs.pytest.org/en/stable/reference/reference.html#confval-addopts
InMemoryRunner.run_debug()は多数print()するので、pytest -sのようなオプションを指定するとエージェントの動きが分かります。
毎回指定する代わりに、pyproject.tomlに書いておけばよいと気づきました。
共有コードベースの場合、他の開発者がオプションに注意を払わなくても、テスト実行時の設定が再現されます。
並列実行できる pytest-xdist も使っている場合、-n autoをaddoptsに追加します。
(とはいえ、-n autoを指定するとき-sは意味がなくなるので、併用できないのが少し困りポイント)
filterwarnings
pytest はテスト実行時の警告をレポートの最後にまとめて表示してくれますよね。
ライブラリの実験的(experimental)機能を使うと出力される警告は非表示でよいと気づき、設定しました。
[tool.pytest] filterwarnings = [ 'ignore:\[EXPERIMENTAL\]:UserWarning' ]
'ignore::UserWarning'だと全てのUserWarningが非表示になります。
[と]はメタ文字だったのでエスケープして、[EXPERIMENTAL]を含むUserWarningを非表示にしています。
pythonpath
https://docs.pytest.org/en/stable/reference/reference.html#confval-pythonpath
Python プロジェクトを開発する時、普段は editable install していて、テスト時に問題なく import できるので、pythonpathは私は普通指定しません。
ADK では命名規則に沿ったディレクトリ(=エージェントの実装)を用意するだけでよく editable install は求められません3。
ADK がエージェントを実行時にインポートするのですが、何も設定しないとモジュール検索パスに見つからず、ImportError となります。
そこで、しょうがなく ADK のためにpythonpathを指定しています4
『テスト駆動Python 第2版』8章
testpaths
記事執筆に当たって「第08章 設定ファイル」を確認したところ、testpathsも指定するとよさそうでした。
testpaths設定では、コマンドラインでファイルまたはディレクトリの名前を指定しなかった場合にテストをどこで探せばよいかを指定できる。(Kindle版 p.236)
testpathsを指定しておくと開始時の時間を少し節約できる。(Kindle版 p.237)
終わりに
2025年11月の pytest 9 からpyproject.tomlに[tool.pytest]とも書けるようになりました。
ADK で開発する際には、addopts・filterwarnings・pythonpathを指定しています。
これにより、テスト実行時の設定が再現される恩恵を享受しています。
『テスト駆動Python 第2版』8章から、testpathsも指定するとよさそうでした。
P.S. pytest 9 でついにsubTestが!
そして、pytest 9から標準ライブラリunittestのsubTest()がサポートされたー!!!!
— nikkie(にっきー) / にっP (@ftnext) 2025年12月19日
Python歴8年程度の中で、これずっとサポートされず溝が残り続けるんじゃないかと思ってきました。
快挙じゃんhttps://t.co/NWfp9nAYqZ