kakakakakku blog

Weekly Tech Blog: Keep on Learning!

自信を持って pytest を活用するためのノウハウが凝縮された「テスト駆動 Python 第2版」を読んだ

「テスト駆動 Python 第2版」を読んだ📕

仕事で pytest を使ってて,もっと自信を持って書けるようになりたいな〜と思っていたら本書を見つけてさっそく読んでみた.pytest の機能・記法・設定・Tips などの理解が深まって本当に読んで良かった❗️フィクスチャ・パラメータ化・モック・プラグイン活用など,今まで何となく書いてたところを自信を持って書けるようになって,仕事で pytest を書くのが楽しくなった🦄

もちろん pytest の公式ドキュメントを読むべきだし,本書の内容の多くは公式ドキュメントにも載っているとは思うけど,本書の翻訳はとても読みやすく,pytest の全体像をサッと把握できて,また Cards というサンプルアプリケーションを題材に実際に pytest を試しながら読み進められるから本書を読む価値はあると思う.個人的には本当に読んで良かったな〜と感じてる👍

docs.pytest.org

目次

目次をザッと見て,気になる Chapter があったら読んでみると良いかと👌

  • Part.1: pytest の主力機能
    • Chapter.1: はじめての pytest
    • Chapter.2: テスト関数を書く
    • Chapter.3: pytest のフィクスチャ
    • Chapter.4: 組み込みフィクスチャ
    • Chapter.5: パラメータ化
    • Chapter.6: マーカー
  • Part.2: プロジェクトに取り組む
    • Chapter.7: 戦略
    • Chapter.8: 設定ファイル
    • Chapter.9: カバレッジ
    • Chapter.10: モック
    • Chapter.11: tox と継続的インテグレーション
    • Chapter.12: スクリプトとアプリケーションのテスト
    • Chapter.13: テストの失敗をデバッグする
  • Part.3: ブースターロケット
    • Chapter.14: サードパーティプラグイン
    • Chapter.15: プラグインの作成
    • Chapter.16: 高度なパラメータ化

本書で使う Cards アプリケーションのコードは原著サイトから ZIP でダウンロードできる.

pragprog.com

Chapter.4

pytest で一時的なディレクトリを作れる組み込みフィクスチャ tmp_path(function スコープ)と tmp_path_factory(session スコープ)はさっそく使えそうだった.

docs.pytest.org

他にも Chapter.4 で紹介されてた組み込みフィクスチャは便利で capsys は別途試して簡単にまとめた.

kakakakakku.hatenablog.com

Chapter.8

pytest.initestpaths を設定するのは明確にはなるけど冗長だよなぁ〜と思っていたらtestpaths を指定しておくと pytest 開始時の時間を少し節約できる」と書いてあって発見だった👀ある程度プロジェクトの規模が大きくないと差は出なさそうではあるけど知れて良かった情報の一つだった👍

[pytest]
testpaths = tests

docs.pytest.org

Chapter.12

スクリプトとテストコードを src ディレクトリと tests ディレクトリに分割したら import できずにハマるというのはよくあると思う💨僕自身も最初ハマって先輩に相談して教えてもらった経緯もあったりする.本書の第2版では Chapter.12 に Python の検索パスの解説が追加されていて良かった❗️本書を読んで pytest の import にハマる人が減ると良いなぁ〜 \( 'ω')/

.
├── pytest.ini
├── src
│   └── hello.py
└── tests
    └── test_hello.py

本書では pytest.inipythonpath を設定する例が紹介されていた.

[pytest]
pythonpath = src

もちろん pytest.ini ではなく pyproject.toml に設定することもできる👌

[tool.pytest.ini_options]
pythonpath = "src"

Chapter.14

pytest プラグインは今までほとんど活用できてなかった💨 pytest サイトの Plugin List を見ながら気になったプラグインをさっそく導入してみて便利❗️

github.com

github.com

github.com

github.com

Chapter.16

@pytest.mark.parametrize でパラメータ化するのは普段から使っているけど,idids にテスト識別子を設定するという Tips は今まで活用できてなかった.確かにパラメータ化したテストで失敗すると判別しにくく感じるときもあった.さっそく仕事でも使うようにした👌

docs.pytest.org

その他

他に読書メモに残したことを箇条書きにしておく❗️

  • pytest --setup-show でフィクスチャの実行順をログに出力できる
  • pytest --tb=no でテスト失敗時のトレースバックを非表示にできる
  • pytest --showlocals でテスト失敗時にローカル変数を表示できる
  • conftest.py でフィクスチャを共有できる
  • @pytest.fixture の名前を変更できる
  • requests をモックできる Responses が便利そう

誤植

出版社サイトに掲載されていない誤植を見つけたのでメモしておく📝

  • P.120: 対処できるしょうか。対処できるでしょうか。
  • P.122: 簡単かかもしれないが簡単かもしれないが

www.shoeisha.co.jp

X ポスト🔗