ERP/test_outsourcing_system.py

233 lines
7.9 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
委外管理系统测试脚本
用于验证委外工单、发料、入库等功能是否正常工作
"""
import sys
import os
# 添加server目录到路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'server'))
from app import init_db, get_db
def test_database_tables():
"""测试数据库表是否正确创建"""
print("=" * 60)
print("测试1: 检查数据库表结构")
print("=" * 60)
# 初始化数据库
init_db()
conn = get_db()
c = conn.cursor()
# 检查委外工单表
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='outsourcing_orders'")
if c.fetchone():
print("✓ 委外工单表 (outsourcing_orders) 创建成功")
else:
print("✗ 委外工单表创建失败")
return False
# 检查委外发料表
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='outsourcing_material_issue'")
if c.fetchone():
print("✓ 委外发料表 (outsourcing_material_issue) 创建成功")
else:
print("✗ 委外发料表创建失败")
return False
# 检查委外在制库存表
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='outsourcing_wip_stock'")
if c.fetchone():
print("✓ 委外在制库存表 (outsourcing_wip_stock) 创建成功")
else:
print("✗ 委外在制库存表创建失败")
return False
# 检查成品入库表
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='finished_goods_receipt'")
if c.fetchone():
print("✓ 成品入库表 (finished_goods_receipt) 创建成功")
else:
print("✗ 成品入库表创建失败")
return False
conn.close()
print("\n所有数据库表创建成功!\n")
return True
def test_table_structure():
"""测试表结构是否正确"""
print("=" * 60)
print("测试2: 检查表结构字段")
print("=" * 60)
conn = get_db()
c = conn.cursor()
# 检查委外工单表字段
c.execute("PRAGMA table_info(outsourcing_orders)")
columns = [row[1] for row in c.fetchall()]
required_columns = ['id', 'order_no', 'customer_order_no', 'product_code',
'product_name', 'production_qty', 'outsourcing_factory',
'delivery_date', 'status', 'created_by', 'created_at', 'updated_at']
print("\n委外工单表字段:")
for col in required_columns:
if col in columns:
print(f"{col}")
else:
print(f"{col} (缺失)")
# 检查委外发料表字段
c.execute("PRAGMA table_info(outsourcing_material_issue)")
columns = [row[1] for row in c.fetchall()]
required_columns = ['id', 'issue_no', 'outsourcing_order_no', 'material_code',
'material_name', 'issue_qty', 'unit', 'issue_date',
'created_by', 'created_at', 'updated_at']
print("\n委外发料表字段:")
for col in required_columns:
if col in columns:
print(f"{col}")
else:
print(f"{col} (缺失)")
# 检查成品入库表字段
c.execute("PRAGMA table_info(finished_goods_receipt)")
columns = [row[1] for row in c.fetchall()]
required_columns = ['id', 'receipt_no', 'outsourcing_order_no', 'product_code',
'product_name', 'receipt_qty', 'receipt_date',
'created_by', 'created_at', 'updated_at']
print("\n成品入库表字段:")
for col in required_columns:
if col in columns:
print(f"{col}")
else:
print(f"{col} (缺失)")
# 检查委外在制库存表字段
c.execute("PRAGMA table_info(outsourcing_wip_stock)")
columns = [row[1] for row in c.fetchall()]
required_columns = ['id', 'outsourcing_order_no', 'material_code',
'material_name', 'wip_qty', 'unit', 'updated_at']
print("\n委外在制库存表字段:")
for col in required_columns:
if col in columns:
print(f"{col}")
else:
print(f"{col} (缺失)")
conn.close()
print("\n表结构检查完成!\n")
return True
def create_test_data():
"""创建测试数据"""
print("=" * 60)
print("测试3: 创建测试数据")
print("=" * 60)
conn = get_db()
c = conn.cursor()
try:
# 创建测试BOM数据
print("\n创建测试BOM数据...")
test_bom = [
('AP05', 'AP05物流版', 'R001', '电阻-10K', 1, 'pcs', 100, '供应商A', None, 'system', '2026-03-13', '2026-03-13'),
('AP05', 'AP05物流版', 'C001', '电容-100uF', 2, 'pcs', 50, '供应商B', None, 'system', '2026-03-13', '2026-03-13'),
('AP05', 'AP05物流版', 'IC001', '芯片-主控', 1, 'pcs', 1, '供应商C', None, 'system', '2026-03-13', '2026-03-13'),
]
for bom in test_bom:
c.execute('''INSERT OR IGNORE INTO bom (
product_code, product_name, material_code, material_name,
unit_qty, unit, min_package, supplier, remark,
created_by, created_at, updated_at
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''', bom)
print("✓ BOM测试数据创建成功")
# 创建测试期初库存数据
print("\n创建测试期初库存数据...")
test_stock = [
('R001', '电阻-10K', 500, 'pcs', 100, '供应商A', None, 'system', '2026-03-13', '2026-03-13'),
('C001', '电容-100uF', 1000, 'pcs', 50, '供应商B', None, 'system', '2026-03-13', '2026-03-13'),
('IC001', '芯片-主控', 200, 'pcs', 1, '供应商C', None, 'system', '2026-03-13', '2026-03-13'),
]
for stock in test_stock:
c.execute('''INSERT OR IGNORE INTO initial_stock (
material_code, material_name, stock_qty, unit, min_package,
supplier, remark, created_by, created_at, updated_at
) VALUES (?,?,?,?,?,?,?,?,?,?)''', stock)
print("✓ 期初库存测试数据创建成功")
# 创建测试客户订单数据
print("\n创建测试客户订单数据...")
c.execute('''INSERT OR IGNORE INTO customer_orders (
order_date, order_no, customer_name, material, quantity, unit_price,
created_by, created_at, updated_at
) VALUES (?,?,?,?,?,?,?,?,?)''',
('2026-03-13', 'CO20260313001', '测试客户', 'AP05物流版', 100, 1000.00,
'system', '2026-03-13', '2026-03-13'))
print("✓ 客户订单测试数据创建成功")
conn.commit()
print("\n所有测试数据创建成功!\n")
except Exception as e:
print(f"\n✗ 创建测试数据失败: {str(e)}\n")
conn.rollback()
return False
finally:
conn.close()
return True
def main():
"""主测试函数"""
print("\n")
print("" + "=" * 58 + "")
print("" + " " * 15 + "委外管理系统测试脚本" + " " * 15 + "")
print("" + "=" * 58 + "")
print("\n")
# 运行测试
success = True
if not test_database_tables():
success = False
if not test_table_structure():
success = False
if not create_test_data():
success = False
# 输出测试结果
print("=" * 60)
if success:
print("✓ 所有测试通过!委外管理系统已准备就绪。")
print("\n下一步操作:")
print("1. 启动服务器: cd server && python app.py")
print("2. 访问系统: http://localhost:5000")
print("3. 进入\"委外管理\"菜单开始使用")
else:
print("✗ 部分测试失败,请检查错误信息。")
print("=" * 60)
print("\n")
if __name__ == '__main__':
main()