こんにちは。よっしーです(^^)
今日は、Smoke testingについてご紹介します。
背景
Dockerで構築したWebアプリの開発環境において、k6を利用した負荷テストについて調査したときの内容を備忘として残しました。
開発環境のソースは下記のリポジトリにあります。
スモークテスト(Smoke testing)
スモークテストは最小の負荷を持っています。これらを実行して、システムが最小負荷の状況下で正常に動作し、ベースラインの性能値を収集することを確認します。
このテストタイプは、わずかな仮想ユーザー(VUs)を使用してテストを実行することから成り立ちます。5つ以上のVUsを使用する場合、それはミニマム負荷テストと考えることができます。
同様に、テストは短い期間で実行されるべきであり、イテレーション数が少ないか、秒から数分間の最大限の期間で実行されるべきです。
一部のテストの文脈では、スモークテストはシェイクアウトテストとも呼ばれます。
スモークテストを実行するタイミング
チームは、テストスクリプトが作成または更新された場合にいつでもスモークテストを実行すべきです。また、関連するアプリケーションコードが更新された場合にもスモークテストを実施するべきです。
スモークテストを最初のステップとして実行することは良い習慣であり、以下の目標を持って行われるべきです:
- テストスクリプトにエラーがないことを確認する。
- 最小の負荷下でシステムがエラー(パフォーマンスまたはシステム関連のエラー)を発生させないことを確認する。
- 最小の負荷下でシステムの応答のベースラインパフォーマンスメトリクスを収集する。
- 単純なロジックで、本番環境のパフォーマンスと可用性をモニタリングするための合成テストとして機能すること。
(注:シェイクアウトテストとスモークテストは、基本的な目標と手法は似ていますが、異なる用語として使用されることがあります。)
考慮事項
スモークテストを準備する際に、以下を考慮してください:
- スクリプトを作成または更新するたびにスモークテストを実行する
スモークテストはテストスクリプトを検証するものであるため、スクリプトを作成または更新するたびにスモークテストを実行しようと心がけましょう。未検証のスクリプトで他のテストタイプを実行することを避けましょう。
- スループットを小さくし、実行時間を短く保つ
テストスクリプトを、少数の仮想ユーザー(2から20人)で実行し、イテレーション数を少なくするか、短い実行時間(30秒から3分)に設定してください。
Smoke testing in k6
import http from 'k6/http';
import { check, sleep} from 'k6';
export const options = {
vus: 3, // Key for Smoke test. Keep it at 2, 3, max 5 VUs
duration: '1m', // This can be shorter or just a few iterations
};
export default () => {
const urlRes = http.get('https://test-api.k6.io');
sleep(1);
// MORE STEPS
// Here you can have more steps or complex script
// Step1
// Step2
// etc.
};
上記のスクリプトはスモークテストの例です。このスクリプトをコピーし、必要に応じてエンドポイントを変更してテストを開始できます。より包括的なテストロジックが必要な場合は、例を参照してください。スモークテストのVU(仮想ユーザー)チャートは、次のように見えるべきです。
結果の分析
スモークテストは、まずスクリプトがエラーなく実行されることを検証します。スクリプトに関連するエラーが表示された場合、より詳細なテストを試みる前に、まずスクリプトを修正してください。
一方、これらの少数の仮想ユーザー(VU)で性能が不十分な場合、それを報告し、環境を修正し、さらなるテストを行う前にスモークテストを再度実行してください。
スモークテストがゼロのエラーを示し、性能結果が受け入れ可能であると判断された場合、他のテストタイプに進むことができます。スモークテストは、システムの基本的な機能性と安定性を確認するための最初のステップであり、問題がないことを確認するという役割を果たします。それからより高度で包括的なテストに進むことができます。
おわりに
今日は、Smoke testingについてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント