Locust 기본설치와 확인

준비작업

현재(2020년6월17일) Locust최신버젼은 1.0.3입니다. 해당버젼은 파이썬 3.6이상에서만 설치가 가능합니다.

pip install locust

Load test를 수행할 웹서버가 있어야겠죠? Python 초간단 웹서버페이지를 참고하여 웹서버를 실행합니다. 로컬에 띄운 서버를 확인해주세요.

$ curl http://localhost:8000
Hello, world

Locustfile 만들기

locustfile.py은 locust에게 뭘 어떻게 하라고 작업들을 지시해놓는 파일입니다. 여기서 우리는 HttpLocust클래스를 상속받아서 웹서비스의 load test를 하는 locustfile을 만들거에요. locustfile.py에 대한 자세한 설명은 여기를 참조하세요.

from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(5, 9)

    @task
    def my_task(self):
        self.client.get("/")

위의 파일에는 / root page를 호출하라는 미션이 명시되어있습니다. 그러면 이 제 locust를 실행해볼까요? locust를 실행해도 바로 load test가 시작되는건 아니니까 안심하고 아래 command line 명령어를 실행하세요.

$ locust -f locustfile.py --host=http://localhost:8000
[2020-01-20 07:59:53,646] MyComputer/INFO/locust.main: Starting web monitor at http://*:8089
[2020-01-20 07:59:53,646] MyComputer/INFO/locust.main: Starting Locust 0.13.5

locust에게 수행할 미션이 적혀있는 파일의 위치를 알려주고, load test를 수행할 웹서비스의 host도 여기서 넘겨주도록 합니다. 그래야 로컬에서 테스트가 끝나면 별도의 코드 수정없이 바로 서버에서 실행할수 있으니까요.
위의 command를 실행하면 locust가 제공하는 Web UI에 접속할수 있습니다.
인터넷 브라우저를 하나 열어서 http://localhost:8089를 open하세요.

아래와 같은 화면이 보이신다면 실행에 성공하신거에요.

동시접속자수(Number of total users to simulate)는 1명으로 적을게요, 그리고, 접속빈도수(Hatch rate)은 1초로 할게요. 그러면 1명이 1초에 한번씩 지정한 Host, http://localhost:8000에 요청을 하는데요, 아까 우리는 TaskSet에 task를 한개밖에 안만들었자나요(my_task). 만약에 우리가 TaskSet에 task를 여러개 만들었다면, 돌아가면서 한번씩 실행하게 되겠지만, 현재는 한개밖에 없으니까 1명이 1초에 한번씩 MyTaskSet.my_task함수를 실행하게 될거에요. my_task에서는 root페이지를 호출하도록 명시해놓았으니까, 결국 1초에 한번씩 root페이지가 호출되겠죠? 어디한번 그렇게 되는지 확인해볼까요?

동시접속자 수와, 호출빈도를 1로 입력하고, Start swarming버튼을 눌러주세요. 그러면 command line에서는 아래와 같이 호출이 swarming이 시작되었다는 메세지가 추가됩니다.

$ locust -f locustfile.py --host=http://localhost:8000
...
[2020-01-20 08:11:29,282] Slim-MBP-15/INFO/locust.runners: Hatching and swarming 1 clients at the rate 1 clients/s...
[2020-01-20 08:11:30,288] Slim-MBP-15/INFO/locust.runners: All locusts hatched: RequestLocust: 1

그리고 Web UI에서는 요청이 얼마나 이루어지고 있는지 통계치를 계속 갱신하면서 보여주고요.

실제로 아까 우리가 실행한 웹서버가 요청을 받고 있는지 한번 볼까요?

$ python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...
127.0.0.1 - - [20/Jan/2020 08:11:29] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2020 08:11:30] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2020 08:11:31] "GET / HTTP/1.1" 200 -
...
127.0.0.1 - - [20/Jan/2020 08:11:52] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2020 08:11:53] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2020 08:11:54] "GET / HTTP/1.1" 200 -

웹서버에도 1초에 한번씩 access log가 추가되고 있어요. 호출이 잘 이루어지고 있네요. 이제 그만 stop해야겠어요. locust의 Web UI에서 우측상단의 빨간색 STOP버튼을 누르세요.

그러면 웹서버로의 요청이 중지됩니다.

일단 실행이 되는걸 보여드리기 위해서 Number of users를 1명 Hatch rate도 1로 심플하게 설정해서 보여드렸는데요, Hatch rate에 대한 설명을 조금더 드리자면요, Number of users를 1000명으로 설정하시면요, 처음부터 1000명이 바로 접속하게 할수도 있지만, Hatch rate이라는걸 설정해서 초당 몇명씩 증가하도록 설정할수도 있어요. 예를 들어 Number of users를 1000으로 하고, Hatch rate을 10으로 주면, 처음에는 10명으로 시작해서, 매 1초가 지날때마다 10명씩 증가해서 총 1000명이 될때까지 10명씩 계속 늘어나는거에요. 사용자의 증가율에 따른 퍼포먼스를 보고 싶은 경우에 Hatch rate를 이용하면 좋겠죠.


Source: http://dejavuqa.tistory.com/131