""" API 測試腳本 用於測試 LINE Bot 的各種功能 """ import requests import json from typing import Dict, Any class APITester: def __init__(self, base_url: str = "http://localhost:7860"): self.base_url = base_url def test_health_check(self): """測試健康檢查端點""" try: response = requests.get(f"{self.base_url}/health") print(f"Health Check: {response.status_code}") print(f"Response: {response.json()}") return response.status_code == 200 except Exception as e: print(f"Health check failed: {e}") return False def test_root_endpoint(self): """測試根端點""" try: response = requests.get(f"{self.base_url}/") print(f"Root Endpoint: {response.status_code}") print(f"Response: {response.json()}") return response.status_code == 200 except Exception as e: print(f"Root endpoint test failed: {e}") return False def simulate_line_message(self, message: str, user_id: str = "test_user"): """模擬 LINE 訊息""" # 這是一個簡化的 LINE webhook 格式 webhook_data = { "events": [ { "type": "message", "message": { "type": "text", "text": message }, "source": { "type": "user", "userId": user_id }, "replyToken": "test_reply_token" } ] } try: response = requests.post( f"{self.base_url}/webhook", json=webhook_data, headers={"Content-Type": "application/json"} ) print(f"LINE Message Test: {response.status_code}") print(f"Message: {message}") return response.status_code == 200 except Exception as e: print(f"LINE message test failed: {e}") return False def run_tests(): """執行所有測試""" tester = APITester() print("=== API 測試開始 ===\n") # 測試基本端點 print("1. 測試根端點...") tester.test_root_endpoint() print() print("2. 測試健康檢查...") tester.test_health_check() print() # 測試各種訊息 test_messages = [ "查詢用戶 張三", "找訂單 ORD001", "查詢商品 iPhone", "價格 1000 到 5000 的商品", "統計用戶數量", "幫助" ] print("3. 測試 LINE 訊息處理...") for i, message in enumerate(test_messages, 1): print(f"3.{i} 測試訊息: {message}") tester.simulate_line_message(message) print() print("=== 測試完成 ===") if __name__ == "__main__": run_tests()