Python, Locust를 이용한 부하 테스트
본 포스트에서는 Python 기반의 오픈소스 분산 부하 테스트 도구인 Locust의 사용법을 소개합니다.
Locust는 LoadRunner나 JMeter와 같은 기존의 성능 테스트 도구에 비해 단일 서버에서 더 높은 부하를 생성할 수 있으며, 순수 Python 코드로 테스트 스크립트를 작성할 수 있다는 점에서 개발자 친화적이고 간편한 도구입니다.
Locust 설치
Python 3.6+ 버전 필요.
pip install locust
최신 버전(Pre-release)을 설치하고 싶다면:
pip install -U --pre locust
설치 확인:
locust -V
locust 2.32.5 from /usr/local/lib/python3.9/site-packages/locust (Python 3.9.12)
# 사용법 확인
locust --help
Locust 기본 사용법
Mock API 생성
테스트를 위해 간단한 Mock API를 만들어보겠습니다. 파일명은 api.py
입니다.
1. Flask 설치
pip install flask
2. Mock API Script 작성
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello"})
@app.route('/world', methods=['GET'])
def world():
return jsonify({"message": "World"})
if __name__ == '__main__':
app.run()
3. Mock API 실행:
python api.py
정상적으로 실행되면 아래와 같은 output을 확인할 수 있습니다.
➜ python api.py
* Serving Flask app 'api'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
http://127.0.0.1:5000/hello 접속 시,{"message":"Hello"}
확인가능.
이렇게 간단한 Mock API생성이 완료되었습니다.
Locust 스크립트 작성
다음과 같은 테스트 스크립트를 작성하고 파일명을 locustfile.py
로 저장합니다.
from locust import HttpUser, task
class TestUser(HttpUser):
# wait_time = between(0.3, 1) # 요청 간 대기 시간: 0.3~1초 사이
@task
def hello(self):
self.client.get("/hello") # "/hello" URL에 GET 요청
@task(3)
def world(self):
self.client.get("/world") # "/world" URL에 GET 요청 (1:3 비율로 실행)
스크립트 설명
HttpUser
: TestUser는HttpUser
클래스를 상속. 이 클래스는 HTTP 기반의 부하 테스트를 할 때 사용됨.wait_time
: 사용자 간 대기 시간을 설정하며,between(0.3, 1)
은 0.3초~1초의 랜덤 시간을 의미.@task
: 테스트 작업을 정의하며, 숫자는 작업이 실행되는 상대적 비율을 나타냄.self.client.get()
: 지정된 URL에 GET request.
Locust 실행
스크립트를 작성한 디렉토리에서 locust
명령어를 실행합니다.
스크립트 파일명이
locustfile.py
가 아닐떄,-f
파라미터를 사용하여 파일명을 지정해야 함. 예:locust -f testScript.py
➜ locust
[2025-01-09 15:37:57,214] geuni/INFO/locust.main: Starting Locust 2.32.5
[2025-01-09 15:37:57,215] geuni/INFO/locust.main: Starting web interface at http://localhost:8089 (accepting connections from all network interfaces)
이 단계에서 http://localhost:8089
접속후 필요한 정보를 입력하고 START 버튼을 클릭하면 부하테스트가 시작됩니다.
Number of users
: 동시에 접속할 사용자 수를 설정.Ramp up
: 초당 생성할 사용자 수를 설정.Host
: 테스트할 대상 서버의 URL을 입력.
CLI 모드로 Locust 실행
CLI 모드에서는 명령어를 통해 테스트를 실행할 수 있습니다. --headless
옵션을 사용하여 대화형 입력 없이 실행 가능합니다.
locust -f locustfile.py --headless --host http://localhost:5000 -u 1000 -r 100 --run-time 20m
-f
— 테스트 스크립트 파일 경로(파일명이locustfile.py
이고 현재 디렉토리에 있을때 생략 가능)-headless
— 명령 모드 사용-u
— 사용자 수-r
— 초당 증가 속도--run-time
— 테스트 지속 시간(-t
파라미터로 대체 가능)
테스트 종료 또는 Ctrl-C
중단 후, 위와 같은 테스트 결과를 얻을 수 있습니다.