AI 웹개발반

[TIL] 부하테스트 툴과 Locust 사용하기

째깍단 2023. 7. 10. 13:18

부하테스트에 사용하는 여러 툴이 있다고 한다

 


- jmeter

java기반 오픈소스, 복잡하고 많은 옵션, 다채로운 사용법 = 꽤나 공부하지않으면 사용성이 낮음
단일 데스크톱 컴퓨터에서 수행 가능
[jmeter 공식문서] https://jmeter.apache.org/

 


- ngrinder

네이버 관리/제공. jython, Groovy 같은 스크립트 언어를 사용
nGrinder 는 컨트롤러 및 에이전트로 구성된 분산 아키텍처로 수행
[ngrinder 설명 및 사용법] : https://liltdevs.tistory.com/169

 


- locust

python 기반, 부수적인 GUI환경이 없어도 되기에, 테스트하기에 최소한의 리소스가 소요

로컬환경에서 천명상당의 유저의 테스트가 가능!

[locust 설명 및 사용법] : https://ellune.tistory.com/68
- 위 글에서는 성능이라고 되어있지만 부하테스트가 정확한 용어인듯!

등등

 

 

 

 


 

 

 

현재의 프로젝트는 python기반의 django 프레임워크로 만들어져있으므로 python기반 툴인 locust를 사용해보기로했다

 

 

 

1) locust 설치

 

#환경에 따라 필요한 명령어로 설치!
pip install locust

poetry add locust

 

 

 

 

2) locustfile.py 를 루트 디렉토리에 생성

 

locustfile.py 는 어떤 프로젝트를 테스트할지 정하는 파일로 일반적으로 루트 디렉토리에 생성한다

 

 

 

 

 

3) 테스트할 스크립트와 api 엔드포인트 작성

 

예제를 살펴보니 테스트코드와 비슷하게 client.get 등을 사용해 작성하는듯!

내가 테스트하고 싶은 부분은 prefetch를 사용한 부분이므로 해당 부분을 불러와 스크립트를 작성했다 

 

 

예제 :

 

from locust import HttpUser, task

class MyUser(HttpUser):
    @task
    def my_task(self):
        self.client.get("user/mycommunity/") # 실제로 테스트하려는 API엔드포인트 넣기

 

 

 

 

4) locust 명령어로 locustfile.py파일을 실행한다

 

#명령어로 locust 실행
locust -f locustfile.py

 

 

실행하면 이런 내용이 터미널에 뜬다!

 

 

 

 

 

5) 해당 링크로 접속하면 locust창이 뜨고, 부하테스트를 진행할 수 있다

 

 

Numbers of users는 트래픽을 만들어내는 유저 요청 수

Spawn rate는 몇 초에 한 번씩 유저가 추가되는지,

Host는 요청 보낼 서버의 주소!

 

 

낮은 숫자의 요청과 추가를 시작으로 점차 올리며 부하테스트를 하는 것이 일반적이고,

위에도 적어두었듯 1000명정도까지의 테스트가 가능하다고 한다!

 

 

아래는 트래픽을 100 / rate를 10으로 하여 로컬 서버를 넣고 요청 보내는 장면.

로그인을 안해두고 요청을 보내서 401에러가 나고있지만 요청수가 계속 늘어나며 상황을 도표로 보여주는 것을 볼 수 있었다.

 

 

 

 

 

sqlite3 (개발환경) 에는 너무 많은 트래픽을 주면 failure가 난다

더보기

like this.

 

웃긴건 prefetch 적용한건 faliure가 미미하게 생긴것...

예상치못하게 스트레스 테스트 비슷하게 해버림

 

둘다 유저 최대 요청 1000회 / 1초에 50씩 요청증가 / 3분간 테스트 조건은 동일함

 

1) prefetch 적용 전 코드

 

 

2) prefetch 적용한 후의 코드



+튜터님 피드백 받고..

너무 극적으로 달라서 트래픽을 낮추어 테스트하는 방향으로 결정했음

 

 

 

 


이후 적절한 수치를 찾아 헤멘 끝에...괜찮은 데이터를 얻었다!

100최대 요청 / 초당 7씩 증가 / 1분간

 

 

 

 

 

 

 

 

 

 

+ 쿼리 요청 갯수 줄인거 확인해서 발표자료에 넣어야함!