이두잉의 AWS 세상

Python locust load test tool

2018.12.07 14:45 - leedoing leedoing

보통 벤치마크는


간단히 ApacheBenchmark를 통해 request 성공률, Latency 정도를 확인하거나,

(ab -n 100 -c 5 -C "somecookie=rawr" http://google.com/)


Jmeter, nGrinder(Java)와 같은 프로그램을 통해 더 많은 정보를 확인하거나(nGrinder는 안 써봄),

장점

1. GUI 환경

2. 필요 시 플러그인 사용


단점

1. GUI 환경

2. 필요 시 플러그인 사용

3. 환경 구성이 매우 짜증남

4. 메모리 소모가 매우 큼


Jmeter 클러스터를 구성해놓은 VM들은 다시 start 하기도 싫음... 뭔가 버벅이는 느낌.. 



그러던 중 Python locust를 발견(https://docs.locust.io/en/stable/installation.html)

장점

1. Python locust는 python만 설치되어 있으면 됨

2. GUI 환경이 아님. (Jmeter의 경우도 가능하다고는 하나, 그럴거면 Jmeter를 쓸 필요가 없는 듯)

3. python 테스트 시나리오를 작성하고 수행하면 끝

4. 메모리도 Jmeter에 비해 훨씬 덜 소모함


단점

1. GUI 환경이 아님. (장점이자 단점)

2. python 테스트 시나리오를 작성하고 수행하면 끝

3. Default 구성 시에 초당 vhost 생성이 linear한 증가밖에 되지 않음



[사용 방법]

locust 이벤트 순서

1. Locust setup

2. TaskSet setup

3. TaskSet on_start

4. TaskSet tasks…

5. TaskSet on_stop

6. TaskSet teardown

7. Locust teardown


Document Sample 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from locust import HttpLocust, TaskSet, task
 
class UserBehavior(TaskSet):
    def on_start(self):
        """ on_start is called when a Locust start before any task is scheduled """
        self.login()
 
    def on_stop(self):
        """ on_stop is called when the TaskSet is stopping """
        self.logout()
 
    def login(self):
        self.client.post("/login.php", {"user_id":"admin""user_pw":"1324"})
 
    def logout(self):
        self.client.post("/logout.php", {"user_id":"admin""user_pw":"1324"})
 
    @task(2)
    def index(self):
        self.client.get("/main.php")
 
    @task(1)
    def profile(self):
        self.client.get("/")
 
class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 1000
    max_wait = 5000
 
cs


on_start -> login // Task 수행 // on_stop -> logout

task 데코레이션의 경우 task fucntion의 weigth 수치(index 2 : 1 profile)

min_wait, max_wait: task function 호출 간격(1~5초 사이로 task 수행)


실행 명령어: locust -f my_locust_file.py --host=타겟주소

(slave 실행: locust -f my_locustfile.py --slave --master-host=192.168.0.14)


브라우저: https://localhost:8089 접속(vhost와 초당 vhost 증가율)


결과





locust 테스트 후 느낀 점

주요 기능은 Document를 통해 짧은 시간내에 학습이 가능했음

프로그램이 가볍고, 대부분 필요한 결과 데이터는 받을 수 있어 만족스러움. 만약 부하테스트를 진행한다면 locust를 애용할 듯


세련된 스크립팅은 아래 ktanakaj씨를 참고해서 공부해야 할 듯

(https://github.com/ktanakaj/locust-sample)