LocustiIO를 사용하여 Django 어플리케이션 로드 테스트
LocustIO은python으로 작성된 소스 오픈 도구로 load testing의 웹 응용 프로그램에 사용됩니다.웹 UI를 사용하여 테스트 결과를 보는 것은 간단하면서도 쉽습니다.그것은 여러 대의 기계에 분포할 수 있는 확장 가능한 것이다.
본고는 locust를 사용하여django 웹 응용 프로그램에 부하 테스트를 하는 예시를 보여 준다.
부하 테스트를 시작하기 전에, 우리는 테스트할 페이지를 확인해야 한다.우리의 예에서, 우리는 사용자가 그들이 서로 다른 페이지에 로그인하고 방문하며 CSRF가 보호하는 폼의 장면을 제출하기를 바란다.
LocustiIO는 웹 응용 프로그램에서 사용자가 이 작업을 수행하는 것을 모의하는 데 도움을 줍니다.성능을 평가하는 기본 사상은 서로 다른 임무를 위해 요청 수를 생성하고 이러한 요청의 성공과 실패를 분석하는 것이다.
설치
pip install locustio
LocustiIO는 python 2를 지원합니다.x만.현재python 3은 지원되지 않습니다.x.메뚜기 줄
메뚜기 파일을 만드는 것은 웹 응용 프로그램 사용자의 동작을 모의하기 위해서입니다.
from locust import HttpLocust, TaskSet, task
class UserActions(TaskSet):
def on_start(self):
self.login()
def login(self)
# login to the application
response = self.client.get('/accounts/login/')
csrftoken = response.cookies['csrftoken']
self.client.post('/accounts/login/',
{'username': 'username', 'password': 'password'},
headers={'X-CSRFToken': csrftoken})
@task(1)
def index(self):
self.client.get('/')
for i in range(4):
@task(2)
def first_page(self):
self.client.get('/list_page/')
@task(3)
def get_second_page(self):
self.client.('/create_page/', {'name': 'first_obj'}, headers={'X-CSRFToken': csrftoken})
@task(4)
def add_advertiser_api(self):
auth_response = self.client.post('/auth/login/', {'username': 'suser', 'password': 'asdf1234'})
auth_token = json.loads(auth_response.text)['token']
jwt_auth_token = 'jwt '+auth_token
now = datetime.datetime.now()
current_datetime_string = now.strftime("%B %d, %Y")
adv_name = 'locust_adv'
data = {'name', current_datetime_string}
adv_api_response = requests.post('http://127.0.0.1:8000/api/advertiser/', data, headers={'Authorization': jwt_auth_token})
class ApplicationUser(HttpLocust):
task_set = UserActions
min_wait = 0
max_wait = 0
위의 예시에서 locust 파일은 사용자가 수행하는 4개의 작업 그룹을 정의합니다. 로그인 후 홈페이지로 이동하여 목록 페이지에 여러 번 접근하고 폼을 제출합니다.매개 변수min\uwait와max\uwait는 서로 다른 사용자 요청 사이의 대기 시간을 정의합니다.
메뚜기
locustfile 디렉터리로 이동합니다.py와run.
locust --host=<host_name>
응용 프로그램의 URL은 어디에 있습니까?Locust 인스턴스는 http://127.0.0.1:8089 로컬로 실행
새 테스트를 시작할 때 locust 웹 UI는 시뮬레이션할 사용자 수와 부화율 (초당 사용자 수) 을 입력하라고 알려 줍니다.
우리는 우선 다섯 명의 사용자를 모의하여 부화율이 초당 한 명의 사용자로 하고 결과를 관찰하고자 한다.
테스트가 시작되면 locustiIO는 모든 작업을 수행하고 요청한 성공/실패 결과를 기록합니다.이 결과는 다음과 같은 형식으로 표시됩니다.
위의 예시에서 알 수 있듯이 로그인 요청과 여러 개의 요청이 페이지를 가져오고 폼을 제출합니다.사용자 수가 적기 때문에 페일오버가 없습니다.
이제 요청 수를 1000명의 사용자로 늘리고 부화율 500으로 결과를 보겠습니다.
우리가 볼 수 있는 바와 같이, 이러한 상황에서 사용자와 요청 수량이 증가함에 따라, 홈페이지와 게시 폼을 가져오는 일부 요청은 실패할 것이다.현재의 아날로그 사용자 집합을 사용하면 우리는 7퍼센트의 고장률을 얻었다.
관찰:
결과는 다음과 같은 테스트 데이터를 생성합니다.
LocustiIO는 결과를 양식으로 다운로드하는 옵션을 제공하지만 기존의 도형이나 도표 형식의 결과 시각화 기능은 없습니다.
http://localhost:8089/stats/requests에서 JSON 형식으로 로드 테스트 결과를 볼 수 있습니다.이 요청들은 다른 도구(예를 들어 Tableau, matplotlib 등)를 사용하여 데이터를 시각적으로 입력할 수 있습니다.
따라서 우리는 매우 간단하고 효과적인 방식으로 서로 다른 단점의 시스템 성능을 확정할 수 있다.우리는 테스트를 확장하여 더 많은 단점에 더 많은 장면을 추가하고 신속하게 답을 얻을 수 있다.
이 글은 처음 Apcelent Tech Blog년에 발표되었다.
Reference
이 문제에 관하여(LocustiIO를 사용하여 Django 어플리케이션 로드 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/apcelent/load-testing-a-django-application-using-locustio-1hd0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)