Files
yunhaifinance/backend/test-plan.md
T

5.6 KiB

采购付款分离改造测试计划

问题分析

当前系统存在以下问题:

  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. 数据库表结构检查脚本

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端点测试脚本

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端点

测试环境

测试工具

  • Node.js 14+
  • SQLite3
  • HTTP 客户端
  • 浏览器