こんにちは。よっしーです(^^)
今日は、k6 の Executors についてご紹介します。
背景
Dockerで構築したWebアプリの開発環境において、k6のExecutorsについて調査したときの内容を備忘として残しました。
開発環境のソースは下記のリポジトリにあります。
エグゼキューター(Executors)
エグゼキューターは、k6がVUとイテレーションをスケジュールする方法を制御します。選択するエグゼキューターは、テストの目標とモデル化したいトラフィックの種類に依存します。
エグゼキューターは、シナリオオブジェクトのexecutorキーで定義します。値はハイフンで区切られたエグゼキューター名です。
export const options = {
scenarios: {
arbitrary_scenario_name: {
//Name of executor
executor: 'ramping-vus',
// more configuration here
},
},
};
以下のテーブルは、すべてのk6エグゼキューターをリストアップし、それぞれの説明になります。
名前 | 値 | 説明 |
---|---|---|
Shared iterations | shared-iterations | 固定数のイテレーションが複数のVU間で共有されます。 |
Per VU iterations | per-vu-iterations | 各VUは正確な数のイテレーションを実行します。 |
Constant VUs | constant-vus | 固定数のVUが指定された時間内で可能な限り多くのイテレーションを実行します。 |
Ramping VUs | ramping-vus | 可変数のVUが指定された時間内で可能な限り多くのイテレーションを実行します。 |
Constant Arrival Rate | constant-arrival-rate | 指定された時間内で固定数のイテレーションが実行されます。 |
Ramping Arrival Rate | ramping-arrival-rate | 指定された時間内で可変数のイテレーションが実行されます。 |
Externally Controlled | externally-controlled | k6のREST APIまたはCLIを介して、実行時に制御およびスケーリングを行います。 |
各エグゼキューターは異なるテストのニーズに合わせて設計されており、どのエグゼキューターを選択するかは、テストの目的とモデル化したいトラフィックの種類に依存します。それぞれのエグゼキューターのドキュメントにアクセスして、詳細な情報を確認できます。
特定のシナリオにおいて、特定のVUが特定のイテレーションを実行できることを保証することはできません。
SharedArrayと実行コンテキスト変数を使用すると、特定のVUをテストデータ内の特定の値にマッピングすることができます。つまり、10番目のVUは10番目の配列アイテム(または6番目のイテレーションに6番目のアイテム)を使用できます。
ただし、例えば10番目のVUを10番目のイテレーションに信頼性を持ってマッピングすることはできません。特定のVUが特定のイテレーションを実行することは、k6の仕組み上、一貫して保証されないためです。
おわりに
今日は、k6 の Executors についてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント