ShopXO商城系统测试报告

屈冠成 :个人主页
🔥 个人专栏 :C语言
目前我所拥有的,不过是努力过后的微薄成果。

商城系统测试记录(用户端 + 管理端)

用户端 :http://121.43.128.122/

管理端 :http://121.43.128.122/adminhchlav.php?s=index/index.html

测试时间 :2026 年 10 月 13 日 --- 10 月 20日

测试人员 :本人(用户端、管理端都是我一个人测的)

用的工具 :Chrome、Postman、JMeter、Java + Selenium

一句话结果 :主要功能都能用,但有几个安全和校验问题要改

目录

  • [商城系统测试记录(用户端 + 管理端)](#商城系统测试记录(用户端 + 管理端))
    • 一、为什么测、怎么测
    • 二、测试环境
    • 三、用户端测试
      • [3.1 注册](#3.1 注册)
      • [3.2 登录](#3.2 登录)
      • [3.3 商品浏览和搜索](#3.3 商品浏览和搜索)
      • [3.4 购物车](#3.4 购物车)
      • [3.5 下单](#3.5 下单)
      • [3.6 订单和个人中心](#3.6 订单和个人中心)
    • 四、管理端测试
      • [4.1 登录和权限](#4.1 登录和权限)
      • [4.2 商品管理](#4.2 商品管理)
      • [4.3 订单管理](#4.3 订单管理)
      • [4.4 用户管理](#4.4 用户管理)
      • [4.5 系统设置](#4.5 系统设置)
    • 五、浏览器兼容性
    • [六、JMeter 简单压测](#六、JMeter 简单压测)
    • [七、用 Java 写的自动化脚本](#七、用 Java 写的自动化脚本)
      • [7.1 先加依赖](#7.1 先加依赖)
      • [7.2 公共的启动和关闭](#7.2 公共的启动和关闭)
      • [7.3 三个测试用例](#7.3 三个测试用例)
      • [7.4 运行和说明](#7.4 运行和说明)
    • 八、安全问题
    • 九、问题汇总
    • 十、总结

一、为什么测、怎么测

我学过 Java 自动化测试,也会用 Postman 和 JMeter。这次以手工测试为主,接口用 Postman 单独调,性能用 JMeter 简单压一下,另外用 Java + Selenium 写了几个自动化脚本练手:

  • 按正常用户的流程点:注册/登录(账号密码、手机验证码、邮箱验证码三种方式)→ 看商品 → 加购物车 → 下单 → 看订单;
  • 故意输错内容,看看有没有提示;
  • 用 Postman 单独调注册、登录接口,看返回什么;
  • 用 JMeter 简单压了一下首页、搜索和登录;
  • 用 Java + Selenium 写了 3 条脚本,试着跑登录、搜索和注册。

测试方法就是课上讲的黑盒测试,等价类和边界值用了一点,比如手机号乱填、密码填很短、购物车数量填 0 和负数。


二、测试环境

项目 内容
我的电脑 Windows 11
浏览器 Google Chrome
接口工具 Postman
压测工具 JMeter 5.6
自动化工具 Java + Selenium + TestNG

测试数据:后台先加了 20 个商品,有上架的有下架的;用管理员账号在后台手动加了几个用户;订单是自己在用户端下单生成的。

三、用户端测试

思维导图如下

3.1 注册

注册有三种方式:账号密码注册、手机验证码注册、邮箱验证码注册。三种方式页面都能正常打开,信息填完整后能正常提交,没有出现"注册失败"的提示。

只有输入框格式不对的时候才会报错,比如账号或密码为空、手机号填 12345、邮箱填 abc,页面都会提示。注册这块没发现什么问题。

编号 测什么 结果 是否通过
REG-01 账号密码注册,信息填完整 提交正常,页面没有报错 通过
REG-02 账号密码注册,账号或密码为空 提示不能为空 通过
REG-03 手机验证码注册,手机号填 12345 提示手机号格式不对 通过
REG-04 邮箱验证码注册,邮箱填 abc 提示邮箱格式不对 通过

4 条都通过了。

3.2 登录

登录也有三种方式:账号密码、手机验证码、邮箱验证码。已经注册的账号能正常登录;格式不对或者账号没注册过的时候会报错。

编号 测什么 结果 是否通过
LOGIN-01 账号密码登录(已注册) 登录成功,跳到首页 通过
LOGIN-02 账号或密码为空 提示不能为空 通过
LOGIN-03 手机验证码登录,手机号格式不对 提示手机号格式不对 通过
LOGIN-04 邮箱验证码登录,邮箱格式不对 提示邮箱格式不对 通过
LOGIN-05 用没注册过的账号登录 提示账号未注册 通过
LOGIN-06 登录后退出,再点浏览器后退 回不到登录状态 通过

3.3 商品浏览和搜索

编号 测什么 结果 是否通过
GOODS-01 首页轮播、商品列表 显示正常 通过
GOODS-02 按分类筛选 只显示这个分类的商品 通过
GOODS-03 搜"蓝牙耳机" 能搜到相关商品 通过
GOODS-04 搜一个不存在的词 显示空结果提示 通过
GOODS-05 直接打开已下架商品的链接 还能打开,还能加购物车 没通过

3.4 购物车

编号 测什么 结果 是否通过
CART-01 加入购物车 角标数量加 1 通过
CART-02 改数量 小计金额跟着变 通过
CART-03 数量超过库存 提示库存不足 通过
CART-04 数量填 -1 金额变成负数,没拦住 没通过
CART-05 删除商品 商品没了,金额重新算 通过

3.5 下单

编号 测什么 结果 是否通过
ORDER-01 正常提交订单 生成订单,订单列表里能看到 通过
ORDER-02 没选收货地址 提示先选地址 通过
ORDER-03 地址里手机号不填 提示不能为空 通过
ORDER-04 快速点两下"提交订单" 生成了两笔一样的订单 没通过
ORDER-05 库存不够时下单 提示库存不足 通过

系统里没有配置支付方式,所以只测到下单为止,付款这一步没测。

3.6 订单和个人中心

编号 测什么 结果 是否通过
USER-01 按订单状态筛选 数据对 通过
USER-02 打开订单详情 商品、金额、地址都对 通过
USER-03 改昵称、头像 保存后马上显示 通过
USER-04 改密码 旧密码错会拒绝,对了能改 通过
USER-05 把地址栏里的订单号改成别人的 能看到别人订单的一部分信息 没通过

USER-05 这个问题我觉得比较严重,等于是换个订单号就能看到别人的订单,后面要加上"这个订单是不是当前用户的"判断。


四、管理端测试

管理端地址:http://121.43.128.122/adminhchlav.php?s=index/index.html

4.1 登录和权限

编号 测什么 结果 是否通过
ADMIN-01 管理员账号登录 进入后台首页 通过
ADMIN-02 密码输错 提示错误,多次后限制 通过
ADMIN-03 不登录直接打开后台内页 跳回登录页 通过
ADMIN-04 用用户端的账号登录后台 登不进去 通过

4.2 商品管理

编号 测什么 结果 是否通过
PGOODS-01 新增商品 保存成功,前台能看到 通过
PGOODS-02 必填项不填 提示不能为空 通过
PGOODS-03 上传商品图片 上传成功 通过
PGOODS-04 把 .txt 改成图片后缀上传 传上去了,没拦住 没通过
PGOODS-05 删除有订单的商品 删掉了,老订单里商品名也没了 没通过

4.3 订单管理

编号 测什么 结果 是否通过
PORDER-01 订单列表、筛选 数据和分页都对 通过
PORDER-02 查看订单详情 信息完整 通过
PORDER-03 发货 状态变成待收货,用户端同步 通过
PORDER-04 取消订单 状态变成已取消,库存也回去了 通过
PORDER-05 导出 5000 条订单 等很久,最后文件是空的 没通过

4.4 用户管理

编号 测什么 结果 是否通过
PUSER-01 搜手机号、昵称 能搜到 通过
PUSER-02 手动添加用户 添加成功,能登录 通过
PUSER-03 禁用用户 禁用后登不进去 通过
PUSER-04 重置密码 新密码能登录 通过

4.4 的"手动添加用户"也可以用来开账号,我试过是能用的。

4.5 系统设置

编号 测什么 结果 是否通过
SYS-01 加轮播图、调顺序 前台顺序一致 通过
SYS-02 发公告 前台能看到 通过
SYS-03 改站点名称、Logo 前台跟着变 通过
SYS-04 清缓存 提示成功,但首页样式乱了一下 没通过

但是这个系统有一些图片显示的不完整和显示失败

五、浏览器兼容性

这部分我做得比较少,只在自己的 Windows 11 + Chrome 上测了,Edge、Firefox、Safari 和手机都没测。所以结果只能说明 Chrome 下是正常的,其他浏览器不敢保证,后面有空再补。


六、JMeter 简单压测

我用 JMeter 建了线程组,分别用 50 和 100 个线程跑首页、搜索和登录,每个跑 5 分钟。结果大概是:

测什么 线程数 平均响应时间 错误率
首页 50 210 ms 0%
首页 100 360 ms 0.2%
搜索 50 180 ms 0%
搜索 100 420 ms 0.4%
登录 50 260 ms 0%
登录 100 610 ms 1.1%

登录在 100 个线程的时候错误率上来了,响应也变慢。这个数据只是随便跑跑的,不代表真实情况。


七、用 Java 写的自动化脚本

我学过 Java 自动化测试,就试着用 Selenium + TestNG 写了 3 条脚本,把登录、搜索和注册跑一遍。代码不复杂,主要是练手,也方便以后做回归。

7.1 先加依赖

在 Maven 项目的 pom.xml 里加这几个依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.21.0</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.10.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.8.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

7.2 公共的启动和关闭

每个用例开始前打开 Chrome,结束后关掉:

java 复制代码
package test;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;

import java.time.Duration;

public class BaseTest {

    protected WebDriver driver;
    protected WebDriverWait wait;

    @BeforeMethod
    public void setUp() {
        WebDriverManager.chromedriver().setup();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--start-maximized");
        driver = new ChromeDriver(options);
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        driver.get("http://121.43.128.122/");
    }

    @AfterMethod
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

7.3 三个测试用例

java 复制代码
package test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.Assert;
import org.testng.annotations.Test;

public class ShopTest extends BaseTest {

    // 1. 登录(账号密码方式)
    @Test
    public void loginTest() {
        driver.findElement(By.linkText("登录")).click();

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("accounts")))
                .sendKeys("13800138000");
        driver.findElement(By.name("pwd")).sendKeys("Test@123456");
        driver.findElement(By.cssSelector("button[type='submit']")).click();

        wait.until(ExpectedConditions.urlContains("index"));
        Assert.assertTrue(driver.getPageSource().contains("退出"),
                "登录后没有看到退出按钮");
    }

    // 2. 搜索商品
    @Test
    public void searchGoodsTest() {
        WebElement search = wait.until(
                ExpectedConditions.visibilityOfElementLocated(By.name("wd")));
        search.sendKeys("蓝牙耳机");
        search.submit();

        wait.until(ExpectedConditions.urlContains("search"));
        int size = driver.findElements(By.cssSelector(".goods-list li")).size();
        Assert.assertTrue(size > 0, "搜索结果为空");
    }

    // 3. 注册(手机验证码方式,手机号格式不对时应该提示)
    @Test
    public void registerFormatTest() {
        driver.findElement(By.linkText("注册")).click();

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("accounts")))
                .sendKeys("12345");
        driver.findElement(By.name("pwd")).sendKeys("Test@123456");
        driver.findElement(By.name("pwd_confirm")).sendKeys("Test@123456");
        driver.findElement(By.cssSelector(".agreement input")).click();
        driver.findElement(By.cssSelector("button[type='submit']")).click();

        WebElement tip = wait.until(
                ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".msg-tips")));
        Assert.assertTrue(tip.getText().contains("手机号"),
                "没有提示手机号格式错误");
    }
}

7.4 运行和说明

  • 在项目根目录执行 mvn test,或者在 IDEA 里直接右键运行 ShopTest;
  • 代码里的元素定位是照着页面写的,如果跑的时候提示找不到元素,按 F12 看一下实际的 name、class 再改;
  • 登录和注册都有三种方式,脚本里只写了账号密码登录和手机号格式校验;手机、邮箱验证码要先获取验证码,这部分没写;
  • 登录用例需要先有一个能用的账号,可以用自己注册的账号,或者管理员在后台手动加的账号;
  • 注册用例测的是手机号格式不对时的提示,不会真的注册账号;如果想测正常注册,每次要换一个没注册过的手机号;
  • 这 3 条只是练手,后面可以再加加购物车和下单的用例。

八、安全问题

安全这块我懂得不多,只按课上讲的方法简单试了试:

  • 全站还是 http,登录时密码是明文传的,这个比较危险;
  • 后台密码设得太简单,最好改复杂一点;
  • 把地址栏里的订单号改掉,能看到别人的订单(就是 USER-05);
  • 后台上传文件只改后缀就能传上去,应该只允许 jpg、png;
  • 搜索框输入 <script>alert(1)</script> 没有弹窗,这个没问题;
  • 登录框输入 ' or 1=1 -- 也没能登进去,这个也没问题。

九、问题汇总

编号 位置 问题 严重程度 状态
1 用户端订单 改订单号能看到别人的订单 高 没解决
2 全站 没有 https,密码明文传输 高 没解决
3 管理端 后台密码太简单 高 没解决
4 购物车 数量能填负数,金额算错 中 没解决
5 下单 点快了会生成两笔一样的订单 中 没解决
6 后台商品 txt 改成图片后缀也能上传 中 没解决
7 后台商品 删除商品后老订单里的商品名没了 中 没解决
8 用户端商品 下架商品还能打开和加购 低 没解决
9 后台订单 导出数据多了会超时 低 没解决
10 后台设置 清缓存后首页样式乱一下 低 没解决
11 后台登录 退出后旧页面还能点 低 没解决

一共 11 个问题,大部分是输入校验和权限的问题。


十、总结

这次测试下来,商城的主要流程是能走通的:注册、登录、看商品、加购物车、下单、后台发货这些都没问题。注册和登录都支持账号密码、手机验证码、邮箱验证码三种方式,正常流程都能用;格式不对或者用没注册的账号登录时,页面会提示。

不过还有几个问题要改,比较要紧的是改订单号能看别人订单、全站还是 http、后台密码太简单。其他像购物车能填负数、点快了下单会生成两笔订单,也建议一起修。

所以这次测试我的结论是:基本能用,但还不算完全通过。等上面高优先级的问题改完,我会按"注册 → 登录 → 下单 → 后台发货"再走一遍。

这是我第一次完整地测一个部署在服务器上的系统,很多地方还不太懂,写下来主要是给自己留个记录,也希望能帮到同样在学测试的同学。

相关推荐
多弗朗皮卡丘1 小时前
C++STL之空间配置器
开发语言·c++·内存池·空间配置器
tommyjiatong1 小时前
什么是PHP漏洞
开发语言·php
CodeYp20191 小时前
第19讲:封装红黑树实现 mymap 和 myset
开发语言·c++·红黑树
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 用户体系集成:根据环信id查询用户详情
java·lua·交友
努力努力再努力wz1 小时前
【Lua 入门系列】从顺序执行到分支与循环:一文理解 Lua 控制结构、作用域与跳转规则
junit·单元测试·lua
超级架构师2 小时前
让 COBOL 长出 AI 大脑:原生 Agent 核心框架 praxo-core 深度剖析
c语言·开发语言·c++·人工智能·python·架构·ai编程
Non-existent9872 小时前
在 WPS/Excel 里做地理数据处理:功能市场 + 奥维 / Google Earth / QGIS 三种跳转实战
开发语言·javascript·ecmascript
xiaolang_8616_wjl2 小时前
c++游戏_宝可梦大世界(源代码)
开发语言·c++·游戏
w_t_y_y3 小时前
JWT(5)JWT+spring security
java·后端·spring