| -- | 부하 테스트(Load Testing) | 스트레스 테스트(Stress Testing) |
|---|---|---|
| 도메인 | 성능 테스트의 하위 집합 | 성능 테스트의 하위 집합 |
| 테스트 목적 | 전체 시스템의 성능 확인 | 중단점에서의 동작, 복구 가능성 확인 |
| 테스트 방법 | 임계점 까지의 가상 유저 수를 유지하며 모니터링 | 중단점 이상까지 가상 유저를 점진적으로 증가 |
| 테스트 대상 | 전체 시스템 | 삭발된 트랜젝션에만 집중하여 테스트 |
| 테스트 완료 시기 | 예상 부하가 모두 적용된 경우 | 시스템 동작이 중단되었을 경우 |
| 결과 | 부하 분산 문제 최대 성능 시간 당 서버 처리량 및 응답 시간 최대 동시 사용자 수 등 | 안정성 복구 가능성 |
테스트 스크립트 작성하기
Django 서버 실행
cd performece_test
python - m venv venv
source venv/Scripts/activate
(venv) pip install -r requirements.txt
(venv) python manage.py makemigrations
(venv) python manage.py migrate
(venv) python manage.py runserver
(venv) pip install locust
(venv) locust -f ./locust_test.py
Locust 실행시 아래의 주소 발생
웹 실행 화면
웹 실행화면 - statistics 탭
웹 실행화면 - Charts 탭
웹 실행 화면 Failures 탭
웹 실행 화면 Current ratio 탭
가상환경 설정
테스트용 Django 프로젝트 및 앱 생성
Normal Sort, Bubble Sort, priority_queue
from django.http import JsonResponse
from rest_framework.decorators import api_view
import random
array_length = 1000
random_range = 5000
@api_view(['GET'])
def bubble_sort(request):
li = []
for i in range(array_length):
li.append(random.choice(range(1, random_range)))
for i in range(len(li) - 1, 0, -1):
for j in range(i):
if li[j] < li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
context = {
'top': li[0]
}
return JsonResponse(context)
@api_view(['GET'])
def normal_sort(request):
li = []
for i in range(array_length):
li.append(random.choice(range(1, random_range)))
li.sort(reverse=True)
context = {
'top': li[0]
}
return JsonResponse(context)
from queue import PriorityQueue
@api_view(['GET'])
def priority_queue(request):
pq = PriorityQueue()
for i in range(array_length):
pq.put(-random.choice(range(1, random_range)))
context = {
'top': -pq.get()
}
return JsonResponse(context)
locust_test.py
from locust import HttpUser, task, between
class SampleUser(HttpUser):
wait_time = between(1, 3)
def on_start(self):
print('test start')
@task
def normal_sort(self):
self.client.get("test/normal_sort/")
@task
def priority_queue(self):
self.client.get("test/priority_queue/")
@task
def bubble_sort(self):
self.client.get("test/bubble_sort/")