kawabatas技術ブログ

試してみたことを書いていきます

GKE 上で Locust を試す

概要

LocustPython 製の負荷試験ツール。 シナリオが Python で書けるので、複雑なシナリオも作れそう。 Helm があるが、tasks の中を書き換える必要があり、fork して tasks を書き換え、helm chart を公開するのは面倒なので、Google公式のチュートリアルとHelmのリポジトリを参考に、すぐに GKE 上に Locust 環境を準備できるサンプル(kawabatas/locust_sample)を作った。

手順

  • kustomization.yamlTARGET_HOST を書き換える
  • worker-deploy.yamlreplicas も書き換える
  • 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