Gatling Commanderを利用する際の設定ファイルの書き方や認証について説明しています。
ツールのインストールやGatling Operatorのセットアップ、負荷試験シナリオの作成などの事前準備・実行方法についてはQuick Start Guideを参照してください。
Gatling Commanderでは、設定ファイルとして次の2種類のYAMLファイルを用意する必要があります。
- config.yaml
- base_manifest.yaml
負荷試験の設定値はconfig.yaml
に記載します。
base_manifest.yaml
にはGatlingリソースのKubernetesマニフェストのうち、負荷試験ごとに共通の値を記述します。
base_manifest.yaml
に<config.yaml overrides this field>
と記載があるフィールドは、負荷試験ごとにconfig.yaml
の値で上書きされます。そのため、base_manifest.yaml
の値を変更する事なく複数の負荷試験を連続して実行できます。
config.yaml
・base_manifest.yaml
の保存場所、ファイル名は任意の値を指定可能です。
参照するconfig.yaml
のパスについては、コマンド実行時に--config
オプションの値を指定してください。
参照するbase_manifest.yaml
のパスについては、config.yaml
のbaseManifest
に設定してください。
config.yaml
の各フィールドについて説明します。
config.yaml
は階層構造となっています。
Gatling Commanderでは、個々の負荷試験のグループとしてserviceを定義します。
serviceは同一の負荷試験対象に関する1つ以上の負荷試験シナリオを持ちます。
同一serviceの負荷試験の結果は、config.yaml
のservices[].spreadsheetID
で指定したGoogle Sheetsに記録されます。
個々の負荷試験シナリオ設定はconfig.yaml
のtestScenarioSpec
に定義します。これはGatling Operatorのみを利用して負荷試験を行う場合に設定するGatling ObjectのtestScenarioSpec
の値と同じです。
config.yaml
のトップレベルのフィールドでは負荷試験全体で共通の設定値を指定し、config.yaml
のservices
には各serviceごとの設定値を指定します。
またconfig.yaml
のservices[].testScenarioSpec
には負荷試験ごとの設定値を指定します。
このようにconfig.yaml
では、負荷試験全体に共通の設定値 -> serviceごとの設定値 -> 負荷試験ごとのシナリオ
と設定値がネストされた階層構造で構成されています。
config.yaml
のうち、負荷試験全体で共通の設定値について説明します。
Field | Description |
---|---|
gatlingContextName string |
(Required) Context name of Kubernetes cluster which Gatling Pod running in. |
imageRepository string |
(Required) Container image repository url in which Gatling image is stored. |
imagePrefix string |
(Required) String which is used to add built Gatling image name prefix. |
imageURL string |
(Optional) Container image URL. When you run exec subcommand with --skip-build arguments, you must fill this field to specify Gatling image. |
baseManifest string |
(Required) Path of Gatling Kubernetes manifest. |
gatlingDockerfileDir string |
(Required) Path of directory in which Dockerfile for Gatling image is stored. |
startupTimeoutSec integer |
(Required) Timeout seconds threshold about each Gatling Job startup. |
execTimeoutSec integer |
(Required) Timeout seconds threshold about each Gatling Job running. |
slackConfig.webhookURL string |
(Optional) Slack webhook url for notification. If set this value, finished CLI will be notified. |
slackConfig.mentionText string |
(Optional) Slack mention target. If set member_id to this field, CLI notification mention user who has the member_id. The webhookURL field must be specified with this field value. |
services []object |
(Required) This field has some services setting values. |
config.yaml
のうち、serviceごとの設定値について説明します。
Field | Description |
---|---|
name string |
(Required) Service name. Please specify any value. Used in Gatling object metadata name and so on. |
spreadsheetID string |
(Required) Google Sheets ID to which load test result will be written. |
failFast boolean |
(Required) The flag determining whether start next load test or not when current load test result failed item value count exceeds 0. |
targetPercentile integer |
(Optional) Threshold of latency percentile, specify this field value from [50, 75, 95, 99]. If this field value is set, CLI check current load test result specified percentile value and whether decide to start next load test or not. The targetLatency field must be specified with this field value. |
targetLatency integer |
(Optional) Threshold of latency milliseconds, this field must be specified with targetPercentile. |
targetPodConfig.contextName string |
(Required) Context name of Kubernetes cluster which loadtest target Pod running in. |
targetPodConfig.namespace string |
(Required) Kubernetes namespace in which load test target Pod is running. |
targetPodConfig.labelKey string |
(Required) Metadata Labels key of load test target Pod. |
targetPodConfig.labelValue string |
(Required) Metadata Labels value of load test target Pod. |
targetPodConfig.containerName string |
(Required) Name of load test target container name which is running in load test target Pod. |
scenarioSpecs []object |
(Required) This field has some scenarioSpecs setting values. |
config.yaml
のうち、個々の負荷試験シナリオごとの設定値について説明します。
Field | Description |
---|---|
name string |
(Required) Load test name which is used as Google Sheets name and so on. |
subName string |
(Required) Load test sub name which is used in load test result row subName column. |
testScenarioSpec object |
(Required) Gatling object testScenarioSpec field. Please refer gatling-operator document TestScenarioSpec. |
base_manifest.yaml
にはGatlingリソースのKubernetesマニフェストのうち、負荷試験ごとに共通する値を設定するフィールドを記述します。
GatlingリソースのKubernetesマニフェストのフィールドについては、Gatling OperatorのAPI Referenceを参照してください。
base_manifest.yaml
に<config.yaml overrides this field>
と記載があるフィールドは、負荷試験ごとにconfig.yaml
の値で上書きされます。そのため、base_manifest.yaml
でこれらのフィールドの値は変更不要です。
※ Gatling Commanderはbase_manifest.yaml
の値をconfig.yaml
の値で置き換える前に、一度GoのGatling構造体のオブジェクトにその値を読み込みます。そのため、base_manifest.yaml
の各フィールドの値の型はGatling構造体の各フィールドの値の型と一致する必要があります。型が一致しない場合次のようなエラーが発生します。
json: cannot unmarshal string into Go struct field TestScenarioSpec.spec.testScenarioSpec.parallelism of type int32
base_manifest.yaml
のうち、config.yaml
の値で置き換えられるフィールドについて説明します。
Field | Description |
---|---|
metadata.name string |
Overwritten by service name loaded from services[].name field value in config.yaml |
spec.podSpec.gatlingImage string |
Overwritten by built Gatling image URL or image URL loaded from imageURL field value in config.yaml |
spec.testScenarioSpec.parallelism interger |
Overwritten by services[].scenarioSpecs[].testScenarioSpec.parallelism field value in config.yaml |
spec.testScenarioSpec.simulationClass string |
Overwritten by services[].scenarioSpecs[].testScenarioSpec.simulationClass field value in config.yaml |
spec.testScenarioSpec.env[] []dict |
Overwritten by services[].scenarioSpecs[].testScenarioSpec.env[] field value in config.yaml |
Gatling Commanderの実行には次の権限が必要です。
- docker imageをpull・pushできる権限
- Kubernetesクラスタでオブジェクトの取得・作成・削除ができる権限
- Cloud Storageからの読み取り権限
- Google Sheetsへの読み取り・書き込み権限
config.yaml
のimageURL
を指定しない場合、新しくGatling Imageをbuildし指定したImage Repositoryにpushします。
Gatling Commanderでは現状Google Cloudのみでの利用をサポートしており、Google Artifact Registry・Google Container Registryが利用可能です。
Gatling Imageのbuild・pushを行う場合は、Gatling Commanderの実行環境で認証されるアカウントにImageをpushするために必要な権限を付与してください。
Gatling Commanderでは指定したクラスタでGatling Objectの作成・取得・削除や負荷試験対象のPodのメトリクスの取得を行います。
Kubernetesの認証情報は$HOME/.kube/config
を参照して取得しています。
Gatling Commanderの実行環境で認証されるアカウントにKubernetesオブジェクトの取得・作成・削除ができる権限を付与してください。
Gatling Operatorの仕様として、負荷試験実行後にGatling ReportがcloudStorageSpec
で設定したprovider
のbucket
に出力されます。
Gatling Commanderでは設定したbucket
にアップロードされたGatling Reportを取得し、対象の項目を読み取ってGoogle Sheetsに記録します。
Gatling Commanderでは現状Google Cloudのみでの利用をサポートしており、Google Cloud StorageにアップロードされたGatling Reportから負荷試験結果の読み取りを行います。
Gatling Commanderの実行環境で認証されるアカウントにファイルを取得するために必要な権限付与してください。
Gatling Commanderでは負荷試験結果を指定されたGoogle Sheetsに記録します。
Gatling Commanderの実行環境で認証されるアカウントに、対象のGoogle Sheetsの編集者権限を付与してください。
Gatling CommanderでGoogle Sheetsを操作する際にはGoogle Sheets APIを利用します。Google Cloud Projectがない場合はProjectを作成し、Google Sheets APIを有効化してください。
Google Sheetsのシートを作成後、認証するアカウントへシートの編集権限を付与してください。
次のコマンドを実行し、Google Sheetsの認証を行なってください。
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/spreadsheets