本文へスキップ
totonoe.tech

フレームワークを整える

中級

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. 1

    通るテスト(緑)— まずは正しい期待値で

    assert 実際の値 == 期待する値 が成立すればテストは通る(緑)。

  2. 2

    落ちるテスト(赤)— pytest が差分を教えてくれる

    assert が失敗すると、pytest は実際の値と期待値の差分を表示する。「②落ちるテスト」で実際に見てみましょう。

  3. 3

    parametrize — 同じテストを複数パターンで

    @pytest.mark.parametrize で入力と期待値の組を並べれば、同じテスト関数のまま何通りも検査できる。

  4. 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®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト