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: 지금 이 순간 초 당 몇 건 실패 중인지