pytest関連で最近知ったことです。
目次
pytest-watch
先日名古屋のPyCon mini 東海でも発表1したように、私の開発スタイルはpytestを使ったテスト駆動開発です。
テスト駆動開発では、TODOリストから1つ選んでまずテストを書き、それを通す実装を書く(そしてリファクタリングを考える)わけですが、pytestコマンドを叩く回数がめちゃめちゃ多いです。
ここを自動化するツールとして pytest-watch を知っていました。
ファイルの変更を検知して、自動でpytestコマンドを流してくれます。
ptwコマンドを叩いた後はエディタに向かい、ターミナルに流れるテスト結果の色にだけ注目していればよいという状況になります(Red -> Green)
『Clean Craftsmanship』で学んでる細かくRedとGreenを行き来するTDD、
— にっP (EXPO DAY2 ス17b ミリシタ 野辺見ればコミュ 感想本) (@ftnext) 2022年9月17日
テスト実行コマンドを叩く回数も増えるわけですが、ファイルが変更されたら勝手にテスト実行で解決!https://t.co/UH1eL4UZcU
VSCodeで保存時フォーマットされるし、いまRedかGreenかすぐ分かるの本当に快適。heaven!😆
あとは型
過去のみんなのPython勉強会でもpytest-watchは紹介されています。
みんなのPython勉強会#88のやっとむさんによる「手軽なpytestでテストを活用しよう!」、テストコードに関係する知識が結び付き、刺激的でした #stapy - nikkie-ftnextの日記
よーし、pytest-watch導入するぞ〜
あれ? インストールできたけどptwがエラー!?
実はメンテナンス終了していたpytest-watch
なんと!
たしかに最終コミットは2019年でした。
https://github.com/joeyespo/pytest-watch/commit/17375a1cf5be6d4dd30a583ffad61a0083d91b94
そして初めてpytest-watcherの名を知ります
pytest-watcher
https://pypi.org/project/pytest-watcher/
Unfortunately, pytest-watch is no longer maintained and doesn't work for many users. This project provides an alternative for it.
こんな感じで動作します。
コマンドはptw <ウォッチするパス> [<ランナーのpytestの引数>]という書式でした。
% ptw . -vv pytest-watcher version 0.4.3 Runner command: pytest Waiting for file changes in /... [pytest-watcher] Current runner args: [-vv] Controls: > Enter : Invoke test runner > r : reset all runner args > c : change runner args > f : run only failed tests (--lf) > p : drop to pdb on fail (--pdb) > v : increase verbosity (-v) > e : Erase terminal screen > q : quit pytest-watcher
デバッガのような形で立ち上がっていて、ファイルを変更するか、Enterを押すかでテストが実行されます。
起動中に引数を変えることもできるんですね!
抜けるときはqです。
pytest-watchとの違いはここにありました。
https://github.com/olzhasar/pytest-watcher/tree/v0.4.3?tab=readme-ov-file#differences-with-pytest-watch
pytest-watcherでは
- 第1引数としてパスを指定する
- デフォルトではテストを直ちに実行しない(Enterキーを押して実行する)
--nowを渡して起動すると直ちに実行する
終わりに
📣pytest-watchの代わりに、pytest-watcherを使いましょう!(2024年12月時点)
- 予告 ワークショップ資料 ↩