Files
meeting-room/backend/test_api.py

168 lines
5.0 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""
龙虾议事厅 - API 测试脚本
自动测试所有核心功能
"""
import requests
import json
import sys
API_BASE = 'http://localhost:8000/api/v1'
def print_result(name, success, data=None):
"""打印测试结果"""
if success:
print(f"{name}")
if data:
print(f" {json.dumps(data, indent=2, ensure_ascii=False)}")
else:
print(f"{name}")
return success
def test_register():
"""测试注册"""
print("\n=== 测试用户注册 ===")
try:
response = requests.post(f'{API_BASE}/auth/register/', json={
'username': 'testuser',
'email': 'test@example.com',
'password': 'password123'
})
if response.status_code in [200, 201]:
return print_result("用户注册", True, response.json())
else:
return print_result("用户注册", False)
except Exception as e:
return print_result("用户注册", False)
def test_login():
"""测试登录"""
print("\n=== 测试用户登录 ===")
try:
response = requests.post(f'{API_BASE}/auth/login/', json={
'username': 'test',
'password': 'test123'
})
if response.status_code == 200:
data = response.json()
print_result("用户登录", True, data)
return data.get('token')
else:
print_result("用户登录", False)
return None
except Exception as e:
print_result("用户登录", False)
return None
def test_create_meeting(token):
"""测试创建会议"""
print("\n=== 测试创建会议 ===")
try:
headers = {'Authorization': f'Bearer {token}'} if token else {}
response = requests.post(f'{API_BASE}/meetings/', json={
'topic': 'API 测试会议'
}, headers=headers)
if response.status_code in [200, 201]:
data = response.json()
print_result("创建会议", True, data)
return data.get('id')
else:
print_result("创建会议", False)
print(f" 错误:{response.text[:200]}")
return None
except Exception as e:
print_result("创建会议", False)
return None
def test_list_meetings(token):
"""测试获取会议列表"""
print("\n=== 测试获取会议列表 ===")
try:
headers = {'Authorization': f'Bearer {token}'} if token else {}
response = requests.get(f'{API_BASE}/meetings/', headers=headers)
if response.status_code == 200:
data = response.json()
print_result("获取会议列表", True, data)
return data
else:
print_result("获取会议列表", False)
return None
except Exception as e:
print_result("获取会议列表", False)
return None
def test_send_message(token, meeting_id):
"""测试发送消息"""
print("\n=== 测试发送消息 ===")
try:
headers = {'Authorization': f'Bearer {token}'} if token else {}
response = requests.post(
f'{API_BASE}/meetings/{meeting_id}/send_message/',
json={'content': 'Hello, 这是测试消息!'},
headers=headers
)
if response.status_code in [200, 201]:
data = response.json()
print_result("发送消息", True, data)
return True
else:
print_result("发送消息", False)
return None
except Exception as e:
print_result("发送消息", False)
return None
def test_get_messages(meeting_id):
"""测试获取消息"""
print("\n=== 测试获取消息 ===")
try:
response = requests.get(f'{API_BASE}/meetings/{meeting_id}/messages/?last_id=0')
if response.status_code == 200:
data = response.json()
print_result("获取消息", True, data)
return True
else:
print_result("获取消息", False)
return None
except Exception as e:
print_result("获取消息", False)
return None
def main():
"""主测试流程"""
print("=" * 60)
print("🏛️ 龙虾议事厅 - API 自动化测试")
print("=" * 60)
# 1. 测试登录
token = test_login()
if not token:
print("\n⚠️ 登录失败,尝试注册新用户...")
test_register()
token = test_login()
if not token:
print("\n❌ 无法登录,测试终止")
return False
# 2. 测试创建会议
meeting_id = test_create_meeting(token)
# 3. 测试获取会议列表
test_list_meetings(token)
# 4. 测试发送消息
if meeting_id:
test_send_message(token, meeting_id)
test_get_messages(meeting_id)
print("\n" + "=" * 60)
print("✅ 测试完成!")
print("=" * 60)
return True
if __name__ == '__main__':
success = main()
sys.exit(0 if success else 1)