Kamixitong/test_api.py
2025-11-19 22:49:24 +08:00

117 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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