Skip to content
Latchkey

pytestとは?Pythonのテストフレームワークを解説

pytestは最も人気のあるPythonのテストフレームワークです。テストを見つけて実行し、読みやすい失敗出力を出し、1行のチェックから大規模なスイートまで対応します。

pytestはPythonのテストを書くことを手間の少ないものにします。テストは名前が「test」で始まる単なる関数で、素のassert文を使い、pytestがそれらを検出して豊富なレポートとともに実行します。そのfixtureシステムとpluginエコシステムにより、ほとんどのPythonプロジェクトでデフォルトの選択肢となっています。

pytestとは

pytestはPython向けのテストフレームワーク兼コマンドラインrunnerです。テストのファイルと関数を自動検出し、assert文を書き換えて詳細な失敗メッセージを生成し、fixture、パラメータ化、そして大きなpluginエコシステム (カバレッジ、並列実行、モックなど) をサポートします。

fixtureとアサーション

setupやteardownのメソッドの代わりに、pytestはfixtureを使います。fixtureはテストの依存関係 (データベース接続や一時ディレクトリ) を提供する関数で、名前によってテストへ注入されます。アサーションは素の「assert」キーワードを使い、pytestは式を内省して、失敗したときに何が異なっていたかを正確に示します。

テスト例

テストはアサーションを1つ持つ普通の関数です。

A minimal pytest test
# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5

CI/CDでの役割

pytestはほとんどのPython pipelineにおけるtest段階です。何らかの失敗があるとゼロ以外の終了コードを返し、それによりCIのjobがfailします。pytest-xdistのようなpluginはtestを並列に実行してスイートを短縮し、pytestはCIのダッシュボード向けにJUnit XMLを出力できます。大規模なスイートはCIのボトルネックになりがちで、より高速なマネージドrunnerで実行し、workerに分割することでフィードバックを速く保てます。

代替ツール

unittestはクラスベースのxUnitスタイルを持つ標準ライブラリのフレームワークです。nose2は古いnoseの後継です。pytestは、その簡潔な構文、強力なfixture、そして幅広いpluginエコシステムにより支配的です。

重要なポイント

  • pytestは素のassert文でPythonのテストを検出して実行します。
  • fixtureはテストの依存関係を注入し、pluginはカバレッジや並列実行を追加します。
  • 失敗時にはゼロ以外で終了し、それによりCIのjobがfailします。

関連ガイド