Skip to content
Latchkey

スモークテストとは?

スモークテストは、build の最も重要な部分がそもそも動作するかを素早く浅く確認するもので、より深いテストに投資する前に実行します。

この名前はハードウェアに由来します: 装置に電源を入れて煙が出るかを見るのです。ソフトウェアにおけるスモークテストとは、build が根本的に壊れていないこと、つまり起動すること、ホームページが読み込まれること、コアフローが応答することを確認する少数の素早いチェックの集まりで、より遅く徹底的なテストが実行される前に行われます。素早く失敗する安価なゲートです。

スモークテストが確認すること

スモークテストは深さではなく幅をカバーします。振る舞いを網羅的に検証することなく、ひと握りの重要なパス、つまりアプリが起動する、ログインが機能する、主要なエンドポイントが 200 を返す、といった点に触れます。スモークテストが失敗すれば、その build は到着時点で死んでおり、完全なスイートを実行する意味はありません。

スモークと完全なスイートの比較

完全な回帰スイートや統合スイートは徹底的ですが遅いものです。スモークテストはその逆で、高速かつ浅いものです。両者は補完的です。まずスモークで壊滅的な破壊を早期に捉え、スモークが通ればより深いスイートを実行します。

簡単な例

deploy の後、スモークテストはヘルスエンドポイントと重要なページにアクセスし、さらに先へ昇格させる前にサービスが稼働していることを確認します。

A post-deploy smoke test
test("app is alive", async () => {
  const res = await fetch("/health");
  expect(res.status).toBe(200);
});

スモークテストが実行されるタイミング

  • CI の早い段階、より遅いテストステージの前。
  • deploy の後、環境が健全であることを確認するため。
  • build を次のステージに昇格させる前のゲートとして。
  • push の前の素早いローカルなサニティチェックとして。

CI でのスモークテスト

スモークステージを最初に置くことで、pipeline は壊れた build で素早く失敗でき、完全なスイートを実行するコストを節約できます。スモークテストはごく小さいため、高速な runner では数秒で完了し、開発者に build が少なくとも実用可能であるというほぼ即時のフィードバックを与えます。

重要なポイント

  • スモークテストは、build が根本的に壊れていないことを素早く確認します。
  • 浅くて高速で、より深いテストスイートの前に実行されます。
  • 最初のスモークステージにより、CI は動かない build で素早く失敗できます。

関連ガイド