123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 训练数据管理API测试脚本
- 用于测试新增的训练数据管理接口
- """
- import requests
- import json
- import sys
- # API基础URL
- BASE_URL = "http://localhost:8084"
- API_PREFIX = "/api/v0/training_data"
- def test_api(method: str, endpoint: str, data=None, expected_status=200):
- """测试API的通用函数"""
- url = f"{BASE_URL}{API_PREFIX}{endpoint}"
-
- try:
- if method == "GET":
- response = requests.get(url)
- elif method == "POST":
- response = requests.post(url, json=data, headers={'Content-Type': 'application/json'})
- elif method == "DELETE":
- response = requests.delete(url, json=data, headers={'Content-Type': 'application/json'})
- else:
- print(f"❌ 不支持的HTTP方法: {method}")
- return False
-
- print(f"📤 {method} {endpoint}")
- if data:
- print(f"📋 请求数据: {json.dumps(data, ensure_ascii=False, indent=2)}")
-
- print(f"📥 状态码: {response.status_code}")
-
- if response.status_code == expected_status:
- print("✅ 状态码正确")
- else:
- print(f"⚠️ 期望状态码: {expected_status}, 实际状态码: {response.status_code}")
-
- try:
- response_json = response.json()
- print(f"📄 响应: {json.dumps(response_json, ensure_ascii=False, indent=2)}")
- return True
- except:
- print(f"📄 响应: {response.text}")
- return False
-
- except requests.ConnectionError:
- print(f"❌ 连接失败: 请确保服务器运行在 {BASE_URL}")
- return False
- except Exception as e:
- print(f"❌ 请求失败: {str(e)}")
- return False
- def main():
- """主测试函数"""
- print("🚀 开始测试训练数据管理API...")
- print(f"🔗 服务器地址: {BASE_URL}")
- print("="*60)
-
- # 1. 测试统计API (GET)
- print("\n📊 测试统计API")
- test_api("GET", "/stats")
-
- # 2. 测试查询API (POST) - 基础查询
- print("\n🔍 测试查询API - 基础查询")
- test_api("POST", "/query", {
- "page": 1,
- "page_size": 10
- })
-
- # 3. 测试查询API (POST) - 带筛选
- print("\n🔍 测试查询API - 带筛选")
- test_api("POST", "/query", {
- "page": 1,
- "page_size": 5,
- "training_data_type": "sql",
- "search_keyword": "用户"
- })
-
- # 4. 测试创建API (POST) - 单条SQL记录
- print("\n➕ 测试创建API - 单条SQL记录")
- test_api("POST", "/create", {
- "data": {
- "training_data_type": "sql",
- "question": "查询所有测试用户",
- "sql": "SELECT * FROM users WHERE status = 'test'"
- }
- })
-
- # 5. 测试创建API (POST) - 批量记录
- print("\n➕ 测试创建API - 批量记录")
- test_api("POST", "/create", {
- "data": [
- {
- "training_data_type": "documentation",
- "content": "这是一个测试文档,用于说明用户表的结构和用途。"
- },
- {
- "training_data_type": "ddl",
- "ddl": "CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(100));"
- }
- ]
- })
-
- # 6. 测试创建API (POST) - SQL语法错误
- print("\n➕ 测试创建API - SQL语法错误")
- test_api("POST", "/create", {
- "data": {
- "training_data_type": "sql",
- "question": "测试错误SQL",
- "sql": "INVALID SQL SYNTAX"
- }
- }, expected_status=200) # 批量操作中的错误仍返回200,但results中会有错误信息
-
- # 6.1. 测试创建API (POST) - 危险SQL操作检查
- print("\n➕ 测试创建API - 危险SQL操作检查")
- test_api("POST", "/create", {
- "data": [
- {
- "training_data_type": "sql",
- "question": "测试UPDATE操作",
- "sql": "UPDATE users SET status = 'inactive' WHERE id = 1"
- },
- {
- "training_data_type": "sql",
- "question": "测试DELETE操作",
- "sql": "DELETE FROM users WHERE id = 1"
- },
- {
- "training_data_type": "sql",
- "question": "测试DROP操作",
- "sql": "DROP TABLE test_table"
- }
- ]
- }, expected_status=200) # 批量操作返回200,但会有错误信息
-
- # 7. 测试删除API (POST) - 不存在的ID
- print("\n🗑️ 测试删除API - 不存在的ID")
- test_api("POST", "/delete", {
- "ids": ["non-existent-id-1", "non-existent-id-2"],
- "confirm": True
- })
-
- # 8. 测试删除API (POST) - 缺少确认
- print("\n🗑️ 测试删除API - 缺少确认")
- test_api("POST", "/delete", {
- "ids": ["test-id"],
- "confirm": False
- }, expected_status=400)
-
- # 9. 测试参数验证 - 页码错误
- print("\n⚠️ 测试参数验证 - 页码错误")
- test_api("POST", "/query", {
- "page": 0,
- "page_size": 10
- }, expected_status=400)
-
- # 10. 测试参数验证 - 页面大小错误
- print("\n⚠️ 测试参数验证 - 页面大小错误")
- test_api("POST", "/query", {
- "page": 1,
- "page_size": 150
- }, expected_status=400)
-
- print(f"\n{'='*60}")
- print("🎯 测试完成!")
- print("\n📝 说明:")
- print("- ✅ 表示API响应正常")
- print("- ⚠️ 表示状态码不符合预期")
- print("- ❌ 表示连接或请求失败")
- print("\n💡 提示:")
- print("- 首次运行时可能没有训练数据,这是正常的")
- print("- 创建操作成功后,再次查询可以看到新增的数据")
- print("- 删除不存在的ID会返回成功,但failed_count会显示失败数量")
- if __name__ == "__main__":
- main()
|