from 30

30歳からwebエンジニアになったけど、思ったよりも苦しいので、その苦闘の記録をば

PytestでStepInやbreakpointを使う

経緯

普段の開発ではpytestを使用して、TDDを行っている。

pythonのテストといえば、python標準のunittestもあるが、テスト結果の表示や制御のしやすさからpytestを選択する人が周りでは多いように思う。

で、pytestを使用しているが、今のプロジェクトではconftestでtime freezeやmotoを読み込んでいて、

テストのコンテキストでいろいろとモジュールが用意されていないとテストができない。

vscodeの機能でpytestを実行する機能もあるが、テストディスカバリーがうまく動かずという状態だった。

ということで、自分の悪い癖だが、我慢すればprintデバッグでも問題ないのでずっと我慢していた。

とはいえ、テストの中にデバッガーを仕掛けておかないと、値の検証やなんかがしづらい。

ということで、breakpointやstep実行の仕方について触れたい。

方法

方法はいたって簡単。

pytestを実行している時にpdb(python標準のデバッガー)が使えるのでそれを使うだけである

breakpointを使用したいファイルで

import pdb

その後、breakpointを使用したい箇所で以下のように記載

pdb.set_trace()

pytestを実行すると以下のようなpromptが開くので、

(pdb) s # ステップイン
(pdb) n # ステップオーバー
(pdb) c # 次のブレークポイントへ
(pdb) {変数名} # 変数の表示

と言った感じで使えます。

まとめ

我慢は禁物でちゃんとやり方を調べるべき。 そして、テスティングツールとして当然breakpointの当て方はあるので、ちゃんと公式ドキュメントを読むべきだった。