이두잉의 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)


python version 2에서 too many error 발생 시 참고

(https://github.com/locustio/locust/issues/92)


'다시보기' 카테고리의 다른 글

Alibaba Cloud ECS 간단 사용기  (0) 2019.03.27
Python locust load test tool  (0) 2018.12.07
ffmpeg 활용 영상 모니터링  (0) 2017.09.05
Wowza 설정 관련  (0) 2017.07.04
AWS Windows2008 R2 Client NFS 설정  (0) 2017.03.22
Javascript grunt jenkins  (0) 2017.01.05