LocustiIO를 사용하여 Django 어플리케이션 로드 테스트

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퍼센트의 고장률을 얻었다.
관찰:
  • 대부분의 장애는 로그인에서 발생합니다.일부 실패는 프로그램이 짧은 시간 간격으로 같은 계정에서 여러 번 로그인하지 못하게 하는 데서 비롯된다.
  • 페이지 요청 실패율 매우 낮음 - 3%
  • Post 요청의 실패율이 2%보다 낮음
  • 우리는 서로 다른 범위의 사용자를 위해 여러 개의 테스트를 실행할 수 있으며, 테스트 결과에 따라 응용 프로그램이 얼마나 큰 압력에서 실행할 수 있는지 확정할 수 있다.
    결과는 다음과 같은 테스트 데이터를 생성합니다.
  • 요청 유형 - 시뮬레이션할 각 작업과 관련이 있습니다.
  • Name-작업/요청의 이름입니다.
  • Number of requests - 작업의 요청 총 수입니다.
  • Number of failures - 실패 요청의 총 수입니다.
  • 이 요청한 중위, 평균, 최대, 최소값(밀리초).
  • Content size - 요청 데이터의 크기입니다.
  • 초당
  • 개의 요청이 있습니다.
  • 실패 요청에 대한 자세한 내용은 Failures 탭에서 확인할 수 있습니다. 이 탭은 실패의 근본 원인을 확인하는 데 사용됩니다.

    LocustiIO는 결과를 양식으로 다운로드하는 옵션을 제공하지만 기존의 도형이나 도표 형식의 결과 시각화 기능은 없습니다.
    http://localhost:8089/stats/requests에서 JSON 형식으로 로드 테스트 결과를 볼 수 있습니다.이 요청들은 다른 도구(예를 들어 Tableau, matplotlib 등)를 사용하여 데이터를 시각적으로 입력할 수 있습니다.
    따라서 우리는 매우 간단하고 효과적인 방식으로 서로 다른 단점의 시스템 성능을 확정할 수 있다.우리는 테스트를 확장하여 더 많은 단점에 더 많은 장면을 추가하고 신속하게 답을 얻을 수 있다.
    이 글은 처음 Apcelent Tech Blog년에 발표되었다.

    좋은 웹페이지 즐겨찾기