Python/Utils

파이썬 Locust 모듈 사용법 예제(부하 테스트)

jimmy_AI 2024. 11. 17. 22:36
반응형

안녕하세요.

이번 시간에는 Python으로 서버 부하 테스트를 아주 간단하게 진행해볼 수 있는 모듈인

Locust의 활용 방법에 대하여 아주 간단한 코드 예제를 통해서 이해해보도록 하겠습니다.

 

 

FastAPI 서버 가정

예를 들어, 다음과 같은 아주 간단한 메소드를 제공하는 fastapi 서버가 있는 상황을

가정해보도록 하겠습니다.

(참고로, node.js 등 파이썬으로 구현되지 않은 서버여도 Locust 사용에는 큰 상관이 없습니다.)

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id, "value": "This is a test item."}

@app.post("/create")
async def create_item(data: dict):
    return {"status": "success", "data": data}

 

이제 해당 예제에서 구현된 fastapi 서버에 locust를 통하여 부하 테스트를

진행해보는 상황을 가정하고 설명을 진행하겠습니다.

 

 

모듈 설치 및 Locust 테스트 코드 작성

먼저, Locust 모듈 설치는 다음의 명령어로 쉽게 가능합니다.

pip install locust

 

이후, 테스트를 위한 locustfile.py라는 이름으로 파일을 작성해야 하는데요.

코드의 예시 스니펫은 다음과 같습니다.

from locust import HttpUser, task, between

class FastAPITestUser(HttpUser):
    wait_time = between(1, 5) # 각 유저는 1 ~ 5초 사이에 한 번씩 호출

    @task(1) # 유저가 해당 요청을 진행할 빈도 가중치: 1
    def get_item(self):
        # GET 요청 테스트
        item_id = 1
        self.client.get(f"/items/{item_id}", name="/items/[item_id]")

    @task(2) # 유저가 해당 요청을 진행할 빈도 가중치: 2
    def create_item(self):
        # POST 요청 테스트
        data = {"name": "Test Item", "description": "This is a test"}
        self.client.post("/create", json=data, name="/create")

 

위의 코드에 대한 상세한 설명을 진행하면 다음과 같습니다.

 

1. HttpUser를 상속하여 가상의 유저의 행동을 정의할 클래스를 하나 정의합니다.

 

2. wait_time한 유저가 요청을 보내는 시간 간격이며,

constant 등 상수나 원하는 커스텀 함수로 다양하게 정의가 가능합니다.

self.wait_time이 아니라 그냥 wait_time으로 정의를 해주시면 됩니다.

 

3. @task(숫자)해당 요청을 보낼 가중치를 정할 수 있습니다.

위 예제에서는 GET : POST 요청의 비중을 1:2로 진행합니다.

가중치가 필요 없고 순차적 작업이라면 숫자를 생략하고 단순히 @task 로만 적으면 됩니다.

 

4. 백엔드 서버에 요청을 보낼 때는 단순히 self.client로 클라이언트를 가정하고

get, post 등의 메소드를 위의 코드와 같은 형태로 호출해주시면 됩니다.

 

 

Locust 실행 방법

위의 단계에서 테스트 코드를 작성했다면,

Locust를 실행하고 웹 페이지에서 결과를 확인하시면 됩니다.

 

실행 명령어는 단순히 locust라고 터미널에 적으면 준비가 완료됩니다.

그러면 http://localhost:8089 주소에서 Locust 웹 페이지 준비가 완료되고,

접속하면 다음과 같은 화면이 나타납니다.

 

위의 옵션에서 입력해야 할 값은 다음과 같습니다.

 

1. Number of users: 부하 테스트를 진행할 최대 동시 접속 유저수를 의미합니다.

2. Rmap up: 초당 몇 명씩 동시 접속 유저를 증가시킬지를 의미합니다.

3. Host: 구현한 백엔드 서버의 url을 의미합니다. 예를 들면, 로컬에서 테스트하는 경우에는

http://localhost:8000/ 등을 그대로 적으시면 됩니다.

4. Advanced options: 부하 테스트를 진행할 시간 등을 지정할 수 있습니다.

 

예를 들면, Number of users = 100, Rmap up = 5로 지정 시에는

초당 5명씩 증가하여, 20초 이후 부터는 100명의 가상 유저로 부하 테스트가 진행됩니다.

 

결과의 예시는 다음과 같이 표로 나타납니다.

 

요청 및 실패 횟수, 요청 시간의 median, 95% 백분위수, 99% 백분위수 등의 정보를

요약해서 볼 수 있습니다.

 

또한, 위쪽의 CHARTS 탭에서는 다음과 같이 시간 흐름에 맞는 결과를 살펴보실 수도 있습니다.

이런 차트를 보고 최대 가용 유저 수 등의 정보를 쉽게 파악해볼 수 있습니다.

 

이 글이 Locust를 활용한 서버 부하 테스트 과정에 도움이 되셨기를 기원하겠습니다.

잘 봐주셔서 감사드립니다.