SchoolDash Alpha冲刺 测试随笔

SchoolDash Alpha冲刺 测试随笔

课程与作业信息

  • 所属课程:软件工程实践
  • 作业要求来源:第五次作业——Alpha冲刺
  • 本篇目标:描述项目测试工作安排、测试工具的选择与应用、测试过程中发现的具体问题、测试心得及项目测试评价

1. 项目测试工作安排

在Alpha冲刺期间,测试工作与开发同步推进,采用分层测试策略,包括单元测试、集成测试和端到端测试。整体规划强调自动化优先,覆盖核心模块如认证、商品管理、订单流程和多角色功能。测试时间占比项目总时的30%,目标是确保系统稳定性。

  • 前期(Day 1-3):重点进行单元测试,验证基础模块如环境配置、数据库连接和认证逻辑。
  • 中期(Day 4-6):开展集成测试,检查前后端交互、API响应和数据一致性。
  • 后期(Day 7-10):执行端到端测试,模拟完整用户流程;生成覆盖率报告,进行回归测试和优化。
  • 执行机制:每日站会讨论测试进度,团队成员协作,进行调试。

2. 测试工具的选择与应用

基于项目技术栈(Vue.js前端、Express.js后端、Sequelize/MySQL数据库),选择工具支持快速自动化和问题定位。工具应用逐步展开,从单元到端到端,确保高效发现和验证问题。

  • 后端测试工具:Jest + Supertest
    选择原因:Jest支持异步和覆盖率报告,Supertest模拟HTTP请求,适合API和模型测试。
    应用:用于路由验证和数据库操作测试,例如mock请求体检查插入逻辑。

  • 前端测试工具:Vitest + @vue/test-utils
    选择原因:与Vite集成高效,支持组件渲染和事件模拟。
    应用:测试Vue页面交互,如参数传递和响应头配置。

  • 端到端测试工具:Cypress
    选择原因:浏览器自动化,支持视频录制和自定义命令。
    应用:模拟用户操作,如登录流程和跨域请求验证。

3. 测试过程中发现的具体问题

测试过程中,通过层层验证发现了多个问题,这些问题涉及功能实现、配置和交互方面,并及时记录和解决。以下是关键发现的问题及其修复:

1)图片功能移除问题

问题描述

测试商品查询时发现模型和数据库中残留图片字段,导致数据返回不一致。

解决方案
  1. 后端修改

    • 从 Goods 模型中移除 imgUrl 字段
    • 修改所有返回商品数据的 API,确保不包含图片相关字段
    • 移除轮播图相关路由和功能
  2. 前端修改

    • 移除所有显示商品图片的组件
    • 移除轮播图组件
    • 修改商品列表和详情页面,不再显示图片
  3. 数据库修改

    • 执行 SQL 命令移除 goods 表中的 imgUrl 列:
      ALTER TABLE goods DROP COLUMN imgUrl;
      

2)API 404 错误 - 商品详情页面

问题描述

集成测试中暴露前端请求路径与后端不匹配。

问题原因

前端请求路径与后端路由定义不匹配:

  • 前端请求:/goods/detail
  • 后端路由:/home/goods/detail
解决方案

修改前端 GoodsDetail.vue 中的 API 请求路径:

// 修改前
const res = await request({
  url: `/goods/detail/${goodsId}`,
  method: 'GET'
});

// 修改后
const res = await request({
  url: `/home/goods/detail/${goodsId}`,
  method: 'GET'
});

3) API 500 错误 - 商品上传

问题描述

单元测试模拟上传时,因空id字段引发数据库错误。

问题原因

前端在新增商品时发送了空字符串的 id 字段,导致数据库插入时出现 “Incorrect integer value: ‘’ for column ‘id’” 错误。

解决方案
  1. 前端修改

    • 在 GoodsManage.vue 的 handleAddGoods 函数中移除 id 字段:
      // 修改前
      goodsForm.value = {
        id: '',
        name: '',
        price: '',
        categoryId: '',
        stock: '',
        desc: ''
      };
      
      // 修改后
      goodsForm.value = {
        name: '',
        price: '',
        categoryId: '',
        stock: '',
        desc: ''
      };
      
  2. 后端修改

    • 在 goodsRoutes.js 中过滤 id 字段:
      // 从请求体中移除imgUrl和id字段
      const { imgUrl, id, ...goodsData } = req.body;
      

4)订单详情页面失败

问题描述

端到端测试订单渲染失败,由于数据结构不匹配。

问题原因

订单详情 API 返回的数据结构与前端期望的不匹配,导致页面渲染失败。

解决方案
  1. 检查并确保后端 API 返回正确的数据结构
  2. 修改前端 OrderDetail.vue 组件,添加错误处理和数据验证
  3. 确保订单项关联查询正确执行

5)服务器连接被拒绝错误

问题描述

环境测试时SQLite加载失败导致系统出现 “Failed to load resource: net::ERR_CONNECTION_REFUSED” 错误,无法连接到后端服务器。

问题原因

SQLite3 模块加载失败,导致后端服务无法启动。

解决方案
  1. 修改 .env 文件中的数据库配置:

    # 修改前
    USE_SQLITE=true
    
    # 修改后
    USE_SQLITE=false
    
  2. 确保 MySQL 数据库配置正确,并重启后端服务:

    pm2 restart schooldash-backend
    

6)数据库模型与实际表结构不匹配

问题描述

查询测试发现imgUrl字段残留,导致数据库模型与实际表结构不匹配。

问题原因

虽然从模型中移除了 imgUrl 字段,但数据库表中仍然存在该字段,导致 Sequelize 查询时出现字段不匹配错误。

解决方案
  1. 通过 MySQL 查询确认表结构:

    DESCRIBE goods;
    
  2. 执行 SQL 命令移除不需要的字段:

    ALTER TABLE goods DROP COLUMN imgUrl;
    
  3. 确保模型定义与数据库表结构完全一致

7)订单页面商品图片缓存问题

问题描述

测试移除图片功能后,用户订单页面仍然显示商品图片。

问题原因

浏览器缓存了旧的订单数据,导致即使代码中已移除图片相关组件,页面仍然显示缓存的图片数据。

解决方案
  1. 前端修改

    • 在请求中添加时间戳参数防止缓存:

      params: { 
        status: statusFilter.value,
        t: new Date().getTime() // 添加时间戳防止缓存
      }
      
    • 在请求配置中添加缓存控制头:

      headers: {
        'Cache-Control': 'no-cache',
        'Pragma': 'no-cache'
      }
      
    • 在页面加载时清除可能的本地缓存:

      localStorage.removeItem('orderListCache');
      
  2. 用户端解决方案:

    • 清除浏览器缓存
    • 使用硬刷新(Ctrl+F5)重新加载页面

8)身份验证和角色权限问题

问题描述

测试中发现不同角色(用户、骑手、管理员)的身份验证和权限控制存在问题。

解决方案
  1. 实现基于角色的访问控制(RBAC)

  2. 为不同角色设置不同的 Token 存储键:

    • 用户:token
    • 管理员:adminToken
    • 骑手:riderToken
  3. 在请求拦截器中根据 URL 路径选择正确的 Token:

    if (config.url.includes('/admin/')) {
      token = localStorage.getItem('adminToken');
    } else if (config.url.includes('/rider/')) {
      token = localStorage.getItem('riderToken');
    } else {
      token = localStorage.getItem('token');
    }
    

9)数据库连接配置问题

问题描述

测试时产生数据库连接配置在不同环境下切换困难的问题,应同时支持 SQLite 和 MySQL。

解决方案
  1. 创建灵活的数据库配置文件:

    // config/db.js
    const useSQLite = process.env.USE_SQLITE === 'true';
    
    if (useSQLite) {
      // SQLite 配置
    } else {
      // MySQL 配置
    }
    
  2. 使用环境变量控制数据库类型:

    USE_SQLITE=false  # 使用 MySQL
    USE_SQLITE=true   # 使用 SQLite
    

10)跨域问题(CORS)

问题描述

分离部署测试出现访问拒绝。

解决方案

在后端 app.js 中配置 CORS:

const cors = require('cors');
app.use(cors({
  origin: ['http://localhost:5173', 'http://your-domain.com'],
  credentials: true
}));

4. 测试心得

测试过程强调问题驱动,发现如配置和缓存问题需多环境模拟,收获自动化工具加速迭代。挑战包括数据一致性验证复杂,但通过mock解决。建议未来集成更多边缘测试,提升安全性。

5. 项目测试评价

测试覆盖全面,发现并解决多个问题,提升系统稳定性。优点:工具高效,问题定位准。不足:端到端场景可进一步扩展。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值