こんにちは、かつコーチです。
「関数を書いたら、動くかどうか毎回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, 中級者向け, テスト
