#!/usr/bin/env python # -*- coding: utf-8 -*- """ API测试脚本 """ import requests from bs4 import BeautifulSoup import json # 基础URL BASE_URL = 'http://127.0.0.1:5000' def test_api(): # 创建会话 session = requests.Session() try: # 1. 访问登录页面获取CSRF token print("1. 获取登录页面...") login_page = session.get(f'{BASE_URL}/login') print(f"登录页面状态: {login_page.status_code}") # 解析CSRF token soup = BeautifulSoup(login_page.text, 'html.parser') csrf_token_input = soup.find('input', {'name': 'csrf_token'}) csrf_token = csrf_token_input['value'] if csrf_token_input else '' print(f"CSRF Token: {csrf_token}") # 2. 测试登录 print("\n2. 测试登录...") login_data = { 'username': 'admin', 'password': 'admin123', 'csrf_token': csrf_token } login_response = session.post(f'{BASE_URL}/login', data=login_data) print(f"登录响应状态: {login_response.status_code}") # 检查是否登录成功 if login_response.status_code == 200 or login_response.status_code == 302: print("登录成功!") # 3. 测试获取版本列表 print("\n3. 测试获取版本列表...") versions_response = session.get(f'{BASE_URL}/api/v1/versions') print(f"版本列表状态: {versions_response.status_code}") version_id = None if versions_response.status_code == 200: try: versions_data = versions_response.json() print(f"版本列表内容: {json.dumps(versions_data, ensure_ascii=False, indent=2)}") # 获取第一个版本的ID用于测试删除 if versions_data.get('data', {}).get('versions'): version_id = versions_data['data']['versions'][0]['version_id'] print(f"将使用版本ID进行测试: {version_id}") except: print(f"版本列表内容: {versions_response.text[:200]}") else: print(f"版本列表错误: {versions_response.text}") # 4. 测试删除版本 if version_id: print(f"\n4. 测试删除版本 (ID: {version_id})...") delete_response = session.delete(f'{BASE_URL}/api/v1/versions/{version_id}') print(f"删除版本状态: {delete_response.status_code}") if delete_response.status_code == 200: try: delete_data = delete_response.json() print(f"删除版本内容: {json.dumps(delete_data, ensure_ascii=False, indent=2)}") except: print(f"删除版本内容: {delete_response.text[:200]}") else: print(f"删除版本错误: {delete_response.text}") # 5. 测试创建版本(使用存在的产品ID) print("\n5. 测试创建版本...") # 先获取产品列表 products_response = session.get(f'{BASE_URL}/api/v1/products') product_id = None if products_response.status_code == 200: try: products_data = products_response.json() if products_data.get('data', {}).get('products'): product_id = products_data['data']['products'][0]['product_id'] print(f"使用产品ID: {product_id}") except: print("无法解析产品列表") if product_id: version_data = { 'product_id': product_id, 'version_num': '1.0.0', 'platform': 'Windows', 'description': '测试版本' } create_response = session.post(f'{BASE_URL}/api/v1/versions', json=version_data) print(f"创建版本状态: {create_response.status_code}") if create_response.status_code == 200: try: create_data = create_response.json() print(f"创建版本内容: {json.dumps(create_data, ensure_ascii=False, indent=2)}") except: print(f"创建版本内容: {create_response.text[:200]}") else: print(f"创建版本错误: {create_response.text}") else: print(f"登录失败: {login_response.text}") except Exception as e: print(f"测试过程中出现错误: {e}") import traceback traceback.print_exc() if __name__ == '__main__': test_api()