245 lines
5.6 KiB
Markdown
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 客户端
|
|
- 浏览器
|