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つ持つ普通の関数です。
# test_math.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5CI/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します。