Skip to content
Latchkey

pytest vs unittest: CIにどちらのPythonテストランナーを使うべきか?

unittestはPythonに同梱されています。pytestはより簡潔なテスト、強力なfixture、豊富なプラグインエコシステムを追加し、さらにunittestのテストも実行できます。

unittestはPython組み込みのxUnitスタイルのフレームワークです。pytestはサードパーティのフレームワークで、素のassert構文、fixture、パラメータ化、大きなプラグインエコシステムを備え、unittestスタイルのテストを検出して実行することもできます。

unittestpytest
Pythonに同梱ありなし (pip install)
テストスタイルクラス + self.assert*素のassert + 関数
FixturesetUp/tearDown強力なfixtureシステム
パラメータ化手動 / subTest組み込み (@parametrize)
プラグイン / 並列実行限定的豊富 (pytest-xdist など)

CIでの挙動

pytestは通常、開発者体験とCIの使い勝手で優れています。簡潔なテスト、パラメータ化、fixture、そして並列実行のためのpytest-xdistやcoverageのためのpytest-covといったプラグインです。既存のunittestのテストも実行できるため、段階的に導入できます。unittestはインストール不要で、追加の依存関係をゼロにしたい場合や標準ライブラリに制約される場合には良い選択肢です。

不安定なテスト

pytest-xdistを使って大きなスイートを並列化し、一過性の失敗を再試行できるよう計画しましょう (例: pytest-rerunfailures)。不安定なテストがビルドを失敗させないためです。より高速なマネージドrunnerは、長いPythonテストマトリクスを短縮します。

結論

簡潔なテスト、fixture、パラメータ化、並列プラグインが欲しいなら: pytest (unittestのテストも実行します)。追加の依存関係ゼロや標準ライブラリのみが必要なら: unittest。ほとんどのチームはCIでpytestを選びます。

関連ガイド