이전 글에서는
로컬 환경에 Locust를 설치하고 버전 확인까지 진행했습니다.
이번 글에서는
Locust를 실행하고 REST API에 부하를 준 뒤
결과를 확인해볼 예정입니다.
전체 코드
https://github.com/GHGHGHKO/sample-locust
테스트 코드 작성
우선 부하를 주기 위한 첫 테스트 코드를 작성합니다.
코드를 하나씩 분해해보겠습니다.
import time
from locust import HttpUser, task, between
locust package는 python 모듈로 다른 파일이나 패키지에서 사용 할 수 있습니다.
class QuickstartUser(HttpUser):
이 클래스는 HttpUser를 상속받습니다.
HttpUser는 각 User에게 HttpSession의 인스턴스인 client 속성을 제공하는데,
이를 사용하여 load testing 하려는 대상에 HTTP 요청을 보낼 수 있습니다.
테스트가 시작될 때 Locust는 각 User에 대해 이 클래스의 인스턴스를 생성합니다.
각 User는 자체 gevent 쓰레드에서 실행됩니다.
locustfile이 되려면 최소 하나의 User를 상속받은 클래스가 있어야 합니다. (위 코드에서는 HttpUser)
wait_time = between(1, 5)
이 클래스는 각 작업이 실행된 후
시뮬레이션된 User들이 1부터 5초 사이에 기다리도록 하는 wait_time을 정의합니다. (실제 상황 가정)
@task
def view_items(self):
...
@task로 decorated 된 메서드는 locustfile의 핵심입니다.
각각 실행 중안 User에 대해 Locust는 해당 메서드를 호출 할 때마다
greenlet(micro-thread)를 생성합니다.
self.client.get(url="/v1/gooseAuth/items")
self.client attribute를 사용하면
Locust에서 로깅될 HTTP 호출을 수행할 수 있습니다.
다른 종류의 요청이나 응답을 확인하는 방법은 client attribute / HttpSession 글을 참고하면 좋습니다.
@task
def view_items(self):
self.client.headers = {
"Content-Type": "application/json",
"X-AUTH-TOKEN": self.x_auth_token
}
self.client.get(url="/v1/gooseAuth/items")
time.sleep(1)
본격적으로 API를 호출합니다.
def on_start(self):
...
이 이름의 메서드는 각 시뮬레이션된 User가 시작 될 때 호출됩니다.
자세한 내용은 on_start, on_stop 메서드를 참고하면 좋습니다.
부하 주기
파일이 세팅되면
locustfile.py이 있는 곳에서 아래 명령어를 수행합니다.
$ locust --modern-ui
그냥 locust 명령어로 수행 할 수도 있지만
--modern-ui flag를 추가하면 새로운 버전의 Web UI를 사용 할 수 있습니다.
실행이 완료되면
http://localhost:8089 에 접속합니다.
parameter를 세팅합니다.
Host에는 테스트 하고 싶은 URL을 지정합니다.
많은 부하를 주진 않았습니다.
세팅이 완료되면 START SWARM 을 클릭합니다.
결과를 확인하며 어디까지 부하를 줄 수 있는지 확인합니다.
아주 기초적인 내용으로 부하를 줘보았습니다.
조금 더 고급진 내용을 확인하고 싶으면
공식 문서를 확인해도 좋을 것 같습니다. :)
https://docs.locust.io/en/stable/index.html
참고자료
https://docs.locust.io/en/stable/writing-a-locustfile.html
https://pypi.org/project/greenlet/
https://docs.locust.io/en/stable/writing-a-locustfile.html?#on-start-on-stop
https://docs.locust.io/en/stable/writing-a-locustfile.html#client-attribute-httpsession
'테스트' 카테고리의 다른 글
Locust 부하 테스트, 개요 및 설치 (1) (0) | 2023.11.16 |
---|---|
Apache JMeter 사용해보기, REST API 부하주기 (2) (0) | 2023.11.11 |
Apache JMeter 사용해보기, 설치 (1) (0) | 2023.11.08 |