こんにちは。よっしーです(^^)
今日は、Soak testing についてご紹介します。
背景
Dockerで構築したWebアプリの開発環境において、k6を利用した負荷テストについて調査したときの内容を備忘として残しました。
開発環境のソースは下記のリポジトリにあります。
ソークテスト(Soak testing)
ソークテストは、平均負荷テストの別のバリエーションです。これは、次の点に焦点を当てて、長時間にわたって分析します:
- 長時間にわたる性能の劣化およびリソース消費の評価。
- 長時間にわたるシステムの可用性と安定性の評価。
ソークテストは、平均負荷テストとはテストの期間が異なります。ソークテストでは、ピーク負荷の期間(通常は平均的な量)が数時間または数日にわたります。期間はかなり長いですが、ソークテストのランプアップおよびランプダウンの期間は平均負荷テストと同じです。
テストの文脈では、ソークテストは耐久性テスト、一貫した高負荷テスト、またはスタミナテストと呼ばれることもあります。
ソークテストを実行するタイミング
ほとんどのシステムは介入なしで数日、数週間、数ヶ月間稼働し続ける必要があります。このテストは、使用期間が長い場合のシステムの安定性と信頼性を検証します。
このテストタイプは、長期間の使用後にのみ現れる一般的な性能の欠陥をチェックします。これらの問題には、応答時間の劣化、メモリや他のリソースのリーク、データの飽和、およびストレージの枯渇が含まれます。
考慮事項
ソークテストを実行する準備をする際には、以下を考慮してください:
- 他のどのテストよりも大幅に長い期間を設定します。 一般的な値には、3時間、4時間、8時間、12時間、24時間、48時間から72時間などがあります。
- 可能であれば、平均負荷テストのスクリプトを再利用します。 ただし、前述の値に対してピーク期間のみを変更します。
- ソークテストを実行する前に、スモークテストや平均負荷テストを実行しないでください。 各テストは異なる問題を明らかにします。最初にこれを実行すると混乱やリソースの浪費を招く可能性があります。
- バックエンドのリソースとコードの効率を監視します。 システムの劣化をチェックしているため、バックエンドのリソースとコードの効率を監視することを強くお勧めします。すべてのテストタイプの中で、バックエンドの監視は特にソークテストにとって重要です。
Soak testing in k6
浸漬テストは平均負荷テストとほぼ同じです。唯一の違いは、負荷の高い期間が長くなることです。
- 平均ユーザー数またはスループットに達するまで負荷を増加させます。
- その負荷をかなり長い時間維持します。
- 最後に、テストケースに応じて停止または徐々に負荷を減少させます。
- 負荷の期間はオプションオブジェクトで構成します。
import http from 'k6/http';
import {sleep} from 'k6';
export const options = {
// Key configurations for Soak test in this section
stages: [
{ duration: '5m', target: 100 }, // traffic ramp-up from 1 to 100 users over 5 minutes.
{ duration: '8h', target: 100 }, // stay at 100 users for 8 hours!!!
{ duration: '5m', target: 0 }, // ramp-down to 0 users
],
};
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.
};
平均負荷テストと同様に、ピーク負荷は100 VUsで安定します。違いは期間にあります。この浸漬テストでは、ピーク負荷が数分ではなく8時間維持されます。
結果の分析
前のテストタイプの後にこのテストを実行すると、前のシナリオで十分に機能するシステムを持つはずです。このテストでは、時間の経過とともにパフォーマンスメトリックに変化がないかどうかをモニタリングします。時間の経過とともに劣化を示すバックエンドの測定値の変化との関連性を試みます。こうした変化には、徐々の劣化だけでなく、応答時間やバックエンドのハードウェアリソースの急激な変化(改善も含む)が含まれます。チェックすべきバックエンドのリソースには、消費されたRAM、CPU、ネットワーク、およびクラウドリソースの増加などがあります。
期待される結果は、バックエンドのパフォーマンスとリソース利用率が安定しているか、予想される変動範囲内にあることです。
前述のすべてのテストタイプを実行した後、システムがさまざまな負荷条件(小規模、平均、高負荷、拡張)でうまく機能することを知ることができます。
おわりに
今日は、Soak testingについてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント