ERP/test_py/test_sop_feature.py
2025-11-25 10:35:02 +08:00

174 lines
5.0 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SOP 功能测试脚本
用于验证 SOP 文件管理功能是否正常工作
"""
import os
import sys
import sqlite3
# 添加 server 目录到路径
sys.path.insert(0, 'server')
def test_database_table():
"""测试数据库表是否创建成功"""
print("测试 1: 检查数据库表...")
db_path = 'server/data.db'
if not os.path.exists(db_path):
print(" ❌ 数据库文件不存在")
return False
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 检查 sop_files 表是否存在
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='sop_files'")
result = cursor.fetchone()
if result:
print(" ✅ sop_files 表已创建")
# 检查表结构
cursor.execute("PRAGMA table_info(sop_files)")
columns = cursor.fetchall()
print(f" ✅ 表结构包含 {len(columns)} 列:")
for col in columns:
print(f" - {col[1]} ({col[2]})")
conn.close()
return True
else:
print(" ❌ sop_files 表不存在")
conn.close()
return False
def test_sop_directory():
"""测试 SOP 文件存储目录"""
print("\n测试 2: 检查 SOP 文件目录...")
sop_dir = 'frontend/sop_files'
if os.path.exists(sop_dir):
print(f" ✅ 目录已存在: {sop_dir}")
# 检查目录权限
if os.access(sop_dir, os.W_OK):
print(" ✅ 目录可写")
else:
print(" ⚠️ 目录不可写,可能需要调整权限")
# 列出现有文件
files = os.listdir(sop_dir)
if files:
print(f" 📁 目录中已有 {len(files)} 个文件:")
for f in files[:5]: # 只显示前5个
print(f" - {f}")
else:
print(" 📁 目录为空")
return True
else:
print(f" ⚠️ 目录不存在: {sop_dir}")
print(" 💡 系统会在首次上传时自动创建")
return True
def test_api_routes():
"""测试 API 路由是否注册"""
print("\n测试 3: 检查 API 路由...")
try:
from app import app
# 获取所有路由
routes = []
for rule in app.url_map.iter_rules():
if 'sop' in rule.rule:
routes.append(f"{rule.rule} [{', '.join(rule.methods - {'HEAD', 'OPTIONS'})}]")
if routes:
print(" ✅ SOP API 路由已注册:")
for route in routes:
print(f" - {route}")
return True
else:
print(" ❌ 未找到 SOP API 路由")
return False
except Exception as e:
print(f" ❌ 导入失败: {e}")
return False
def test_frontend_files():
"""测试前端文件是否更新"""
print("\n测试 4: 检查前端文件...")
files_to_check = {
'frontend/js/api.js': ['listSopFiles', 'uploadSopFile', 'deleteSopFile'],
'frontend/js/components/upload.js': ['renderSop', 'bindSopEvents', 'loadSopList'],
'frontend/js/router.js': ['sop'],
'frontend/index.html': ['upload/sop']
}
all_ok = True
for filepath, keywords in files_to_check.items():
if not os.path.exists(filepath):
print(f" ❌ 文件不存在: {filepath}")
all_ok = False
continue
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
missing = [kw for kw in keywords if kw not in content]
if missing:
print(f" ⚠️ {filepath} 缺少关键字: {', '.join(missing)}")
all_ok = False
else:
print(f"{filepath} 已更新")
return all_ok
def main():
"""运行所有测试"""
print("=" * 60)
print("SOP 功能测试")
print("=" * 60)
results = []
# 运行测试
results.append(("数据库表", test_database_table()))
results.append(("文件目录", test_sop_directory()))
results.append(("API 路由", test_api_routes()))
results.append(("前端文件", test_frontend_files()))
# 汇总结果
print("\n" + "=" * 60)
print("测试结果汇总")
print("=" * 60)
for name, result in results:
status = "✅ 通过" if result else "❌ 失败"
print(f"{name}: {status}")
all_passed = all(r[1] for r in results)
print("\n" + "=" * 60)
if all_passed:
print("🎉 所有测试通过SOP 功能已准备就绪。")
print("\n下一步:")
print("1. 重启服务器")
print("2. 登录系统(使用管理员账号)")
print("3. 进入 '上传''SOP' 菜单")
print("4. 尝试上传测试文件: sop_template_example.csv")
else:
print("⚠️ 部分测试未通过,请检查上述错误信息。")
print("=" * 60)
return 0 if all_passed else 1
if __name__ == '__main__':
sys.exit(main())