nikkie-ftnextの日記

イベントレポートや読書メモを発信

最近書いてる pyproject.toml の [tool.pytest] 〜Agent Development Kit と一緒に使う pytest の設定例〜

はじめに

七尾百合子さん、お誕生日 300日目 おめでとうございます! nikkieです。

最近pyproject.tomlに pytest の設定を書くようになりました。

目次

きっかけは11月の堅牢.py

しゅんけーさんの発表を聞いて、pytest はタスクランナーとして優秀なのでもっと使っていこうと思いました。
仕事でもプライベートでも現在は ADK (Agent Development Kit) が多いのですが、そこに pytest をゴリゴリ入れています1
エージェントの手動動作確認の代わりに、ADKInMemoryRunnerrun_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.<ツール名>]と他のツールと設定の書き方が揃い、書きやすくなりました。

[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 autoaddoptsに追加します。
(とはいえ、-n autoを指定するとき-sは意味がなくなるので、併用できないのが少し困りポイント)

filterwarnings

pytest はテスト実行時の警告をレポートの最後にまとめて表示してくれますよね。
ライブラリの実験的(experimental)機能を使うと出力される警告は非表示でよいと気づき、設定しました。

docs.pytest.org

[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 で開発する際には、addoptsfilterwarningspythonpathを指定しています。
これにより、テスト実行時の設定が再現される恩恵を享受しています。
『テスト駆動Python 第2版』8章から、testpathsも指定するとよさそうでした。

P.S. pytest 9 でついにsubTestが!


  1. ADK では pytest でエージェントの評価もできます
  2. v1.18.0 からです。https://github.com/google/adk-python/commit/0487eea2abcd05d7efd123962d17b8c6c9a9d975
  3. site-packages にインストールした場合
  4. 標準から逸脱していてめちゃめちゃ世話が焼けるので、明確に ADK の設計上の問題点だと思っています。editable install するようにしてほしいですね(もしくは Django レベルまで洗練させる)