back-end/Django
[Locust] Django와 Locust로 API 부하 테스트
icandle
2024. 11. 19. 22:07
Intro
서비스를 운영할 때 부하테스트를 통해 성능 이슈를 대비하는 것이 중요하다. 간단한 부하테스트 예제를 살펴보자!
Locust란?
Locust는 Python 기반의 부하 테스트 도구로, 여러 사용자의 API 요청을 시뮬레이션해 서버의 성능을 측정할 수 있다. 특히 Locust는 코드로 테스트 시나리오를 작성할 수 있어 재사용성이 높고 유연한 구성이 가능하다.
Locust 설치
먼저 Locust를 설치한다.
pip install locust
locust.py 파일을 작성한다.
- HttpUser: Locust에서 사용자 행동을 정의하는 기본 클래스로, HttpUser 클래스를 상속받아 Django API 서버에 HTTP 요청을 보낼 수 있다.
- wait_time: 각 사용자의 요청 간격을 설정하는 속성이다. 여기서는 between(1, 3)으로 설정해, 각 요청 사이의 대기 시간을 1초에서 3초 사이로 랜덤하게 정했다.
- api_endpoints: 테스트할 엔드포인트들의 목록을 배열 형태로 정의했다.
- @task 데코레이터: Locust에서 개별 작업(테스트 시나리오)을 정의할 때 사용한다. get_endpoint 메서드는 정의된 엔드포인트들 중 하나를 랜덤하게 선택해 요청을 보낸다.
- request_timeout : 현재 코드에서는 사용하지 않았지만, wait_time과 같이 API 요청 후 응답 최대 대기 시간을 옵션으로 지정할 수 있다. 지정하지 않을 경우 default는 60초다.
from locust import HttpUser, task, between
import random
class DjangoApiUser(HttpUser):
wait_time = between(1, 3) # 사용자 간 요청 시간 간격 설정
# 테스트할 API 엔드포인트 목록
api_endpoints = [
"/api/example1",
"/api/example2",
"/api/example3",
]
@task
def get_endpoint(self):
# 엔드포인트 목록에서 하나를 랜덤으로 선택하여 요청 전송
endpoint = random.choice(self.api_endpoints)
self.client.get(endpoint)
Locust 테스트 실행
작성한 코드를 이용해 Locust를 실행한다.
locust -f <파일이름>.py
브라우저에서 http://localhost:8089로 접속하면 Locust 웹 인터페이스가 열린다. 이 인터페이스를 통해 동시 사용자 수와 테스트 속도를 조절하면서 부하 테스트를 수행할 수 있다.