Locust를 사용한 API 부하 테스트

Locust를 사용한 API 부하 테스트

Locust를 사용한 API 부하 테스트: 소개

이전에 이런 상황에 처한 적이 있을 것입니다. 예를 들어 엔드포인트와 같이 무언가를 수행하는 코드를 작성합니다. Postman 또는 Insomnia를 사용하여 끝점을 테스트하면 모든 것이 잘 작동합니다. 엔드포인트를 클라이언트측 개발자에게 전달하면 개발자가 API 애플리케이션을 배포합니다. 그러나 사용자가 앱을 사용할 때 API가 실패합니다.

이것은 비즈니스에 비용이 많이 드는 것은 말할 것도 없고 매우 성가신 상황이 될 수 있습니다. 이것이 소프트웨어 개발자가 소프트웨어 시스템이 예상대로 작동하는지 확인하기 위해 소프트웨어 시스템에 대한 다양한 테스트를 수행하는 이유입니다. API도 다르지 않습니다. 배포하기 전에 최소한 성능 테스트와 보안 테스트를 수행해야 합니다.

성능 테스트는 기능 테스트와 로드 테스트로 그룹화할 수 있습니다. 기능 테스트는 일반적으로 Postman 또는 Insomnia를 사용하는 것입니다. API가 예상대로 작동하는지 확인합니다. 반면에 로드 테스트는 API가 실제 사용 및 최대 로드에서 어떻게 수행되는지에 더 관심이 있으며, 이것이 이 문서의 내용입니다. 부하 테스트에 대해 자세히 살펴보겠습니다.

API 부하 테스트란 무엇입니까?

API 부하 테스트는 개발자가 엔드포인트에서 일반 및 최고 부하를 시뮬레이션하는 데 사용하는 테스트 유형입니다. 이러한 종류의 테스트를 통해 개발자는 API를 배포하기 전에 API의 실제 성능을 평가할 수 있습니다. 시스템의 최대 작동 용량, 병목 현상(있는 경우) 및 성능 저하를 식별하는 데 도움이 됩니다. API 로드 테스트는 일반적으로 가상 사용자를 만든 다음 이를 사용하여 API의 기능을 동시에 테스트하는 방식으로 수행됩니다. 

API 부하 테스트는 응답 시간, 동시 사용자, 처리 속도, 리소스 사용률 수준, MTBF(Mean Time Between Failure), MTTF(Mean Time To Failure) 등과 같은 지표를 측정합니다. 이러한 모든 메트릭을 사용하여 API가 얼마나 잘 수행되고 있는지 확인할 수 있습니다.

부하 테스트 유형

여러 유형의 부하 테스트가 있으며 각 유형에는 사용 사례가 있습니다. 그들 중 일부를 살펴 보겠습니다.

부하 테스트: 이것이 부하 테스트의 기본 형식입니다. 정상 부하 및 예상 최대 부하에서 시스템(이 경우 API)의 성능을 평가하는 데 사용됩니다.

스트레스 테스트: 부하가 매우 높은 시스템의 성능을 평가하는 데 사용됩니다. 이 테스트의 목표는 장애 후 시스템이 복구되는지 여부와 복구하는 데 걸리는 시간을 확인하는 것입니다. 로드는 일반적으로 시스템의 용량을 초과할 때까지 천천히 증가합니다.

스파이크 테스트: 이것은 스트레스 테스트와 약간 비슷하지만 무거운 부하가 천천히 증가하는 것이 아니라 갑자기 적용된다는 점이 다릅니다. 이러한 종류의 테스트는 평균 사용자 또는 방문자 수가 갑자기 급증하거나 시스템에 DDOS 공격이 있을 때 발생하는 상황을 나타냅니다.

적시 테스트: 이 테스트는 위의 다른 테스트와 다릅니다. 그것은 당신의 시스템을 정상적인 부하의 80%(또는 그 정도) 이하로 놓고 장기간, 예를 들어 12~14시간 동안 실행 상태로 둡니다. 이러한 종류의 테스트는 시스템이 시간이 지남에 따라 얼마나 신뢰할 수 있는지를 결정합니다.

Locust로 API 부하 테스트

개발자는 API 부하 테스트를 위한 다양한 옵션에 액세스할 수 있습니다. 일반적인 부하 테스트 도구로는 Gatling, JMeter 및 Locust가 있습니다. 이 기사에서는 Locust에 초점을 맞출 것입니다.

Locust는 Google, Microsoft 및 Riot Games와 같은 최고의 회사에서 API를 테스트하는 데 사용하는 Python 기반 오픈 소스 부하 테스트 도구입니다. 이 기사에서는 API를 로드 테스트하는 방법을 보여줍니다. 

이 자습서에서는 Flask를 사용하여 간단한 API를 만들 것입니다. 저를 따라하시거나 Node 또는 사용하기 편한 프레임워크를 사용하여 API를 생성하실 수 있습니다.

요구조건 니즈

파이썬 3

설정 및 설치

먼저 글로벌 파이썬 환경을 망치지 않도록 PC에 가상 환경을 설정해야 합니다. 그렇게 하려면 다음 명령을 실행하십시오. 이러한 명령은 Windows 터미널에 적용됩니다.

$ mkdir 프로젝트

$ cd /d 경로\투\프로젝트

$ 파이썬 -m venv venv

$ venv\스크립트\활성화

 

먼저, 우리는 프로젝트 예배 규칙서. 그런 다음 현재 디렉토리를 다음으로 변경했습니다. 프로젝트. 그런 다음 해당 디렉터리 내에 Python용 가상 환경을 만들고 활성화했습니다. 

이제 설치를 진행하겠습니다. 플라스크(부하 테스트할 끝점을 만드는 데 사용합니다.) 메뚜기 자체. 

 

Flask를 설치하려면 다음을 실행합니다. 당신이에 있는지 확인 프로젝트 가상 환경을 만든 곳.

$ 핍 설치 플라스크

 

Locust를 설치하려면 다음을 실행하십시오.

$ pip 설치 메뚜기

 

완료되면 다음 명령을 입력하십시오. 당신이 당신에 있는지 확인 프로젝트 이 작업을 수행할 때 디렉토리.

$ 복사 nul __init__.py

$ mkdir 앱

$ 복사 nul app\app.py

$ 복사 nul app\__init__.py

 

이 명령은 Flask를 사용하여 끝점을 만드는 데 사용할 몇 가지 파일을 만듭니다. 그런데 파일 탐색기를 사용하여 이러한 파일을 만들 수도 있습니다. 하지만 그게 무슨 재미야? 완료되면 아래 코드를 앱.파이

플라스크에서 가져오기 플라스크, jsonify, 요청

앱 = Flask (__ name__)

자동차 모델 = [

  { '브랜드': '테슬라', '모델': '모델 S' }

]

 

비행기 모델 = [

  { '브랜드': '보잉', '모델': '747' }

]

 

@app.route('/자동차')

데프 get_cars():

  jsonify(car_models) 반환

@app.route('/비행기')

데프 get_planes():

  jsonify(plane_models) 반환

__name__ == '__main__'인 경우 :

    app.run(디버그=참)  

 

위의 코드에는 메서드가 포함되어 있습니다. get_cars 자동차 브랜드 및 모델 목록을 얻는 데 사용됩니다. get_planes 비행기 브랜드 및 모델 목록을 얻는 데 사용됩니다. 이 엔드포인트를 로드 테스트하려면 app.py를 실행해야 합니다. 그렇게 하려면 아래 명령을 실행하십시오.

$ 파이썬 경로\to\app.py

실행하면 다음과 같이 표시됩니다.

API 부하 테스트 1

터미널에서 URL을 복사하고 입력하면 자동차 or 비행기 / 다음에 데이터를 볼 수 있어야 합니다. 그러나 우리의 목표는 브라우저가 아닌 locust로 엔드포인트를 테스트하는 것입니다. 그렇게 합시다. 루트에서 다음 명령을 실행하십시오. 프로젝트 디렉토리.

 

$ 복사 nul locust_test.py

 

그러면 루트에 'locust_test.py' 파일이 생성됩니다. 프로젝트 예배 규칙서. 완료되면 파일을 열고 아래 코드를 붙여넣습니다. 곧 설명하겠습니다.

 

수입 시간

메뚜기 가져오기에서 HttpUser, 작업, 사이

 

클래스 UserBehaviour(HttpUser):

    wait_time = 사이(5, 10)

 

    @일

    데프 get_cars(자신):

        self.client.get('/자동차')

    

    @일

    데프 get_planes(자신):

        self.client.get('/평면')

 

이것은 Locust를 사용하여 API를 로드 테스트하는 기본적인 예입니다. 먼저 클래스를 생성합니다. 사용자 행동, 적절한 이름을 지정할 수 있지만 확장해야 합니다. HttpUser. HTTP사용자 우리가 지정하는 작업을 수행하기 위해 여러 가상 사용자의 인스턴스화를 처리하는 클래스입니다. 사용자 행동 클래스입니다. 

메소드를 데코레이션하여 작업을 지정합니다. @일 데코레이터. 라는 함수도 있습니다. 사이() 다음 작업을 실행하기 전에 대기할 시간 범위(초)를 지정할 수 있습니다. 코드에서 5~10초 범위를 할당한 것을 볼 수 있습니다. 

코드를 실행하려면 가상 환경에 있는지 확인하십시오. 생성한 것을 API를 제공하는 서버에서 사용 중인 경우 새 터미널을 열고 디렉터리를 프로젝트 디렉토리를 만들고 생성한 가상 환경을 활성화합니다. 위에서 가상 환경을 활성화하는 명령을 찾을 수 있습니다. 이제 터미널에 아래 명령을 입력하십시오.

 

$ 메뚜기 -f locust_test.py

 

다음과 같은 내용을보아야합니다.

API 부하 테스트 2

기본적으로 Locust의 웹 인터페이스는 http://localhost/8089에 있습니다. 웹 사이트를 방문하면 다음과 같은 인터페이스가 표시됩니다.

API 부하 테스트 3

인터페이스에서 사용자 수, 스폰 속도(초당 생성된 사용자 수) 및 호스트를 지정할 수 있습니다. 서버가 실행되고 있는 터미널을 확인하여 호스트의 주소를 얻을 수 있습니다. 우리의 경우 포트 5000에 있습니다. 클릭하면 떼를 지어 시작하고, 아래 인터페이스가 표시됩니다.

API 부하 테스트 4

여기에는 실패한 요청 수, 요청에 대한 평균 시간, 요청에 대한 최소 시간, 초당 요청 등과 같은 다양한 유용한 지표가 표시됩니다. 표시된 내용에 만족하면 중지 버튼을 클릭할 수 있습니다. 


게다가 통계 탭에는 차트 더 많이 보여주는 탭 정보 아래 이미지와 같은 그래프 형태로

이있다 초당 총 요청 그래프, 응답 시간 그래프,사용자 그래프, 모두 시간에 대해 플롯되었습니다. 그래프를 사용하여 고정된 응답 시간에 허용되는 사용자 수를 확인하거나 사용자 수가 증가함에도 불구하고 일정한 응답 시간에 대한 차트를 관찰할 수 있습니다. 이것들을 공유하고 싶다면 통계 에서 보고서를 다운로드할 수 있습니다. 데이터 다운로드 탭.

결론적으로...

API 부하 테스트는 개발 프로세스에서 중요한 활동이므로 설계 주기에 통합해야 합니다. 그런데 사용자 수와 스폰 비율에 대한 값을 변경하여 다른 부하 테스트 유형을 수행할 수도 있습니다. 

급증 테스트를 수행하려면 사용자 수에 대해 큰 값(예: 2000)을 지정한 다음 생성률에 대해 똑같이 큰 값(예: 500)을 지정합니다. 즉, 4초 안에 2000명의 사용자가 모두 생성되어 엔드포인트에 액세스하게 됩니다. 스트레스 테스트는 비슷하지만 스폰률 값이 훨씬 낮습니다. 할 수 있는 모든 것을 알아보려면 Locust를 확인하세요. 선적 서류 비치