【Python】pytestの基本:テストの書き方入門

Python

こんにちは、かつコーチです。

「関数を書いたら、動くかどうか毎回print()で確認している」

そんな方は多いのではないでしょうか。

print()での確認は手軽ですが、確認項目が増えるほど見落としが増えます。

この記事では、Pythonで最も使われるテストツールpytestの基本を解説します。

インストールから、テスト関数の書き方、assertの使い方まで、実際に手を動かしながら学べる内容です。

読み終える頃には、自分の書いたコードを自動でチェックできるようになります。

pytestとは?

なぜテストコードが必要なのか

テストコードとは、自分の書いたコードが正しく動くかを自動で確認するコードのことです。

手動確認だと、修正のたびに毎回同じ動作チェックを繰り返す必要があります。

テストコードがあれば、コマンド一発で全項目を再チェックできます。

機能を追加したときに、「前に作った部分が壊れていないか」もすぐ分かります。

pytestとは何か

pytestは、Pythonで最も広く使われているテストフレームワークです。

標準ライブラリのunittestより書き方がシンプルで、少ないコードでテストを表現できます。

assertという標準の構文だけでテストが書けるのも、pytestの大きな特徴です。

基本の書き方・実装手順

手順1:pytestをインストールする

まずは仮想環境を有効化してから、pipでインストールします。

pip install pytest

インストールできたか、バージョン確認で確かめておきましょう。

pytest --version
pytest 8.3.3

手順2:テスト対象の関数を用意する

例として、税込価格を計算する関数を用意します。

calc.pyというファイルに保存してください。

# calc.py
def add_tax(price, tax_rate=0.1):
    """税込価格を計算する"""
    if price < 0:
        raise ValueError("価格は0以上である必要があります")
    return int(price * (1 + tax_rate))

手順3:テスト関数を書く

pytestでは、test_で始まる関数名がテストとして認識されます。

同じフォルダにtest_calc.pyというファイルを作成します。

# test_calc.py
from calc import add_tax


def test_add_tax_normal():
    """通常価格の税込計算が正しいか"""
    assert add_tax(1000) == 1100


def test_add_tax_custom_rate():
    """税率を指定した場合の計算が正しいか"""
    assert add_tax(1000, tax_rate=0.08) == 1080


def test_add_tax_negative_price():
    """マイナス価格でエラーになるか"""
    import pytest as pt
    with pt.raises(ValueError):
        add_tax(-100)

手順4:テストを実行する

同じフォルダで、次のコマンドを実行します。

pytest

すべて成功すると、次のように表示されます。

collected 3 items

test_calc.py ...                                                       [100%]

3 passed in 0.02s

.が1つ、1つのテストの成功を表しています。

つまずきやすい設定・注意点

pytestは、ファイル名とテスト関数名の命名規則に強く依存しています。

  • ファイル名:test_で始まるか、_testで終わる
  • 関数名:test_で始まる

この規則から外れると、テストが存在していても実行対象として認識されません。

よくあるつまずきポイント・エラー対処

テスト関数名の付け忘れでテストが実行されない

筆者が初めてpytestを使ったとき、テストを書いたのに0件しか実行されず戸惑いました。

❌ Before(認識されない書き方)

# test_calc.py
from calc import add_tax


def check_add_tax():
    assert add_tax(1000) == 1100

実行すると、次のように表示されます。

collected 0 items

no tests ran in 0.01s

関数名がcheck_add_taxとなっており、test_から始まっていないため、pytestがテストとして拾ってくれません。

✅ After(正しい書き方)

# test_calc.py
from calc import add_tax


def test_add_tax():
    assert add_tax(1000) == 1100

関数名をtest_add_taxに変えるだけで、テストとして認識されるようになります。

「テストを書いたはずなのに0件」というときは、まず関数名の先頭を確認するのがおすすめです。

まとめ

この記事のポイント

  • テストコードがあれば、修正のたびの手動確認を自動化できる
  • pytestはpip install pytestでインストールできる
  • ファイル名はtest_から始め、テスト関数名もtest_で始める
  • assertだけでテストの条件を表現できる
  • テスト関数名を間違えると、テストが0件のまま実行される

次に読むべき記事

  • unittestとpytestの違い・使い分け
  • モックを使ったテストの書き方(unittest.mock)
  • テストカバレッジを計測する方法(pytest-cov)

タグ: Python, 中級者向け, テスト

タイトルとURLをコピーしました