自分が実験を行った際にLocustを使用した為,記録を残す
Locustの構成ファイル¶
Locustを動かす際にPythonを用いて構成ファイルを作成した
from locust import HttpUser, TaskSet, task, constant
from locust import LoadTestShape
class UserTasks(TaskSet):
@task
def get_root(self):
# replace with the URL of your server
self.client.get("http://192.168.100.96:31000/")#リクエストの送信先であるサーバーIPアドレスとport番号
class WebsiteUser(HttpUser):
wait_time = constant(1)
tasks = [UserTasks]
class StagesShape(LoadTestShape):
stages = [
{"duration": 60, "users": 10, "spawn_rate": 10},#実験開始から60秒まで最大ユーザー数を10として毎秒10リクエスト送信
{"duration": 900, "users": 500, "spawn_rate": 50},#60秒から900秒まで最大ユーザー数を500として毎秒50リクエストずつ上昇させて送信
{"duration": 1500, "users": 0, "spawn_rate": 50}#900秒から1500秒までユーザー数が0になるまで毎秒50リクエストずつ減少させて送信
]
def tick(self):
run_time = self.get_run_time()
for stage in self.stages:
if run_time < stage["duration"]:
tick_data = (stage["users"], stage["spawn_rate"])
return tick_data
return None
上記のPythonファイルを作成した ※指定したサーバーのIPアドレスや,リクエスト数の増減は各々のテストシナリオごとに変更する
テスト実行¶
次に以下のコマンドを入力することで負荷試験を開始できる
locust -f locustfile.py --headless -u 0 -r 0 -H http://192.168.100.96:31000 --csv=test
Locustではlocustコマンドを入力することでUI上で負荷試験を行うことが出来る.
本実験を行った際はUIを省略したかったため,オプションである--headlessを使うことでUIを起動せずテストを行うことが出来る ※headlessで行う場合ユーザー数とレートを入力する必要があるので0秒時点でユーザー数0,0req/sと指定している
また--csvオプションを用いることで実験データをcsvファイルとして保存できる
コマンドを実行すると以下のように出力され,指定した時間に自動的に終了する
[2021-12-23 10:20:35,554] load-test/INFO/locust.runners: Shape test starting. User count and spawn rate are ignored for this type of load test
[2021-12-23 10:20:35,554] load-test/INFO/locust.main: Starting Locust 2.2.1
[2021-12-23 10:20:35,554] load-test/INFO/locust.runners: Shape worker starting
[2021-12-23 10:20:35,554] load-test/INFO/locust.runners: Shape test updating to 10 users at 10.00 spawn rate
Name # reqs # fails | Avg Min Max Median | req/s failures/s
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Aggregated 0 0(0.00%) | 0 0 0 0 | 0.00 0.00
[2021-12-23 10:20:35,555] load-test/INFO/locust.runners: Ramping to 10 users at a rate of 10.00 per second
[2021-12-23 10:20:35,556] load-test/INFO/locust.runners: All users spawned: {"WebsiteUser": 10} (10 total users)
Name # reqs # fails | Avg Min Max Median | req/s failures/s
------------------------------------------------------------------------------------------------------------------------------------- GET / 20 0(0.00%) | 13 5 23 11 | 0.00 0.00
------------------------------------------------------------------------------------------------------------------------------------- Aggregated 20 0(0.00%) | 13 5 23 11 | 0.00 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
------------------------------------------------------------------------------------------------------------------------------------- GET / 40 0(0.00%) | 10 3 23 9 | 10.00 0.00
------------------------------------------------------------------------------------------------------------------------------------- Aggregated 40 0(0.00%) | 10 3 23 9 | 10.00 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
------------------------------------------------------------------------------------------------------------------------------------- GET / 50 0(0.00%) | 10 2 23 8 | 10.00 0.00
------------------------------------------------------------------------------------------------------------------------------------- Aggregated 50 0(0.00%) | 10 2 23 8 | 10.00 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
------------------------------------------------------------------------------------------------------------------------------------- GET / 70 0(0.00%) | 11 2 37 8 | 8.33 0.00
------------------------------------------------------------------------------------------------------------------------------------- Aggregated 70 0(0.00%) | 11 2 37 8 | 8.33 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
------------------------------------------------------------------------------------------------------------------------------------- GET / 90 0(0.00%) | 10 2 37 7 | 7.50 0.00
------------------------------------------------------------------------------------------------------------------------------------- Aggregated 90 0(0.00%) | 10 2 37 7 | 7.50 0.00
出力されるcsvファイルは以下となる↓
cdsl@load-test:~$ ls
test_exceptions.csv test_stats.csv
test_failures.csv test_stats_history.csv