mickeywu520's picture
first commit
cd9bca9
"""
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()