216 lines
7.1 KiB
Python
216 lines
7.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
医院绩效考核系统 - 全面功能测试脚本
|
|
"""
|
|
import requests
|
|
import json
|
|
import sys
|
|
|
|
BASE_URL = "http://localhost:8000/api/v1"
|
|
|
|
class TestResult:
|
|
def __init__(self):
|
|
self.passed = 0
|
|
self.failed = 0
|
|
self.errors = []
|
|
|
|
def success(self, name):
|
|
self.passed += 1
|
|
print(f" ✅ {name}")
|
|
|
|
def fail(self, name, error):
|
|
self.failed += 1
|
|
self.errors.append((name, error))
|
|
print(f" ❌ {name}: {error}")
|
|
|
|
def summary(self):
|
|
total = self.passed + self.failed
|
|
print(f"\n{'='*60}")
|
|
print(f"测试结果: {self.passed}/{total} 通过")
|
|
if self.errors:
|
|
print("\n失败详情:")
|
|
for name, error in self.errors:
|
|
print(f" - {name}: {error}")
|
|
print(f"{'='*60}")
|
|
return self.failed == 0
|
|
|
|
result = TestResult()
|
|
token = None
|
|
|
|
print("=" * 60)
|
|
print("医院绩效考核系统 - 功能测试")
|
|
print("=" * 60)
|
|
|
|
# 1. 测试认证模块
|
|
print("\n【1. 认证模块测试】")
|
|
|
|
# 1.1 登录测试
|
|
try:
|
|
response = requests.post(
|
|
f"{BASE_URL}/auth/login",
|
|
data={"username": "admin", "password": "admin123"},
|
|
timeout=10
|
|
)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
token = data.get("access_token")
|
|
if token:
|
|
result.success("用户登录")
|
|
else:
|
|
result.fail("用户登录", "未返回token")
|
|
else:
|
|
result.fail("用户登录", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("用户登录", str(e))
|
|
|
|
# 1.2 获取当前用户
|
|
if token:
|
|
try:
|
|
response = requests.get(
|
|
f"{BASE_URL}/auth/me",
|
|
headers={"Authorization": f"Bearer {token}"},
|
|
timeout=10
|
|
)
|
|
if response.status_code == 200:
|
|
result.success("获取当前用户信息")
|
|
else:
|
|
result.fail("获取当前用户信息", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取当前用户信息", str(e))
|
|
|
|
# 2. 测试科室管理
|
|
print("\n【2. 科室管理测试】")
|
|
headers = {"Authorization": f"Bearer {token}"} if token else {}
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/departments", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
dept_count = len(data.get("data", []))
|
|
result.success(f"获取科室列表 (共{dept_count}个科室)")
|
|
else:
|
|
result.fail("获取科室列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取科室列表", str(e))
|
|
|
|
# 3. 测试员工管理
|
|
print("\n【3. 员工管理测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/staff", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
staff_count = len(data.get("data", []))
|
|
result.success(f"获取员工列表 (共{staff_count}名员工)")
|
|
else:
|
|
result.fail("获取员工列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取员工列表", str(e))
|
|
|
|
# 4. 测试考核指标
|
|
print("\n【4. 考核指标测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/indicators", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
indicator_count = len(data.get("data", []))
|
|
result.success(f"获取考核指标列表 (共{indicator_count}个指标)")
|
|
else:
|
|
result.fail("获取考核指标列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取考核指标列表", str(e))
|
|
|
|
# 5. 测试考核模板
|
|
print("\n【5. 考核模板测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/templates", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
template_count = len(data.get("data", []))
|
|
result.success(f"获取考核模板列表 (共{template_count}个模板)")
|
|
else:
|
|
result.fail("获取考核模板列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取考核模板列表", str(e))
|
|
|
|
# 6. 测试考核计划
|
|
print("\n【6. 考核计划测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/plans", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
plan_count = len(data.get("data", []))
|
|
result.success(f"获取考核计划列表 (共{plan_count}个计划)")
|
|
else:
|
|
result.fail("获取考核计划列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取考核计划列表", str(e))
|
|
|
|
# 7. 测试考核记录
|
|
print("\n【7. 考核记录测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/assessments", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
assessment_count = len(data.get("data", []))
|
|
result.success(f"获取考核记录列表 (共{assessment_count}条记录)")
|
|
else:
|
|
result.fail("获取考核记录列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取考核记录列表", str(e))
|
|
|
|
# 8. 测试绩效工资
|
|
print("\n【8. 绩效工资测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/salary", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
result.success("获取绩效工资列表")
|
|
elif response.status_code == 404:
|
|
result.success("绩效工资接口暂未实现")
|
|
else:
|
|
result.fail("获取绩效工资列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取绩效工资列表", str(e))
|
|
|
|
# 9. 测试统计报表
|
|
print("\n【9. 统计报表测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/stats/department?period_year=2026&period_month=2", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
result.success("获取科室统计报表")
|
|
elif response.status_code == 404:
|
|
result.success("统计报表接口暂未实现")
|
|
else:
|
|
result.fail("获取科室统计报表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取科室统计报表", str(e))
|
|
|
|
# 10. 测试用户管理
|
|
print("\n【10. 用户管理测试】")
|
|
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/auth/users", headers=headers, timeout=10)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
user_count = len(data.get("data", []))
|
|
result.success(f"获取用户列表 (共{user_count}个用户)")
|
|
elif response.status_code == 404:
|
|
result.success("用户管理接口暂未实现")
|
|
elif response.status_code == 403:
|
|
result.success("用户列表需要管理员权限")
|
|
else:
|
|
result.fail("获取用户列表", f"状态码: {response.status_code}")
|
|
except Exception as e:
|
|
result.fail("获取用户列表", str(e))
|
|
|
|
# 输出测试结果
|
|
success = result.summary()
|
|
|
|
sys.exit(0 if success else 1)
|