点餐系统测试报告

这篇测试报告详述了一个门店点餐系统的功能测试和自动化测试情况。在功能测试中,发现了注册功能的参数校验问题和上传图片大小限制问题,并提供了相应的解决方案。自动化测试部分,使用了JUnit和Selenium针对用户和管理员的核心功能如登录、点餐、查看订单、评论、管理菜品等编写了测试用例,并展示了部分测试代码及执行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、项目介绍

项目简介

该项目是一个门店点餐系统,采用前后端分离的方式实现,后端框架是SSM,前端框架是 Vue。系统角色分为管理员和普通用户,不同的用户登录进入不同的页面。


功能介绍

  1. 登录:用户和管理员输入手机号和密码进行登录
  2. 注册:用户可以输入手机号、用户名、密码和确认密码进行注册。
  3. 注销:注销后,删除本地的记录和更新服务器中的登录状态。
  4. 下单:用户可以勾选列表中的菜品,添加备注信息,然后点击结算进行下单。
  5. 评论:用户可以在自己的下的订单中,选择菜品进行评论。
  6. 取消订单:用户可以取消自己未开始制作的订单。
  7. 管理菜品:管理员可以添加菜品、编辑菜品、添加或删除菜品类型,上架或下架菜品。
  8. 管理订单:管理员可以更新订单状态。
  9. 管理评论:管理员可以对评论进行删除。

界面截图

用户界面
在这里插入图片描述
在这里插入图片描述

管理员界面
在这里插入图片描述

在这里插入图片描述


二、功能测试

功能测试用例

在这里插入图片描述

发现的 BUG 和 解决方法

在功能测试的过程中,发现了两个小 BUG 。

注册功能

在注册功能中,后端的参数校验做的不到位:

  1. 后端没有校验手机号长度(11位)
  2. 后端没有校验手机号是否全数字
  3. 后端没有校验用户名长度(2~10)

绕过前端直接向后端发送请求,就可以注册这些非法的参数

在这里插入图片描述

在这里插入图片描述

解决方法:

后端注册接口中添加参数校验

if (user.getPhone().length() != 11) {
   
    return JsonResult.failure(-1, "手机号长度错误!");
}
if (!StringUtils.hasLength(user.getUsername()) || !StringUtils.hasLength(user.getPassword())) {
   
    return JsonResult.failure(-1, "用户名或密码不能为空!");
}
if (user.getUsername().length() < 2 || user.getUsername().length() > 10) {
   
    return JsonResult.failure(-1, "用户名长度错误!");
}

效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上传图片功能

在上传头像,图片太大时,后端报错,使用抓包工具 Fiddler 抓包发现:

{
   
    "code": 500,
    "msg": "Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.",
    "data": null
}
  • 报错原因是Spring Boot 默认的上传文件大小限制为 1MB

检查代码时发现,前后端对上传的图片大小和格式都没有做校验。

解决方法:

前端发请求前,对图片大小和格式进行校验:

beforeAvatarUpload(file) {
   
    let type = file.type;
    const flg1 = !(type === 'image/jpeg' || type === 'image/png')
    const flg2 = file.size / 1024 / 1024 > 1
    if (flg1) {
   
        this.$message.error('上传头像图片只能是 JPG 或 PNG 格式!')
    }
    if (flg2) {
   
        this.$message.error('上传头像图片大小不能超过 1MB!')
    }
    return !flg1 && !flg2
}

后端对图片格式进行校验:

String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
if (!".jpg".equals(fileName) && !".png".equals(fileName)) {
   
	return JsonResult.failure(-1, "上传头像图片只能是 JPG 或 PNG 格式!");
}

效果:

在这里插入图片描述


三、 自动化测试

使用 Junit + Selenium 进行自动化测试。

自动化测试用例

选择了部分核心功能,设计自动化测试用例。
在这里插入图片描述

用户功能自动化测试

登录功能

在这里插入图片描述

自动化测试代码:

@Order(1)
@ParameterizedTest
@CsvFileSource(resources = "loginUser.csv")
public void login(String phone, String password) throws InterruptedException {
   
    // 打开登录页面
    webDriver.get("http://43.142.48.195/");
    // 智能等待, 超时时间3秒
    webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    // 输入账号
    webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/div[2]/form/div[1]/div/div[1]/input"))
    .sendKeys(phone);
    // 输入密码
    webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/div[2]/form/div[2]/div/div/input"))
    .sendKeys(password);
    // 点击登录
    webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/div[2]/form/div[3]/div/button")).click();
    sleep(200);
    // 检验页面是否跳转到 用户菜品列表页
    String curUrl = webDriver.getCurrentUrl();
    Assertions.assertEquals("http://43.142.48.195/#/customer/customerDish", curUrl);
    // 检验是否为用户
    String status = webDriver.findElement(By.xpath("//*[@id=\"app\"]/div/section/header/div/div[1]/span[2]")).getText();
    Assertions.assertEquals("用户", status);
    // 检验菜品数量
    checkDishCount();
}

private void checkDishCount() {
   
    // 数据库中的上架的菜品数量
    int expectedCount = 22;
    // 页面显示的菜品数量
    int actualCount = webDriver.findElements(By.cssSelector(".el-checkbox__inner")).size();
    Assertions.assertEquals(expectedCount, actualCount);
}

CSV 文件:

在这里插入图片描述

搜索和重置

在这里插入图片描述

自动化测试代码

@Order(2)
@Test
public void searchForDishes() throws InterruptedException {
   
    // 搜索框输入 ”饭“
    webDriver.findElement(By.cssSelector("#app > div > section > section > main > div > div:nth-child(1) > div:nth-child(4) > div > input"))
    .sendKeys("饭");
    // 点击搜索
    webDriver
1.简介 1.1目的   本文档是将系统在测试过程出现的问题陈列出来,使得开发人员清楚的知道系统中所存在的问题与不足,从而加以改进,使系统更加健壮安全,增强系统的可运行性和可维护性。本文档的读者为开发人员和测试人员。 1. 2范围 本文档从编程人员编写代码开始就能使用,在用户登录系统、用户订餐系统、会员管理系统、订餐信息处理系统、菜式管理系统、系统用户管理系统等六大模块中均适用,在每一个模块都必须进行单元测试,到软件完整开发出来后进行综合测试。本文档将会解决测试问题、环境、结果、缺陷和评价等问题。 2. 测试内容 2.1 用户登录模块用户订餐系统会员管理系统订餐信息处理系统菜式管理系统 用户输入ID和密码,如验证无误便可登陆成功,在登陆状态下所做的定购额记入用户总积分。如果用户不登陆或为非会员,则定购额无法记入总积分。 2.2 用户订餐系统 用户首页上显示的菜式图片来点选自己喜欢的菜式和饭食,也可以对快餐进行分类查询。点选确认后放入虚拟购物车。可点选多样菜式。最后在虚拟柜台提交所有定购的物品,定购金额在10元以上才可提交,否则弹出对话框提示定购额不足。 2.3会员管理系统 对注册为会员的用户的信息进行管理。可以每月对会员进行积分排名,星级会员评定,以及对用户资料进行删除。 2.4 订餐信息处理系统 对订餐的信息进行管理和分类。将全天定餐信息显示在服务器端,分记录显示。记录分为两种状态:“未派送”和“已派送”。此系统的操作人员把刚刚送出的“未派送”记录进行标记,该记录则变为“已派送”。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值