Files
yunhaifinance/backend/test-plan.md
T

245 lines
5.6 KiB
Markdown

# 采购付款分离改造测试计划
## 问题分析
当前系统存在以下问题:
1. 获取采购订单列表失败
2. 获取付款计划列表失败
3. 库存管理列表失败
## 测试目标
采用红/绿 TDD 法修复以上问题,确保采购付款分离改造方案的需求能够实现。
## 测试流程
### 阶段1:环境准备
1. **检查数据库连接**
- 验证SQLite数据库文件是否存在
- 验证数据库表结构是否完整
2. **检查后端服务器**
- 验证后端服务器是否可以正常启动
- 验证API端点是否正确配置
### 阶段2:红阶段(识别失败)
1. **测试采购订单API**
- 测试 GET /api/purchase-orders
- 测试 POST /api/purchase-orders
- 测试 GET /api/purchase-orders/:id
2. **测试付款计划API**
- 测试 GET /api/payment-plans
- 测试 POST /api/payment-plans
- 测试 GET /api/payment-plans/:id
- 测试 PUT /api/payment-plans/:id
3. **测试库存管理API**
- 测试 GET /api/inventory
- 测试 GET /api/inventory/summary
- 测试 POST /api/inventory/out
### 阶段3:绿阶段(修复问题)
1. **修复数据库表结构**
- 确保所有必要的表都已创建
- 确保表结构正确
2. **修复API端点**
- 确保API端点正确实现
- 确保数据库查询正确
3. **修复前端连接**
- 确保前端正确调用API端点
- 确保数据格式正确
### 阶段4:验证测试
1. **端到端测试**
- 测试完整的采购付款流程
- 测试库存管理流程
2. **性能测试**
- 测试API响应时间
- 测试数据处理能力
## 测试脚本
### 1. 数据库表结构检查脚本
```javascript
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
const dbPath = path.join(__dirname, 'company_finance.db');
const db = new sqlite3.Database(dbPath, (err) => {
if (err) {
console.error('数据库连接失败:', err.message);
process.exit(1);
} else {
console.log('数据库连接成功');
checkTables();
}
});
function checkTables() {
console.log('正在检查数据库表结构...');
const tables = [
'purchase_orders',
'purchase_order_items',
'payment_plans',
'inventory_records'
];
let checked = 0;
tables.forEach(table => {
db.get(`SELECT name FROM sqlite_master WHERE type='table' AND name='${table}'`, (err, row) => {
checked++;
if (err) {
console.error(`检查表 ${table} 失败:`, err.message);
} else if (row) {
console.log(`✅ 表 ${table} 存在`);
} else {
console.log(`❌ 表 ${table} 不存在`);
}
if (checked === tables.length) {
console.log('检查完成');
db.close();
}
});
});
}
```
### 2. API端点测试脚本
```javascript
const http = require('http');
const options = {
hostname: 'localhost',
port: 3002,
timeout: 5000
};
function testApi(endpoint, method = 'GET', data = null) {
return new Promise((resolve, reject) => {
const reqOptions = {
...options,
path: endpoint,
method,
headers: {
'Content-Type': 'application/json'
}
};
const req = http.request(reqOptions, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const result = JSON.parse(data);
resolve({ status: res.statusCode, data: result });
} catch (error) {
resolve({ status: res.statusCode, data: data });
}
});
});
req.on('error', (error) => {
reject(error);
});
req.on('timeout', () => {
req.destroy();
reject(new Error('请求超时'));
});
if (data) {
req.write(JSON.stringify(data));
}
req.end();
});
}
async function runTests() {
console.log('开始测试API端点...');
try {
// 测试采购订单API
console.log('\n测试采购订单API:');
const purchaseOrders = await testApi('/api/purchase-orders');
console.log('GET /api/purchase-orders:', purchaseOrders.status);
console.log('响应:', purchaseOrders.data);
// 测试付款计划API
console.log('\n测试付款计划API:');
const paymentPlans = await testApi('/api/payment-plans');
console.log('GET /api/payment-plans:', paymentPlans.status);
console.log('响应:', paymentPlans.data);
// 测试库存管理API
console.log('\n测试库存管理API:');
const inventory = await testApi('/api/inventory');
console.log('GET /api/inventory:', inventory.status);
console.log('响应:', inventory.data);
console.log('\n测试完成');
} catch (error) {
console.error('测试失败:', error.message);
}
}
runTests();
```
## 预期结果
1. **数据库表结构检查**
- 所有必要的表都应该存在
- 表结构应该正确
2. **API端点测试**
- 所有API端点应该返回 200 状态码
- 响应数据应该符合预期格式
3. **端到端测试**
- 采购订单创建、查看、编辑功能正常
- 付款计划创建、查看、编辑功能正常
- 库存管理功能正常
## 修复策略
1. **数据库表缺失**
- 运行 db-sqlite.js 初始化数据库
- 确保所有必要的表都已创建
2. **API端点错误**
- 检查 final-backend.js 中的API实现
- 确保数据库查询正确
3. **前端连接问题**
- 检查前端API配置
- 确保前端正确调用API端点
## 测试环境
- 后端服务器:http://localhost:3002
- 前端服务器:http://localhost:3006
- 数据库:SQLite (company_finance.db)
## 测试工具
- Node.js 14+
- SQLite3
- HTTP 客户端
- 浏览器