💬

locustで複数workerを立ち上げつつ、認証を通した負荷試験を行う

2022/10/26に公開

目的

  • 以下を想定してlocustを使って負荷試験をする。
    • 2つ以上のworkerプロセスを立ち上げる。
    • Userごとに負荷試験内でユニークな会員として認証する。

記事執筆背景

locustを使って目的に記載したことをどうやるのか、日本語であまり情報がなかったので、ここに参考情報や自分なりのメモを残しておけば便利かもしれないと思った。

対象読者

  • masterとworkerの意味が分かる。
  • locustを1workerで動かしたことがある。

前提

  • 認証は外部サーバーにパスワードとメールアドレスを投げるとアクセストークンが返ってくる。そのトークンをHTTP HeaderのAuthorizationに突っ込むことでAPIの認可を通す。
  • master node * 1, worker node * 2という構成で行う。
  • KVS, RDBなどは使わない。
    • 使っても良いが、私の環境では使ってないので、、、。

やること

  1. master nodeでCSVに記述されているユーザーのメアドとパスワードをすべて読み込む。
  2. master nodeからworker nodeに読み込んだユーザのデータを2分割して送信する。
  3. master nodeから送られてきたユーザのデータをworker nodeが受け取り、それを使ってアクセストークンを取得する。
  4. アクセストークンをインスタンス変数に代入する。
  5. TaskSet内で試験対象のAPIをコールするときにHeaderにアクセストークンを含めて叩く。

ここで書いていることは、以下のリンクを読めば分かるので、大した話はしてません。

個人的に大事だと思ったことは以下の通りです。

  • master nodeでロード / 分割したユーザーのデータをworker nodeに送るために、register_messages / send_messageを使っていること
  • 今書いているコードがmaster node or worker nodeどちらで実行されるのかを意識すること

特に二つ目は慣れていないひと(私です)にとっては戸惑うポイントかもしれないです。

終わり

以上で「locustで複数workerを立ち上げつつ、認証を通した負荷試験を行う」方法の説明を終わります。
locustは良いツールなので、負荷試験やる際には検討してみると良いかもしれないです。
最近だとk6が負荷試験ツールとして勢いがあるので、使ってみたいですね。
あと、TimescaleDBとgrafanaによる可視化がアツいらしいので、これも試したいですね〜〜。

Discussion