テストピラミッドとは?
テストピラミッドは、テストスイートをどうバランスさせるかの指針です。高速なユニットテストを多く、インテグレーションテストを少なく、遅いエンドツーエンドテストをほんのひと握りにします。
テストピラミッドは、スイートを高速で信頼できるものに保つためのシンプルなメンタルモデルです。三角形として描かれ、安価で高速なユニットテストを広い土台に、より遅いインテグレーションテストを中間に、高コストなエンドツーエンドテストを狭い頂点に置きます。その形が、ほとんどのテストがどこに属すべきかを教えてくれます。
3つの層
- 土台: 多くのユニットテスト、高速で隔離されている。
- 中間: コンポーネントを一緒にチェックする、より少ないインテグレーションテスト。
- 頂点: 重要なユーザーフローをカバーする、わずかなエンドツーエンドテスト。
- 上位の層ほど、テストあたり遅く、高コストで、フレーキーです。
形が重要な理由
高速なテストは高速なフィードバックを与えます。カバレッジの大半が素早いユニットテストから来るなら、スイートは数秒で実行され、失敗を明確に指し示します。代わりに遅くフレーキーなE2Eテストに頼ると、CIはもたつき騒がしくなり、グリーンなチェックへの信頼を蝕みます。
アイスクリームコーンのアンチパターン
チームがピラミッドを逆さにし、大半が手動およびエンドツーエンドのテストでユニットテストが少ないと、「アイスクリームコーン」を形成します。そのようなスイートは遅く、脆く、保守が難しいです。ピラミッドはその是正策です。バグを捕らえられる最も安価な層へカバレッジを押し下げましょう。
これは指針であり法則ではない
正確な比率はシステム次第です。UI中心のアプリはより多くのブラウザテストを必要とし、純粋なライブラリはほぼすべてユニットテストかもしれません。永続的な原則は、その振る舞いを意味のある形で検証する最も高速なテストを好むことです。
ピラミッドとCIの速度
健全なピラミッドは、テストの大半が高速なため、CIの総時間を低く保ちます。より遅い頂点の層こそ、並列化が最も報われる場所です。Latchkeyは高速なrunnerでテストを並列に実行することでスイート全体を加速し、これは特に重いインテグレーションとE2Eの層で役立ちます。
重要なポイント
- ピラミッドはユニットテストを多く、インテグレーションを少なく、E2Eをわずかにすることを好みます。
- より高速で下層のテストは、より速く明快なフィードバックを与えます。
- 逆さの「アイスクリームコーン」は遅く脆いので避けましょう。