#!/usr/bin/env python3 """ Gitea Webhook Ambassador 增强版功能测试脚本 """ import requests import json import time BASE_URL = "http://localhost:8000" ADMIN_SECRET_KEY = "admin-secret-key-change-in-production" def test_health_check(): """测试健康检查""" print("🔍 测试健康检查...") try: response = requests.get(f"{BASE_URL}/health") if response.status_code == 200: data = response.json() print(f"✅ 健康检查成功: {data['status']}") print(f" 版本: {data['version']}") print(f" 运行时间: {data['uptime']}") print(f" 内存使用: {data['memory']}") return True else: print(f"❌ 健康检查失败: {response.status_code}") return False except Exception as e: print(f"❌ 健康检查异常: {e}") return False def test_login(): """测试登录功能""" print("\n🔐 测试登录功能...") try: # 测试登录 API login_data = {"secret_key": ADMIN_SECRET_KEY} response = requests.post( f"{BASE_URL}/api/auth/login", json=login_data, headers={"Content-Type": "application/json"} ) if response.status_code == 200: data = response.json() token = data.get("token") print(f"✅ 登录成功,获得 JWT 令牌") return token else: print(f"❌ 登录失败: {response.status_code} - {response.text}") return None except Exception as e: print(f"❌ 登录异常: {e}") return None def test_api_key_management(token): """测试 API 密钥管理""" print("\n🔑 测试 API 密钥管理...") headers = {"Authorization": f"Bearer {token}"} try: # 创建 API 密钥 key_data = {"description": "测试 API 密钥"} response = requests.post( f"{BASE_URL}/api/keys", json=key_data, headers=headers ) if response.status_code == 200: data = response.json() api_key = data["key"] key_id = data["id"] print(f"✅ 创建 API 密钥成功: {api_key[:20]}...") # 列出 API 密钥 response = requests.get(f"{BASE_URL}/api/keys", headers=headers) if response.status_code == 200: keys_data = response.json() print(f"✅ 列出 API 密钥成功,共 {len(keys_data['keys'])} 个") # 删除 API 密钥 response = requests.delete(f"{BASE_URL}/api/keys/{key_id}", headers=headers) if response.status_code == 200: print(f"✅ 删除 API 密钥成功") return True else: print(f"❌ 删除 API 密钥失败: {response.status_code}") return False else: print(f"❌ 列出 API 密钥失败: {response.status_code}") return False else: print(f"❌ 创建 API 密钥失败: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ API 密钥管理异常: {e}") return False def test_project_management(token): """测试项目管理""" print("\n📁 测试项目管理...") headers = {"Authorization": f"Bearer {token}"} try: # 创建项目 project_data = { "name": "测试项目", "jenkinsJob": "test-job", "giteaRepo": "test-owner/test-repo" } response = requests.post( f"{BASE_URL}/api/projects/", json=project_data, headers=headers ) if response.status_code == 200: data = response.json() project_id = data["id"] print(f"✅ 创建项目成功: {data['name']}") # 列出项目 response = requests.get(f"{BASE_URL}/api/projects/", headers=headers) if response.status_code == 200: projects_data = response.json() print(f"✅ 列出项目成功,共 {len(projects_data['projects'])} 个") # 删除项目 response = requests.delete(f"{BASE_URL}/api/projects/{project_id}", headers=headers) if response.status_code == 200: print(f"✅ 删除项目成功") return True else: print(f"❌ 删除项目失败: {response.status_code}") return False else: print(f"❌ 列出项目失败: {response.status_code}") return False else: print(f"❌ 创建项目失败: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ 项目管理异常: {e}") return False def test_stats(token): """测试统计信息""" print("\n📊 测试统计信息...") headers = {"Authorization": f"Bearer {token}"} try: response = requests.get(f"{BASE_URL}/api/stats", headers=headers) if response.status_code == 200: data = response.json() print(f"✅ 获取统计信息成功:") print(f" 总项目数: {data['total_projects']}") print(f" API 密钥数: {data['total_api_keys']}") print(f" 今日触发次数: {data['today_triggers']}") print(f" 成功触发次数: {data['successful_triggers']}") return True else: print(f"❌ 获取统计信息失败: {response.status_code}") return False except Exception as e: print(f"❌ 统计信息异常: {e}") return False def test_logs(token): """测试日志功能""" print("\n📝 测试日志功能...") headers = {"Authorization": f"Bearer {token}"} try: response = requests.get(f"{BASE_URL}/api/logs", headers=headers) if response.status_code == 200: data = response.json() print(f"✅ 获取日志成功,共 {len(data['logs'])} 条记录") return True else: print(f"❌ 获取日志失败: {response.status_code}") return False except Exception as e: print(f"❌ 日志功能异常: {e}") return False def main(): """主测试函数""" print("🚀 Gitea Webhook Ambassador 增强版功能测试") print("=" * 50) # 测试健康检查 if not test_health_check(): print("❌ 健康检查失败,服务可能未启动") return # 测试登录 token = test_login() if not token: print("❌ 登录失败,无法继续测试") return # 测试各项功能 test_api_key_management(token) test_project_management(token) test_stats(token) test_logs(token) print("\n" + "=" * 50) print("🎉 增强版功能测试完成!") print("\n📋 已实现的功能:") print(" ✅ Web 登录界面") print(" ✅ 数据库存储 API 密钥") print(" ✅ 延长 JWT 有效期 (7天)") print(" ✅ 前端仪表板") print(" ✅ 项目管理") print(" ✅ API 密钥管理") print(" ✅ 日志查看") print(" ✅ 健康状态监控") print("\n🌐 访问地址:") print(f" 登录页面: {BASE_URL}/login") print(f" 仪表板: {BASE_URL}/dashboard") print(f" 管理员密钥: {ADMIN_SECRET_KEY}") if __name__ == "__main__": main()