フレームワークを整える
中級pytest を整える。
= 落ちるテスト(赤)を直して通るテスト(緑)にする往復を、ブラウザだけで体感する
pytest が初めての方は、先に そもそも pytest とは・どんな場面で使うか をどうぞ。
サンプルコード(クリックで2つのタブに挿入)
PYTEST OUTPUT
サンプルを選ぶか自分でコードを書いて「▶ pytest 実行」を押すと、ここに結果が出ます。
そもそも pytest とは
Python のテストを、短く書いて、わかりやすく確かめる道具。
pytest は、Python のコードが意図どおりに動くかを確かめるテストのためのフレームワークです。test_ で始まる関数の中に、assert(「こうなるはず」という主張)を書くだけでテストになり、コマンドで一括して実行できます。
Python には標準で unittest というテストの仕組みもありますが、pytest は書く量が少なく、失敗したときに「何と何が食い違ったか」を詳しく表示してくれます。標準ライブラリではなく、別途インストールして使う外部の道具です。
どこで・どんな場面で使うか
-
関数を直したあとの確認
コードを変えるたびに、前まで動いていた部分が壊れていないかを、ボタン1つで確かめられます。
-
チーム開発の自動チェック
変更をまとめる前に自動でテストを走らせる運用(CI)で、pytest がよく使われます。
-
Web アプリ・API のテスト
Flask や Django などで作ったアプリの、各 URL が正しい応答を返すかの確認にも使えます。
-
データ処理・分析コードの確認
集計や変換の結果が想定どおりかを、サンプルデータで確かめる用途にも向きます。
-
Python の仕事での基本
Python を使う開発現場では、テストが書けることが前提になっている場面が多くあります。
なぜ覚えておくと得か
- 直すのが怖くなくなる。テストがあれば、変更後に壊れた場所をすぐ見つけられます。
- 書く量が少ない。専用のクラスを作らず、普通の関数と assert だけで始められます。
- 現場で通じる共通言語。Python の開発では、テストを書く道具として広く使われています。
上の練習場で、わざと落ちるテストを動かして赤を見て、直して緑にする往復を試してみてください。
使い方
「赤→緑」の往復で、テストの感覚をつかむ。
- 1
通るテスト(緑)— まずは正しい期待値で
assert 実際の値 == 期待する値が成立すればテストは通る(緑)。 - 2
落ちるテスト(赤)— pytest が差分を教えてくれる
assert が失敗すると、pytest は実際の値と期待値の差分を表示する。「②落ちるテスト」で実際に見てみましょう。
- 3
parametrize — 同じテストを複数パターンで
@pytest.mark.parametrizeで入力と期待値の組を並べれば、同じテスト関数のまま何通りも検査できる。 - 4
pytest.raises — 「例外が起きること」もテストできる
with pytest.raises(例外の型):の中で例外が起きればテストは成功、起きなければ失敗になる。
💡 初回は Pyodide(Python WASM)に加えて pytest パッケージの読み込みで数秒〜十数秒かかります。2 回目以降はキャッシュから瞬時にロード。 書いたコードと実行結果は、どこにも送信されません(すべてブラウザ内で実行)。
🌐 「▶ pytest 実行」を押した最初の1回だけ、Python の実行環境(Pyodide 0.28.0)と pytest パッケージを配信元の
cdn.jsdelivr.net から取得します。
これはプログラムを受け取るだけの通信で、あなたが書いたコードや実行結果が送られることはありません。
このツールについて
テストは「動くこと」を確認するコード。まず赤(落ちるテスト)を見て、直して緑(通る)にする——その往復を、ブラウザの中だけで何度でも試せます。
テストを書いて実行できる練習場。まず落ちるテスト(赤)を見て、直して通るテスト(緑)にする往復をブラウザだけで体感。parametrize・pytest.raises まで。
主な機能
- calc.py(テスト対象)と test_calc.py(テスト)の2タブ
- 通る/落ちる/parametrize/pytest.raises の4サンプル
- 落ちたテストは assert の差分をそのまま表示
- Pyodide 上で pytest を実行・送信ゼロ
よくある質問
Q. pytest とは何ですか?
A. Python のテストを書いて実行するためのツールです。「実際の値が期待した値と一致するか」を assert で書き、通れば緑、落ちれば赤で教えてくれます。
Q. なぜテストコードとテスト対象を分けて書くのですか?
A. 「何を検査したいか」と「実際の処理」を分けることで、対象コードを直したときにテストがそのまま検査してくれるからです。
Q. parametrize や pytest.raises は何のためにありますか?
A. parametrize は同じテストに複数の入力を流し込んで1つずつ書く手間を省くもの、pytest.raises は「エラーが起きること自体」を検査するものです。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。
続けて整える
この内容は、研修でも扱っています
totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。