본문 바로가기

Programming/Infra

부하테스트 오픈소스: Locust

Locust는 부하테스트 중에 하나이다.

부하테스트의 종류는 nGrinder, Apache Jmeter 등 다양한 툴들이 존재하지만, 그중에 좀 간단해보이고 UI가 괜찮은(?) Locust를 사용해봤다.

 

설치

설치는 간단하다. 단, 파이썬 3.6이상 버전이 깔려있어야한다.

$ sudo pip3 install locust

 

스크립트 작성

테스트 스크립트을 파이썬으로 작성해야한다. 파이썬을 잘모르지만, 공식문서를 참고하여 간단한 health-check를 하는 스크립트를 다음과 같이 작성했다.

import time
from locust import HttpUser, task
from locust.user.wait_time import constant

class QuickstartUser(HttpUser):
    wait_time = constant(1)

    @task
    def monitor_check(self):
        self.client.get("/health-check")

wait_time은 몇초 간격으로 테스트할지인데, between등 다양한 함수가 존재한다.

필자는 그냥 고정된 1초마다 요청을 보내기 위해 constant 함수를 사용했다.

@task 어노테이션이 달린 태스크가 실제로 수행될 로직이다. 여러 태스크를 만들어, weight를 설정해서 테스트를 할 수도 있다.

 

스크립트 관련해서 자세한 작성법은 아래 링크를 참조한다.

- https://docs.locust.io/en/stable/index.html (Locust 공식문서)

- http://engineersinkorea.com/2020/01/19/writing-a-locustfile/

 

실행

이제 스크립트 작성된 것을 실행시켜본다.

저장된 스크립트 파일명을 인수에 넣어 locust를 다음과 같이 실행한다.

$ locust -f ./health_check.py

 

이후 Locust 웹브라우저(localhost:8089)로 접근해서 호스트와 부하를 설정해준다.

브라우저에 접근하면 위와 같은 화면을 볼 수 있는데, 위에서부터 설명하면 다음과 같다.

- 총 테스트 유저 수 (총 부하 수)

- 초마다 몇명을 증가시킬 것인지

- host 주소

 

그러고 나서 실행을 하면 스크립트가 작동하며 결과를 보여준다.

위 그래프는 초마다 몇개의 요청이 실행되고 실패했는지 보여주고 있고, 아래쪽은 응답 시간을 보여주고 있다.

 

오류

만약 제대로 실행되지 않았다면, 브라우저에서 Exceptions탭의 로그를 살펴본다.

나의 경우엔 Host URL 오타가 있으므로 다음과 같은 오류가 발생했다.