117 lines
4.8 KiB
Python
117 lines
4.8 KiB
Python
#!/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() |