posted by 구로공돌이 2025. 4. 8. 14:38

import requests
import time
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

URL = "https://example.com"  # 측정할 대상 URL
LOG_FILE = "full_response_log.txt"  # 로그 파일

def measure_backend_response_time(url):
    try:
        start = time.time()
        response = requests.get(url, timeout=10)
        end = time.time()
        duration_ms = round((end - start) * 1000, 2)
        return response.status_code, duration_ms
    except requests.exceptions.RequestException as e:
        return "ERROR", str(e)

def measure_rendering_time(url):
    try:
        options = Options()
        options.add_argument("--headless")
        options.add_argument("--no-sandbox")
        options.add_argument("--disable-dev-shm-usage")
        
        driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)

        start = time.time()
        driver.get(url)
        end = time.time()

        driver.quit()

        duration_ms = round((end - start) * 1000, 2)
        return duration_ms
    except Exception as e:
        return str(e)

if __name__ == "__main__":
    while True:
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
        # 1. requests.get()로 백엔드 응답 시간 측정
        status_code, backend_time = measure_backend_response_time(URL)
        
        # 2. Selenium으로 렌더링 시간 측정
        rendering_time = measure_rendering_time(URL)

        # 3. 로그 포맷 만들기
        log_line = f"{timestamp} | {URL} | status: {status_code} | backend: {backend_time}ms | render: {rendering_time}ms"
        
        # 4. 콘솔 + 파일 저장
        print(log_line)
        with open(LOG_FILE, "a") as f:
            f.write(log_line + "\n")
        
        # 5. 1분 대기
        time.sleep(60)