【パイテスト】

pytest とは?

最終更新:
💡 Pythonの動きを確かめ、違いを見つける

Pythonのテストを収集・実行し、成功や失敗を報告するフレームワーク。関数とassert文で確認を書け、fixtureで準備・後片付けを管理する。複数の入力を試す機能も標準で備える。

📌 このページのポイント
pytest:期待する動きを確かめるtest_sample.pydef test_add():assert 2 + 3 == 5収集テストを探す実行assertで確認結果この例は成功pytestで実行fixtureで準備と後片付けを管理
小さなテストの例。結果が期待と違えば失敗として報告される。
ひよこ ひよこ
Pythonの処理が正しく動くか、毎回手で確かめるの?
ペンギン先生 ペンギン先生
確認をテストとして書くと、pytestで繰り返し実行できるよ。たとえばtest_sample.pyに、test_addという関数を書いて、その中で「assert 2 + 3 == 5」と確認する。pytestは対象のテストを収集し、結果を報告するんだ。
ひよこ ひよこ
assertって何をするの?
ペンギン先生 ペンギン先生
条件が成り立つかを確認するPythonの文だよ。期待と違えばテストが失敗する。pytestは失敗した式の値なども表示するので、違いを調べやすい。ただし、書いた確認の範囲での成功だから、テストが通ることとバグが一切ないことは別だよ。
ひよこ ひよこ
毎回テスト用のデータを用意するのは大変そう。
ペンギン先生 ペンギン先生
fixtureに準備の処理をまとめられるよ。テスト関数の引数へfixtureの名前を書くと、その値を使える。yieldを使うfixtureなら、後ろに後片付けを置ける。テストごとなど、fixtureを共有する範囲も設定できるんだ。
ひよこ ひよこ
入力を変えて、同じ確認を何度もしたい!
ペンギン先生 ペンギン先生
標準のpytest.mark.parametrizeで、入力と期待する結果の組を渡せるよ。追加のプラグインは要らない。別の機能が必要ならプラグインを利用できる。conftest.pyにはfixtureやフックを置き、テストの集まりで使えるようにできるんだ。
ひよこ ひよこ
前にunittestやnoseで書いたテストも使える?
ペンギン先生 ペンギン先生
unittest.TestCaseのテストを実行する機能はあるよ。ただし通常のpytest関数と同じように引数へfixtureを渡すことなどはできず、機能に制約がある。一方、nose向けのサポートはpytest 8.0で削除されたので、そのまま使えるとは考えず、対応する書き方へ移そう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「pytest」って出てきたら「Pythonの動きを確かめ、結果を報告するテストツール」と思えばだいたいOK!
📖 おまけ:英語の意味
「pytest」 = Python向けのテストツールの名前
💬 公式の表記は小文字のpytest。Pythonで書いたテストを収集・実行するツールだよ。

参考資料

← 用語集にもどる