【Python】pytestとは?使い方や活用シーン、注意点までわかりやすく解説!

Pythonでテストを自動化する際に欠かせないライブラリのひとつが pytest(パイテスト) です。

シンプルな記述で強力なテストが書けるため、初心者からプロの開発者まで幅広く利用されています。

この記事では、pytestの基本的な使い方から実務で役立つ注意点まで、初心者向けにわかりやすく解説します。

pytestとは?

pytestは、Python標準ライブラリの unittest よりも「シンプルで直感的にテストが書ける」テストフレームワークです。

テストの自動実行、例外処理の検証、前処理・後処理の共通化など、機能が豊富で、学習コストも低いのが特徴です。

特徴

  • シンプルな構文:関数名を test_ で始めるだけでテストとして認識される
  • assert構文が使える:標準の assert をそのまま利用可能
  • 自動探索機能:特定のフォルダ内のテストを自動で検出・実行
  • 豊富なプラグイン:カバレッジ測定やHTMLレポート出力も簡単に追加できる

pytestの基本的な書き方

たとえば、次のような関数をテストしたいとします。

この関数を pytest でテストする場合は、以下のように書きます。

【ポイント】

  • 関数名を test_ で始めるだけでpytestが自動認識
  • assert で期待値と実際の値を比較
  • 例外が発生するかどうかも pytest.raises() で簡単に確認できる

pytestの実行方法

pytestを実行するには、コマンドラインで次のように入力します。

すると、pytestはカレントディレクトリ以下の test_*.py または *_test.py ファイルを自動的に探索して実行します。

実行結果の例:

. は成功を意味し、もしテストが失敗すれば F(Fail)が表示されます。

補足
pytestの探索ルールは pytest.inipyproject.toml でカスタマイズ可能です。

pytestでよく使うオプション

pytestには、実行を便利にするオプションが多数用意されています。

ここではよく使う代表的なものを紹介します。

① 特定のテストファイルを実行

特定ファイルだけを対象にテストしたい場合に使用します。

② 特定のテスト関数を実行

ファイル内の特定の関数のみをピンポイントで実行します。

③ 詳細表示モード(-v)

どのテスト関数が実行されたかを詳細に表示します。

例:

④ print出力を表示(-s)

pytestはデフォルトで print() の出力を抑制します。

デバッグで出力を確認したいときに便利です。

⑤ 実行時間が長いテストを確認(--durations)

実行時間が長かったテスト上位5件 を表示します。

テスト全体のパフォーマンスを分析する際に役立ちます。

pytestの活用例:前処理・後処理を共通化する(fixture)

複数のテストで同じデータや準備処理を使う場合は、@pytest.fixture を使うと便利です。

fixtureは「テストの下準備を自動化する仕組み」です。

【ポイント】

  • @pytest.fixture をつけた関数は「共通の準備処理」を定義する場所になります。
  • テスト関数でその関数名(例:sample_data)を引数として指定すると、自動的にその戻り値が注入されます。
  • 複数のテスト関数で同じfixtureを使い回すことができるので、重複した初期化コードを書く必要がなくなります。

fixtureを使うと、テストごとに同じ準備処理を書く必要がなくなり、コードがすっきりします。

pytestを使うときの注意点

① 命名ルールを守る

pytestが自動でテストを検出するためには、以下の命名規則を守る必要があります。

対象 規則
テストファイル名 test_*.py(推奨)または *_test.py
テスト関数名 test_ で始める
テストクラス名 Test で始める(大文字)

例:tests/test_sample.py

② assert文の使い方に注意

assert で比較する際は、期待値と実際の結果 を明確に書きましょう。

assert True のような無意味なテストは避けます。

③ 外部依存があるテストはmockを使う

API通信やデータベース接続など、外部要因に依存するテストは不安定になりがちです。

unittest.mockpytest-mock を活用して、外部処理をモック化しましょう。

まとめ

今回は pytest を解説しました。

  • pytestはシンプルかつ強力なPython用テストフレームワーク
  • test_ で始まる関数と assert で簡単にテストを書ける
  • -v, -s, --durations などの便利なオプションで柔軟に制御できる
  • pytest.raises()fixture を使えば、例外テストや共通処理も簡単
  • ファイル・関数の命名ルールを守ることが重要

pytestを導入すれば、手動確認を減らして、バグの早期発見や品質向上につながります。

まずは小さな関数のテストから始めて、少しずつ自動化の幅を広げていきましょう。

おすすめの記事