#!/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)