GKE 上で Locust を試す
概要
Locust。Python 製の負荷試験ツール。 シナリオが Python で書けるので、複雑なシナリオも作れそう。 Helm があるが、tasks の中を書き換える必要があり、fork して tasks を書き換え、helm chart を公開するのは面倒なので、Google公式のチュートリアルとHelmのリポジトリを参考に、すぐに GKE 上に Locust 環境を準備できるサンプル(kawabatas/locust_sample)を作った。
手順
kustomization.yaml
のTARGET_HOST
を書き換えるworker-deploy.yaml
のreplicas
も書き換える- tasks/tasks.py にシナリオを書く
- デプロイ。
$ kustomize build | kubectl apply -f -
- ポートフォワード(
$ kubectl port-forward $POD_NAME_MASTER 8089 -n locust
)して、ブラウザで127.0.0.1:8089
へアクセス
シナリオの例
from locust import HttpLocust, TaskSet, task import json class SampleTasks(TaskSet): headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } user_id = None def on_start(self): self.login() def login(self): body = json.dumps({'email': 'hoge', 'pass': 'hoge'}) response = self.client.post( '/login', body, headers = self.headers ) json_response_dict = response.json() self.user_id = json_response_dict['user_id'] def greet(self): body = json.dumps({'user_id': self.user_id}) self.client.post( '/greet', body, headers = self.headers ) @task def scenario(self): self.greet() class SampleBehavior(HttpLocust): task_set = SampleTasks min_wait = 100 max_wait = 200