Skip to content
Latchkey

pytest vs nose: Pythonのtest runnerの比較

pytestはモダンで活発にメンテナンスされているPythonのtest runnerで、nose(およびnose2)はより古く、オリジナルのnoseはメンテナンスされていません。

pytestは事実上のPythonテストフレームワークで、簡潔なassertベースのテスト、強力なフィクスチャ、パラメータ化、膨大なプラグインエコシステムを備えています。noseはunittestをテスト探索で拡張し広く使われましたが、オリジナルのnoseはメンテナンスされておらず、nose2の活動も限定的です。新しいプロジェクトはpytestを使い、古いnoseスイートは通常移行されます。

pytestnose
メンテナンス活発noseはメンテナンスなし; nose2は限定的
フィクスチャ強力、合成可能基本的
プラグイン大きなエコシステム少ない
アサーション素のassert(書き換え済み)unittestスタイル
最適な用途すべての新しいPythonプロジェクトレガシースイートのみ

CIでは

pytestは豊富なレポート、xdistによる並列化、coverageプラグインとともにCIにきれいに統合されます。noseは動作しますが、メンテナンスとモダンなプラグインを欠きます。新しいプロジェクトにはpytestが明確な選択で、noseスイートのpytestへの移行が一般に推奨されます。どちらの場合も高速なインストールのためにPython環境をcacheしましょう。

高速化する

pip/poetryの環境をcacheし、pytest-xdistで並列化します。どちらもCI runnerで動作し、高速なmanaged runnerはインストールとテストのステップを短縮します。

結論

新しいPythonプロジェクトにはpytestを使いましょう - モダンでメンテナンスされ、はるかに豊富です。noseはまだ移行していないレガシースイートにのみ重要です。pytestへのその移行を計画しましょう。

関連ガイド