SSAMKO의 개발 이야기

[django] api 속도(응답시간) 테스트 코드 본문

Django

[django] api 속도(응답시간) 테스트 코드

SSAMKO 2021. 1. 24. 06:57
반응형

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

 

teacherSsamko/TIS

Today I studied. Contribute to teacherSsamko/TIS development by creating an account on GitHub.

github.com

 

반응형
Comments