198 lines
6.1 KiB
Python
198 lines
6.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
学生信息管理SQL语法错误修复验证脚本
|
|
验证修复后的XML映射文件是否能正确处理查询请求
|
|
|
|
日期: 2025-01-15
|
|
修复内容: 解决 WHERE...AND ORDER BY 语法错误
|
|
第二次修复: 正确区分WHERE条件和ORDER BY子句的处理
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
import sys
|
|
from datetime import datetime
|
|
|
|
# 配置信息
|
|
BASE_URL = "http://localhost:8080"
|
|
LOGIN_URL = f"{BASE_URL}/auth/login"
|
|
STUDENT_LIST_URL = f"{BASE_URL}/xg-xx/studentInfo/list"
|
|
|
|
# 登录配置
|
|
LOGIN_DATA = {
|
|
"username": "admin",
|
|
"password": "admin123",
|
|
"clientId": "e5cd7e4891bf95d1d19206ce24a7b32e",
|
|
"grantType": "password"
|
|
}
|
|
|
|
# 请求头配置
|
|
HEADERS = {
|
|
"Content-Type": "application/json",
|
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
|
"referer": "http://localhost",
|
|
"clientid": "e5cd7e4891bf95d1d19206ce24a7b32e"
|
|
}
|
|
|
|
def print_test_header(title):
|
|
"""打印测试标题"""
|
|
print(f"\n{'='*60}")
|
|
print(f"🧪 {title}")
|
|
print(f"{'='*60}")
|
|
|
|
def print_result(success, message, details=None):
|
|
"""打印测试结果"""
|
|
status = "✅ 成功" if success else "❌ 失败"
|
|
print(f"{status}: {message}")
|
|
if details:
|
|
print(f"详情: {details}")
|
|
|
|
def login():
|
|
"""登录获取token"""
|
|
print_test_header("步骤1: 用户登录")
|
|
|
|
try:
|
|
response = requests.post(LOGIN_URL, json=LOGIN_DATA, headers=HEADERS, timeout=10)
|
|
print(f"登录请求状态码: {response.status_code}")
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
if data.get("code") == 200:
|
|
token = data.get("data", {}).get("access_token")
|
|
if token:
|
|
print_result(True, "登录成功", f"Token: {token[:20]}...")
|
|
return token
|
|
else:
|
|
print_result(False, "登录响应中没有token", data)
|
|
else:
|
|
print_result(False, "登录失败", data.get("msg", "未知错误"))
|
|
else:
|
|
print_result(False, f"登录请求失败", f"状态码: {response.status_code}")
|
|
|
|
except Exception as e:
|
|
print_result(False, "登录异常", str(e))
|
|
|
|
return None
|
|
|
|
def test_student_list_query(token, test_name, params=None):
|
|
"""测试学生列表查询"""
|
|
print_test_header(f"步骤2: {test_name}")
|
|
|
|
# 设置认证头
|
|
test_headers = HEADERS.copy()
|
|
test_headers["Authorization"] = f"Bearer {token}"
|
|
|
|
try:
|
|
# 发送查询请求
|
|
response = requests.get(
|
|
STUDENT_LIST_URL,
|
|
params=params or {},
|
|
headers=test_headers,
|
|
timeout=10
|
|
)
|
|
|
|
print(f"查询请求状态码: {response.status_code}")
|
|
print(f"查询参数: {params or '无'}")
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
if data.get("code") == 200:
|
|
rows = data.get("rows", [])
|
|
total = data.get("total", 0)
|
|
print_result(True, f"查询成功", f"返回 {len(rows)} 条记录,总计 {total} 条")
|
|
return True, data
|
|
else:
|
|
print_result(False, "查询失败", data.get("msg", "未知错误"))
|
|
return False, data
|
|
else:
|
|
print_result(False, f"查询请求失败", f"状态码: {response.status_code}")
|
|
try:
|
|
error_data = response.json()
|
|
print(f"错误详情: {error_data}")
|
|
except:
|
|
print(f"响应内容: {response.text[:200]}...")
|
|
return False, None
|
|
|
|
except Exception as e:
|
|
print_result(False, "查询异常", str(e))
|
|
return False, None
|
|
|
|
def main():
|
|
"""主函数"""
|
|
print("🔍 学生信息管理SQL语法错误修复验证")
|
|
print(f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
print(f"目标: 验证 WHERE...AND ORDER BY 语法错误修复")
|
|
print(f"修复版本: 第二次修复 - 正确区分WHERE条件和ORDER BY子句")
|
|
|
|
# 1. 登录获取token
|
|
token = login()
|
|
if not token:
|
|
print("\n❌ 登录失败,无法继续测试")
|
|
sys.exit(1)
|
|
|
|
# 2. 测试无查询条件的列表查询(最容易触发SQL语法错误)
|
|
success1, data1 = test_student_list_query(
|
|
token,
|
|
"无查询条件的列表查询(最容易触发SQL语法错误)",
|
|
{"pageNum": 1, "pageSize": 10}
|
|
)
|
|
|
|
# 3. 测试有查询条件的搜索
|
|
success2, data2 = test_student_list_query(
|
|
token,
|
|
"有查询条件的搜索",
|
|
{"pageNum": 1, "pageSize": 10, "name": "测试"}
|
|
)
|
|
|
|
# 4. 测试排序功能
|
|
success3, data3 = test_student_list_query(
|
|
token,
|
|
"排序功能测试",
|
|
{"pageNum": 1, "pageSize": 10, "orderByColumn": "create_time", "isAsc": "desc"}
|
|
)
|
|
|
|
# 5. 测试复合查询
|
|
success4, data4 = test_student_list_query(
|
|
token,
|
|
"复合查询测试",
|
|
{
|
|
"pageNum": 1,
|
|
"pageSize": 10,
|
|
"gender": "1",
|
|
"orderByColumn": "student_no",
|
|
"isAsc": "asc"
|
|
}
|
|
)
|
|
|
|
# 总结测试结果
|
|
print_test_header("测试结果总结")
|
|
|
|
tests = [
|
|
("无查询条件列表查询", success1),
|
|
("有查询条件搜索", success2),
|
|
("排序功能测试", success3),
|
|
("复合查询测试", success4)
|
|
]
|
|
|
|
passed = sum(1 for _, success in tests if success)
|
|
total = len(tests)
|
|
|
|
print(f"📊 测试统计: {passed}/{total} 通过")
|
|
|
|
for test_name, success in tests:
|
|
status = "✅" if success else "❌"
|
|
print(f"{status} {test_name}")
|
|
|
|
if passed == total:
|
|
print(f"\n🎉 所有测试通过!SQL语法错误修复成功!")
|
|
print("✅ WHERE...AND ORDER BY 语法错误已解决")
|
|
print("✅ 学生信息管理页面搜索功能恢复正常")
|
|
else:
|
|
print(f"\n⚠️ 部分测试失败,需要进一步排查问题")
|
|
|
|
return passed == total
|
|
|
|
if __name__ == "__main__":
|
|
success = main()
|
|
sys.exit(0 if success else 1) |