일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 장고
- gpu 병렬처리
- selenium
- 링크
- 바로학교
- 충북
- 구글 드라이브
- 추천 영상
- venv
- 아이폰
- MongoDB
- List
- 코딩
- 파이썬
- 리스트
- docker-compose
- 깃허브
- 유튜브
- 알고리즘
- G-Suite
- nocookie
- Google Drive
- 그리디 알고리즘
- python
- pymongo
- 단축어
- Django
- 탐욕 알고리즘
- DB
- flask
Archives
- Today
- Total
SSAMKO의 개발 이야기
[django] api 속도(응답시간) 테스트 코드 본문
반응형
api 개발 후 각 api의 응답시간을 체크해 성능지표를 만들고자 할 때, 간단히 사용할 수 있는 코드.
unittest, pytest, locust 같이 테스트를 위한 도구들이 있지만,
간단히 응답 시간 정도만 체크하고 싶어서 작성한 코드입니다.
import os
import requests
import datetime
import time
class valid_api:
def __init__(self, count=10):
self.host = 'http://localhost/'
self.urls = [
'schedule',
'segments/goods',
'rec_prod',
'rec_prod/user',
'rec_prod/user/hourly',
]
self.result = dict()
self.count = count
def validation(self):
for url in self.urls:
full_url = self.host + url
results = []
for i in range(self.count):
start = datetime.datetime.now()
res = requests.get(full_url)
assert res.status_code == 200
passed_t = datetime.datetime.now() - start
results.append(passed_t.total_seconds())
time.sleep(0.1)
print(f'\rturn: {i + 1}', end='')
print()
print(url)
print(sum(results) / self.count)
self.result[url] = results
def save_results(self):
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
with open(os.path.join(BASE_DIR, f'{self.count}_api_validation.txt'), 'w') as f:
for k,v in self.result.items():
doc = f"api: {k}\n"
doc += f'mean: {sum(v) / len(v):.2f}\n'
doc += f'max: {max(v):.2f}\n'
doc += f'min: {min(v):.2f}\n\n'
f.write(doc)
if __name__ == '__main__':
tester = valid_api(100)
tester.validation()
tester.save_results()
이렇게 하고 실행하면 아래와 같은 결과를 얻을 수 있습니다.
# 100_api_validation.txt
api: schedule
mean: 0.05
max: 1.25
min: 0.03
api: segments/goods
mean: 0.59
max: 1.25
min: 0.51
api: rec_prod
mean: 0.78
max: 0.94
min: 0.66
api: rec_prod/user
mean: 0.01
max: 0.12
min: 0.01
api: rec_prod/user/hourly
mean: 0.12
max: 0.17
min: 0.10
git 코드는 아래에서 확인할 수 있습니다.
github.com/teacherSsamko/TIS/blob/master/django_study/speed_validation_api.py
반응형
'Django' 카테고리의 다른 글
[django] migration file 초기화 하기 (0) | 2021.07.02 |
---|---|
[Django] rest_framework APIClient 'json' 사용시 request 처리 (0) | 2021.07.01 |
[django] 데코레이터로 API에 토큰(token) 적용하기 (0) | 2021.01.20 |
[django] DB연동없이 파일 업로드 받아 처리하는 API (2) | 2021.01.18 |
[Django] Test 코드 작성시 header 추가하기 (1) | 2021.01.15 |
Comments