|
""" |
|
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 訊息""" |
|
|
|
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() |