locustfile 샘플 살펴보기
import time
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(1, 5)
@task
def hello_world(self):
self.client.get("/hello")
self.client.get("/world")
@task(3)
def view_items(self):
for item_id in range(10):
self.client.get(f"/item?id={item_id}", name="/item")
time.sleep(1)
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})
class QuickstartUser(HttpUser):
사용자 클래스를 정의한다.
HttpUser를 상속하여 각 사용자에게 client 속성을 제공한다. 이는 HttpSession의 인스턴스로, 부하 테스트를 하려는 대상 시스템에 HTTP 요청을 하는데 사용할 수 있다.
테스트가 시작되면 시뮬레이션되는 모든 사용자에게 이 클래스의 인스턴스를 만들고 클래스에 정의된 내용을 수행한다.
유효한 locustfile이 되려면 User로부터 상속하는 클래스를 최소한 하나를 포함해야 한다.
wait_time = between(1, 5)
이 클래스의 각 작업(아래 참조)이 실행된 후 시뮬레이션된 사용자가 1 ~ 5초 동안 기다리게 하는 wait_time을 정의 한다.
@task
def hello_world(self):
self.client.get("/hello")
self.client.get("/world")
@task (Method decorated)는 locust 파일의 핵심이다.
실행 중인 모든 User에 대해 Locust는 해당 Method를 호출하는 greenlet (코루틴 또는 마이크로 스레드)을 만들고, 작업 내의 코드는 순차적으로 실행된다.
/hello에서 응답을 받기 전까지 /world는 호출되지 않는다.
@task
def hello_world(self):
...
@task(3)
def view_items(self):
...
@task로 선언된 두 개의 Method중 하나에 @task(3)과 같이 더 높은 가중치를 줄 수 있다.
QuickstartUser가 실행되면 hello_world 또는 view_items를 선택하여 실행된다. 작업은 무작위로 선택되지만 hello_world보다 view_items를 선택할 가능성이 3배 더 높아진다.
@task가 선언된 Method만 선택 된다.
self.client.get("/hello")
self.client 속성은 Locust에서 로깅되는 HTTP 호출을 할 수 있다.
HttpUser는 실제 브라우저가 아니므로 리소스를 로드하거나 페이지를 렌더링하기 위해 HTML 응답을 구문 분석하지 않지만 그래도 쿠키는 추적된다.
@task(3)
def view_items(self):
for item_id in range(10):
self.client.get(f"/item?id={item_id}", name="/item")
time.sleep(1)
view_items 작업은 가변 쿼리 매개변수를 사용하여 10개의 다른 URL을 로드한다. Locust의 통계에서 10개의 별도 항목을 가져오지 않기 위해(통계가 URL에 그룹화되어 있기 때문) name 매개변수를 사용하여 모든 요청을 "/item"이라는 이름 항목 으로 그룹화 할 수 있다.
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})
on_start Method는 사용자 시뮬레이션을 수행하기 전에 호출된다. 사용자 시뮬레이션을 중지 할 때는 on_stop Method를 호출 할 수 있다.
'성능과 튜닝 > 부하 테스트 도구 - 애플리케이션 (Locust)' 카테고리의 다른 글
Locust 클래스 살펴보기 - User class (0) | 2024.10.14 |
---|---|
Locust 개요 및 설치 (0) | 2024.09.23 |