
屈冠成 :个人主页
🔥 个人专栏 :C语言
目前我所拥有的,不过是努力过后的微薄成果。
商城系统测试记录(用户端 + 管理端)
管理端 :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、后台密码太简单。其他像购物车能填负数、点快了下单会生成两笔订单,也建议一起修。
所以这次测试我的结论是:基本能用,但还不算完全通过。等上面高优先级的问题改完,我会按"注册 → 登录 → 下单 → 后台发货"再走一遍。
这是我第一次完整地测一个部署在服务器上的系统,很多地方还不太懂,写下来主要是给自己留个记录,也希望能帮到同样在学测试的同学。