locust 부하 테스트
locust 사용해서 Jupyter NoteBook에 있는 .ipynb 파일을 동시 접속자 20명이 요청을 하는 테스트를 하고자 한다.
locust란
>locust는 오픈 소스로 개발된 성능 테스트 도구로, 웹 응용 프로그램이나 서비스의 성능과 부하를 측정하는 데 사용된다.
파이썬으로 작성되어 있으며, 사용자 시나리오를 정의하여 가상 사용자들이 웹 서비스에 대한 요청을 보내고 동시에 사용자 수와 부하를 조절할 수 있다.
locust 설치
pip install locust
locust는 간단하게 한 줄로 pip 명령어를 사용해 설치할 수 있다.
Jupyter Server API 토큰 가져오기
<서버주소>/hub/token에 접속해서 "Request new API toekn"을 클릭하여 토큰을 생성한다.
Jupyter Notebook에 있는 파일에 접근할려면 Jupyter Server에서 제공하는 REST API를 사용해야 한다.
REST API를 사용하기 위해서는 API Token을 발급 받고 API를 요청할 때 Headers 부분에 토큰을 넣어 보내야한다.
locust.py 작성
위에서 토큰을 복사했다면 다음으로는 locust.py를 작성해야 한다.
이번 글에서는 간단하게 Jupyter Notebook안에 있는 test.ipynb에 GET 요청을 하는 테스트를 진행해보겠다.
locust는 파이썬을 사용하기 때문에 코드는 파이썬으로 작성해줘야 한다.
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(1,3)
@task
def execute_notebook(self):
notebook_path = "/user/admin/api/notebooks/test.ipynb/"
headers = {
"Authorization": "token <토큰 값>"
}
data = {
"cell_type": cell_type
}
self.client.post(notebook_path, json=data, headers=headers)
사용자가 1~3초 동안 대기 시간을 갖고 해당 파일에 요청을하는 파이썬 코드이다.
위에서 언급한 것 처럼 API Token을 headers 부분에 작성해줘야 한다.
* Jupyter Notebook안에 test.ipynb 파일이 존재 해야한다.
코드 실행
locust -f locust.py
locust 명령어로 작성한 파일을 가리키는 -f 옵션을 사용해 파일을 실행한다.
locust 설정
서버주소:port 번호로 접속하면 위와 같이 locust 웹에 들어갈 수 있다.
어떤 포트로 접근해야 되는지는 locust 실행할 때 알려준다. 보통 8088
- Number of users : 테스트할 유저수
- Spawn rate : 몇초에 한번씩 유저가 추가 되는지
- Host : 서버의 주소
옵션들을 설정해주고 Start swarming 버튼을 클릭하면 테스트가 시작된다.
결과
Request Statistics
- # Requets: 요청 횟수
- # Fails: 실패 횟수
- Average (ms): 평균 속도
- Min (ms): 최소 속도
- Max (ms): 최대 속도
- Average size (bytes): 평균 크기
- RPS: 초당 요청수
- Failures/s: 실패/초
Response Time Statistics
Charts
locust는 기본적으로 Request,Response에 대한 결과값의 대한 정보를 표로 확인할 수 있고
좀 더 시각적으로 볼 수 있게 그래프로도 확인이 가능하다.
마지막으로 전체적인 결과 리포트도 다운받을 수 있다.
마무리
locust는 설치와 설정들이 어렵지 않고 눈으로 보기 편한 그래프 까지 제공해주니 부하테스트를 사용할 일이 있으면 사용해보는 것도 좋은 공부가 될 것 같다.
공식 사이트를 참고 하면 더 다양한 기능들도 제공하니 그 기능들을 나중에 기회가 있으면 더 자세하게 포스팅 할 예정이다.