이두잉의 AWS 세상

Python locust load test tool

2018.12.07 14:45 - leedoing leedoing

보통 벤치마크는


간단히 ApacheBenchmark를 통해 Req 임계치, 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. GUI 환경이 아님

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

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

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


단점

1. GUI 환경이 아님

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

3. Request 주기 설정이 유연하지 못함(가능한가? 확인해봐야됨)



[사용 방법]

python 설치... pip 패키저로 locust 설치..


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)