学生信息管理SQL修复测试.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 学生信息管理SQL修复测试脚本
  5. 功能:验证SQL重复子句错误修复是否成功
  6. 时间:2025-01-14
  7. """
  8. import requests
  9. import json
  10. import time
  11. from datetime import datetime
  12. class StudentInfoSQLFixTest:
  13. def __init__(self):
  14. self.base_url = "http://localhost:8080"
  15. self.headers = {
  16. 'Content-Type': 'application/json',
  17. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  18. }
  19. self.token = None
  20. def login(self):
  21. """登录获取token"""
  22. print("=== 登录测试 ===")
  23. login_url = f"{self.base_url}/login"
  24. login_data = {
  25. "username": "admin",
  26. "password": "admin123"
  27. }
  28. try:
  29. response = requests.post(login_url, json=login_data, headers=self.headers)
  30. if response.status_code == 200:
  31. result = response.json()
  32. if result.get('code') == 200:
  33. self.token = result.get('data', {}).get('access_token')
  34. self.headers['Authorization'] = f'Bearer {self.token}'
  35. print("✅ 登录成功")
  36. return True
  37. else:
  38. print(f"❌ 登录失败: {result.get('msg')}")
  39. return False
  40. else:
  41. print(f"❌ 登录请求失败: {response.status_code}")
  42. return False
  43. except Exception as e:
  44. print(f"❌ 登录异常: {str(e)}")
  45. return False
  46. def test_basic_query(self):
  47. """测试基础查询功能"""
  48. print("\n=== 基础查询测试 ===")
  49. url = f"{self.base_url}/xg/studentInfo/list"
  50. params = {
  51. 'pageNum': 1,
  52. 'pageSize': 10
  53. }
  54. try:
  55. response = requests.get(url, params=params, headers=self.headers)
  56. if response.status_code == 200:
  57. result = response.json()
  58. if result.get('code') == 200:
  59. total = result.get('total', 0)
  60. rows = result.get('rows', [])
  61. print(f"✅ 基础查询成功,总数: {total}, 当前页: {len(rows)}")
  62. return True
  63. else:
  64. print(f"❌ 基础查询失败: {result.get('msg')}")
  65. return False
  66. else:
  67. print(f"❌ 基础查询请求失败: {response.status_code}")
  68. return False
  69. except Exception as e:
  70. print(f"❌ 基础查询异常: {str(e)}")
  71. return False
  72. def test_gender_query(self):
  73. """测试性别查询(之前报错的查询)"""
  74. print("\n=== 性别查询测试 ===")
  75. url = f"{self.base_url}/xg/studentInfo/list"
  76. params = {
  77. 'pageNum': 1,
  78. 'pageSize': 10,
  79. 'gender': 'M' # 男性
  80. }
  81. try:
  82. response = requests.get(url, params=params, headers=self.headers)
  83. if response.status_code == 200:
  84. result = response.json()
  85. if result.get('code') == 200:
  86. total = result.get('total', 0)
  87. rows = result.get('rows', [])
  88. print(f"✅ 性别查询成功,总数: {total}, 当前页: {len(rows)}")
  89. # 验证查询结果
  90. if rows:
  91. for row in rows:
  92. if row.get('gender') != 'M':
  93. print(f"⚠️ 查询结果不匹配: {row.get('name')} - {row.get('gender')}")
  94. return False
  95. print("✅ 查询结果验证通过")
  96. return True
  97. else:
  98. print(f"❌ 性别查询失败: {result.get('msg')}")
  99. return False
  100. else:
  101. print(f"❌ 性别查询请求失败: {response.status_code}")
  102. return False
  103. except Exception as e:
  104. print(f"❌ 性别查询异常: {str(e)}")
  105. return False
  106. def test_multi_condition_query(self):
  107. """测试多条件查询"""
  108. print("\n=== 多条件查询测试 ===")
  109. url = f"{self.base_url}/xg/studentInfo/list"
  110. params = {
  111. 'pageNum': 1,
  112. 'pageSize': 10,
  113. 'gender': 'F', # 女性
  114. 'grade': '2024' # 2024级
  115. }
  116. try:
  117. response = requests.get(url, params=params, headers=self.headers)
  118. if response.status_code == 200:
  119. result = response.json()
  120. if result.get('code') == 200:
  121. total = result.get('total', 0)
  122. rows = result.get('rows', [])
  123. print(f"✅ 多条件查询成功,总数: {total}, 当前页: {len(rows)}")
  124. return True
  125. else:
  126. print(f"❌ 多条件查询失败: {result.get('msg')}")
  127. return False
  128. else:
  129. print(f"❌ 多条件查询请求失败: {response.status_code}")
  130. return False
  131. except Exception as e:
  132. print(f"❌ 多条件查询异常: {str(e)}")
  133. return False
  134. def test_name_query(self):
  135. """测试姓名模糊查询"""
  136. print("\n=== 姓名模糊查询测试 ===")
  137. url = f"{self.base_url}/xg/studentInfo/list"
  138. params = {
  139. 'pageNum': 1,
  140. 'pageSize': 10,
  141. 'name': '张' # 姓张的学生
  142. }
  143. try:
  144. response = requests.get(url, params=params, headers=self.headers)
  145. if response.status_code == 200:
  146. result = response.json()
  147. if result.get('code') == 200:
  148. total = result.get('total', 0)
  149. rows = result.get('rows', [])
  150. print(f"✅ 姓名模糊查询成功,总数: {total}, 当前页: {len(rows)}")
  151. return True
  152. else:
  153. print(f"❌ 姓名模糊查询失败: {result.get('msg')}")
  154. return False
  155. else:
  156. print(f"❌ 姓名模糊查询请求失败: {response.status_code}")
  157. return False
  158. except Exception as e:
  159. print(f"❌ 姓名模糊查询异常: {str(e)}")
  160. return False
  161. def test_pagination(self):
  162. """测试分页功能"""
  163. print("\n=== 分页功能测试 ===")
  164. url = f"{self.base_url}/xg/studentInfo/list"
  165. # 测试第一页
  166. params1 = {'pageNum': 1, 'pageSize': 5}
  167. # 测试第二页
  168. params2 = {'pageNum': 2, 'pageSize': 5}
  169. try:
  170. response1 = requests.get(url, params=params1, headers=self.headers)
  171. response2 = requests.get(url, params=params2, headers=self.headers)
  172. if response1.status_code == 200 and response2.status_code == 200:
  173. result1 = response1.json()
  174. result2 = response2.json()
  175. if result1.get('code') == 200 and result2.get('code') == 200:
  176. rows1 = result1.get('rows', [])
  177. rows2 = result2.get('rows', [])
  178. print(f"✅ 分页功能测试成功")
  179. print(f" 第一页记录数: {len(rows1)}")
  180. print(f" 第二页记录数: {len(rows2)}")
  181. return True
  182. else:
  183. print(f"❌ 分页功能测试失败")
  184. return False
  185. else:
  186. print(f"❌ 分页功能请求失败")
  187. return False
  188. except Exception as e:
  189. print(f"❌ 分页功能异常: {str(e)}")
  190. return False
  191. def run_all_tests(self):
  192. """运行所有测试"""
  193. print("=" * 50)
  194. print("学生信息管理SQL修复测试")
  195. print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
  196. print("=" * 50)
  197. # 登录
  198. if not self.login():
  199. print("❌ 登录失败,测试终止")
  200. return False
  201. # 等待服务启动
  202. print("\n⏳ 等待服务完全启动...")
  203. time.sleep(5)
  204. # 运行测试
  205. tests = [
  206. ("基础查询", self.test_basic_query),
  207. ("性别查询", self.test_gender_query),
  208. ("多条件查询", self.test_multi_condition_query),
  209. ("姓名模糊查询", self.test_name_query),
  210. ("分页功能", self.test_pagination),
  211. ]
  212. passed = 0
  213. total = len(tests)
  214. for test_name, test_func in tests:
  215. if test_func():
  216. passed += 1
  217. time.sleep(1) # 测试间隔
  218. print("\n" + "=" * 50)
  219. print("测试结果总结")
  220. print("=" * 50)
  221. print(f"总测试数: {total}")
  222. print(f"通过测试: {passed}")
  223. print(f"失败测试: {total - passed}")
  224. print(f"通过率: {passed/total*100:.1f}%")
  225. if passed == total:
  226. print("🎉 所有测试通过!SQL修复成功!")
  227. return True
  228. else:
  229. print("❌ 部分测试失败,请检查修复")
  230. return False
  231. if __name__ == "__main__":
  232. tester = StudentInfoSQLFixTest()
  233. tester.run_all_tests()