Study/Python
[Python] Locust
kimdaepa
2026. 6. 22. 11:45
왜 Locust?
- 설치와 사용이 편리
- 파이썬 스크립트로 작성하기 때문에 간편하게 사용 가능
설치
pip install locust
스크립트
from locust import HttpUser, task, between, TaskSet
# TaskSet
# 유저가 수행할 작업들을 하나의 클래스로 만듬
# tasks Attribute에 선언된 작업 또는 @task Decorator가 붙여진 작업 중 랜덤 실행
class UserBehavior(TaskSet):
@task
def get_user_detail(self):
user_id = 1
self.client.get(f'/user/{user_id}')
@task
def home(self):
self.client.get('/')
# Httpuser
# 서버에 부하를 가할 유저를 나타내는 클래스
# tasks Attribute에 선언된 작업 또는 @task Decorator가 붙여진 작업 수행
class LocustUser(HttpUser):
host = "<https://locust.load-test.com>"
tasks = [UserBehavior]
wait_time = between(1, 4)
------------------------------------------------------
class NestedBehavior(TaskSet):
@task
def inner_task(self):
print("inner task")
def on_stop(self):
self.interrupt()
class MainBehavior(TaskSet):
tasks = [NestedBehavior]
@task
def main_task(self):
print("main task")
class LocustUser(HttpUser):
host = "127.0.0.1:8000"
tasks = [MainBehavior]
wait_time = between(1, 4)
------------------------------------------------------
# task
# HttpUser는 @task 데코레이터가 붙은 메서드를 찾아 수행
# weight 파라미터를 넣어주면 각 테스크마다 가중치를 부여
@task(weight=1)
def first_task(self):
pass
# 위의 task보다 실행될 확률이 2배 증가
@task(weight=2)
def second_task(self):
pass
실행
locust -f your/path/locustfile.py
# 현재 위치에 locustfile.py 존재 시
locust
지표 해석
- Type/Name: HTTP 메서드와 요청 라벨
- Requests: 테스트 동안 완료된 총 요청 수
- Fails: 실패한 요청 수
- Median(ms): 응답 시간 50번 째 백분위(”보통 이 정도 걸린다”라는 대표값)
- 95% ile/99% ile (ms): 상위 5%,1%의 지연 시간
- Average: 평균 시간
- Min / Max (ms): 제일 빨랐던 / 제일 느렸던 시간
- Average Size: 응답의 평균 용량
- Current RPS: 지금 이 순간 초 당 몇 건 처리 중인지
- Current Failures/s: 지금 이 순간 초 당 몇 건 실패 중인지