nikkie-ftnextの日記

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

さらば pytest-watch、こんにちは pytest-watcher

pytest関連で最近知ったことです。

目次

pytest-watch

先日名古屋のPyCon mini 東海でも発表1したように、私の開発スタイルはpytestを使ったテスト駆動開発です。
テスト駆動開発では、TODOリストから1つ選んでまずテストを書き、それを通す実装を書く(そしてリファクタリングを考える)わけですが、pytestコマンドを叩く回数がめちゃめちゃ多いです。

ここを自動化するツールとして pytest-watch を知っていました。
ファイルの変更を検知して、自動でpytestコマンドを流してくれます。
ptwコマンドを叩いた後はエディタに向かい、ターミナルに流れるテスト結果のにだけ注目していればよいという状況になります(Red -> Green)

過去のみんなの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月時点)


  1. 予告 ワークショップ資料