[AI Claude] 软件测试2
好的,我现在为你准备一份预填充好大部分内容的测试报告和PPT内容。这里面的数据是我根据项目结构和常见的测试场景推理和编造的,你需要根据你的实际操作结果(包括截图、实际数据、发现的缺陷等)进行替换和修改。
我将按照之前定义的结构,尽量完整地输出这些文件内容。
文件一:《软件测试项目综合实训》测试报告 (完整版 - 预填充)
《软件测试项目综合实训》测试报告
项目名称:platform-v1.0.0 电商平台测试
小组成员:张三 (请替换为你的名字)
日期:2025年06月05日 (请替换为实际提交日期)
目录
- 引言
1.1 编写目的
1.2 项目背景
1.3 参考资料 - 测试概述
2.1 测试范围
2.2 测试环境
2.3 测试策略概述 - 测试需求分析
3.1 platform-admin 后台管理系统功能点
3.2 platform-api 接口功能点
3.3 非功能需求点 - 测试计划回顾
4.1 计划执行情况
4.2 资源使用情况 - 单元测试
5.1 测试对象及方法
5.2 测试用例与代码
5.3 测试结果与分析 - 功能测试
6.1 测试对象及方法
6.2 测试用例设计
6.3 测试执行过程与结果
6.4 缺陷列表与分析 - 接口测试
7.1 测试对象及方法
7.2 核心接口说明
7.3 测试用例与执行结果 - 性能测试
8.1 测试对象及方法
8.2 关键业务场景
8.3 负载设计
8.4 测试结果与分析 - 测试管理工具使用
9.1 选用工具简介
9.2 在本项目的测试中应用 - 测试总结
10.1 测试执行总结
10.2 缺陷总结与分析
10.3 项目质量评估
10.4 经验教训与建议
附录 (可选)
A. 完整测试用例列表 (部分已在正文体现)
B. 单元测试代码 (部分已在正文体现)
C. Selenium脚本片段 (部分已在正文体现)
1. 引言
1.1 编写目的
本文档旨在记录对 platform-v1.0.0
电商平台项目进行的软件测试全过程,包括测试需求分析、测试计划、各类测试(单元、功能、接口、性能)的设计、执行与结果分析,以及测试总结。本文档作为项目测试阶段的主要成果,用于评估软件质量,为软件的后续改进和上线提供依据,并作为课程考核的提交材料。
1.2 项目背景
platform-v1.0.0
是一个B/S架构的电商平台项目,主要包含两大部分:
platform-admin
: 后台管理系统,提供商品管理、订单管理、用户管理等功能,供平台运营人员使用。platform-api
: API接口服务,为前端应用(如微信小程序wx-mall
或uni-mall
)提供数据支持和业务逻辑处理。
该项目技术栈主要为Java SSM (Spring, SpringMVC, MyBatis),数据库采用MySQL。
1.3 参考资料
- 《软件测试项目综合实训》考核方案(2024-2025学年第2学期)
platform-v1.0.0
项目源代码及相关文档(如README.md
)- JUnit官方文档
- Selenium官方文档
- Postman官方文档
- JMeter官方文档
2. 测试概述
2.1 测试范围
本次测试主要覆盖 platform-v1.0.0
项目的核心功能模块,具体包括:
platform-admin
(后台管理系统):- 系统登录模块
- 用户管理模块 (增删改查、角色分配等)
- 商品管理模块 (商品分类、商品增删改查、上下架等)
- 订单管理模块 (订单查看、发货处理等)
platform-api
(API接口服务):- 用户认证接口 (登录、注册)
- 商品接口 (列表、详情)
- 购物车接口 (添加、查看)
- 订单接口 (提交、查询)
- 单元测试: 选取
platform-common
和platform-admin
中的部分工具类和Service层方法。 - 性能测试: 针对后台登录、API商品列表查询等关键场景。
2.2 测试环境
- 硬件环境:
- CPU: Intel Core i5 (或同等配置)
- 内存: 8GB RAM
- 硬盘: 256GB SSD
- 软件环境:
- 操作系统: Windows 10 (或 macOS / Linux)
- JDK: 1.8.0_XXX
- Maven: 3.6.X
- IDE: IntelliJ IDEA 2023.X
- 数据库: MySQL 5.7.X
- Web服务器: Apache Tomcat 8.5.X (用于部署
platform-admin
和platform-api
) - 浏览器: Google Chrome 最新版, Firefox 最新版
- 被测项目版本:
platform-v1.0.0
2.3 测试策略概述
本次测试采用多种测试方法相结合的策略:
- 单元测试: 使用JUnit对项目中的工具类和核心业务逻辑的Service层进行白盒测试,确保代码单元的正确性。
- 功能测试: 针对
platform-admin
的Web界面,使用Selenium WebDriver (Java)结合手动测试,验证各项功能是否符合需求规格。采用等价类划分、边界值分析、决策表等方法设计测试用例。 - 接口测试: 使用Postman对
platform-api
提供的核心API接口进行黑盒测试,验证接口的正确性、健壮性和安全性。 - 性能测试: 使用JMeter对选定的关键业务场景进行负载测试和压力测试,评估系统在高并发情况下的表现。
- 测试管理: (概念性)通过模拟使用禅道等测试管理工具的思想,对测试用例、缺陷等进行管理。
3. 测试需求分析
3.1 platform-admin
后台管理系统功能点
- 用户登录:
- 提供用户名、密码输入框及登录按钮。
- 验证码功能。
- 登录成功后跳转到后台主页。
- 登录失败(用户名或密码错误、验证码错误)时应有相应提示。
- 用户管理:
- 查询用户列表(支持分页、条件搜索)。
- 添加新用户(包括用户名、密码、角色等)。
- 修改用户信息。
- 删除用户。
- 分配用户角色。
- 商品管理:
- 商品分类管理(增删改查)。
- 商品列表查询(支持分页、按分类/名称搜索)。
- 添加新商品(名称、描述、价格、库存、图片、所属分类等)。
- 编辑商品信息。
- 商品上下架操作。
- 删除商品。
- 订单管理:
- 订单列表查询(支持分页、按订单号/用户搜索)。
- 查看订单详情。
- 订单发货操作。
- (可选) 订单取消、退款处理。
- 系统管理:
- 角色管理(增删改查、权限分配)。
- 菜单管理。
- 参数配置。
3.2 platform-api
接口功能点
- 用户认证接口:
/api/auth/login
: 用户登录,成功返回token。/api/auth/register
: 用户注册。/api/user/info
: 获取当前登录用户信息 (需token)。
- 首页接口:
/api/index/index
: 获取首页数据(轮播图、分类、推荐商品等)。
- 商品接口:
/api/goods/list
: 获取商品列表(支持分类、关键词、排序、分页)。/api/goods/detail
: 获取商品详情。/api/goods/category
: 获取商品分类。
- 购物车接口:
/api/cart/add
: 添加商品到购物车 (需token)。/api/cart/list
: 查看购物车列表 (需token)。/api/cart/update
: 修改购物车商品数量 (需token)。/api/cart/delete
: 删除购物车商品 (需token)。
- 订单接口:
/api/order/submit
: 提交订单 (需token)。/api/order/list
: 获取用户订单列表 (需token)。/api/order/detail
: 获取订单详情 (需token)。- (可选)
/api/pay/prepay
: 模拟支付接口。
3.3 非功能需求点
- 性能需求:
- 后台管理系统页面加载时间应在3秒内。
- 核心API接口平均响应时间在负载情况下(如50并发)应小于1秒。
- 系统能支持至少50个并发用户进行常规操作。
- 易用性需求:
- 后台管理界面布局合理,操作流程清晰,提示信息明确。
- API接口文档(通过Swagger生成)清晰易懂。
- 安全性需求:
- 用户密码应加密存储。
- 关键操作应有权限校验。
- 防止常见的Web攻击(如SQL注入、XSS,通过框架层面保障)。
4. 测试计划回顾
4.1 计划执行情况
任务内容 | 计划开始时间 | 计划结束时间 | 实际开始时间 | 实际结束时间 | 状态 | 备注 |
---|---|---|---|---|---|---|
环境搭建与熟悉项目 | 2025-05-20 | 2025-05-22 | 2025-05-20 | 2025-05-23 | 完成 | MySQL配置稍有延迟 |
测试需求分析与计划编写 | 2025-05-23 | 2025-05-24 | 2025-05-23 | 2025-05-24 | 完成 | |
单元测试用例设计与执行 | 2025-05-25 | 2025-05-26 | 2025-05-25 | 2025-05-26 | 完成 | |
功能测试用例设计 | 2025-05-26 | 2025-05-28 | 2025-05-26 | 2025-05-28 | 完成 | |
功能测试脚本编写与执行 | 2025-05-29 | 2025-06-01 | 2025-05-29 | 2025-06-02 | 完成 | Selenium脚本调试耗时较多 |
接口测试用例设计与执行 | 2025-06-01 | 2025-06-03 | 2025-06-01 | 2025-06-03 | 完成 | |
性能测试脚本设计与执行 | 2025-06-03 | 2025-06-04 | 2025-06-03 | 2025-06-04 | 完成 | |
测试报告与PPT编写 | 2025-06-04 | 2025-06-05 | 2025-06-04 | 2025-06-05 | 进行中 |
4.2 资源使用情况
- 硬件资源: 个人PC一台 (配置符合计划)。
- 软件资源: JDK 1.8, Maven 3.6.3, IntelliJ IDEA 2023.2, MySQL 5.7, Tomcat 8.5, JUnit 4.12, Selenium WebDriver 3.141.59, Postman 9.x, JMeter 5.4。
- 人力资源: 张三 (1人)。
5. 单元测试
5.1 测试对象及方法
- 测试工具: JUnit 4.12
- 测试对象选取原则: 优先选择
platform-common
中的通用工具类,以及platform-admin
中不严重依赖复杂外部环境(如Servlet API、大量Spring Bean注入)的Service层方法或其调用的核心逻辑方法。 - 测试对象示例:
platform-common/src/main/java/com/platform/utils/DateUtils.java
中的format(Date date, String pattern)
方法。platform-common/src/main/java/com/platform/utils/StringUtils.java
中的isNullOrEmpty(String str)
方法。 (假设存在此方法或类似方法)
5.2 测试用例与代码
5.2.1 DateUtils.format()
方法测试
- 测试类:
com.platform.utils.DateUtilsTest
- 测试方法:
testFormat()
- 用例1:
- 输入:
Date
对象 (例如2025-06-05 10:30:00
), patternyyyy-MM-dd HH:mm:ss
- 预期输出:字符串
"2025-06-05 10:30:00"
- 输入:
- 用例2:
- 输入:
Date
对象 (例如2025-06-05 10:30:00
), patternyyyy/MM/dd
- 预期输出:字符串
"2025/06/05"
- 输入:
- 用例3:
- 输入:
null
Date对象, patternyyyy-MM-dd
- 预期输出:
null
(或空字符串,取决于方法实现)
- 输入:
测试代码示例 (DateUtilsTest.java
):
package com.platform.utils;import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;public class DateUtilsTest {@Testpublic void testFormat_normalDateTime() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date testDate = null;try {testDate = sdf.parse("2025-06-05 10:30:00");} catch (ParseException e) {e.printStackTrace();}String result = DateUtils.format(testDate, "yyyy-MM-dd HH:mm:ss");assertEquals("2025-06-05 10:30:00", result);}@Testpublic void testFormat_normalDateOnly() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date testDate = null;try {testDate = sdf.parse("2025-06-05 10:30:00");} catch (ParseException e) {e.printStackTrace();}String result = DateUtils.format(testDate, "yyyy/MM/dd");assertEquals("2025/06/05", result);}@Testpublic void testFormat_nullDate() {// 假设DateUtils.format对null date返回nullString result = DateUtils.format(null, "yyyy-MM-dd");assertNull(result);}
}
5.2.2 StringUtils.isNullOrEmpty()
方法测试 (假设此工具类和方法存在)
- 测试类:
com.platform.utils.StringUtilsTest
- 测试方法:
testIsNullOrEmpty()
- 用例1: 输入:
null
字符串。预期:true
。 - 用例2: 输入:空字符串
""
。预期:true
。 - 用例3: 输入:非空字符串
"test"
。预期:false
。 - 用例4: 输入:包含空格的字符串
" "
。预期:false
(取决于方法具体实现,通常非空)。
测试代码示例 (StringUtilsTest.java
):
package com.platform.utils; // 假设的包名import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;// 假设的StringUtils类
// class StringUtils {
// public static boolean isNullOrEmpty(String str) {
// return str == null || str.isEmpty();
// }
// }public class StringUtilsTest {@Testpublic void testIsNullOrEmpty_nullInput() {assertTrue(StringUtils.isNullOrEmpty(null));}@Testpublic void testIsNullOrEmpty_emptyInput() {assertTrue(StringUtils.isNullOrEmpty(""));}@Testpublic void testIsNullOrEmpty_nonEmptyInput() {assertFalse(StringUtils.isNullOrEmpty("test"));}@Testpublic void testIsNullOrEmpty_spaceInput() {assertFalse(StringUtils.isNullOrEmpty(" ")); // 通常空格不视为空}
}
5.3 测试结果与分析
所有单元测试用例均已在开发环境中执行并通过。
DateUtilsTest
: 3个测试用例全部通过。StringUtilsTest
: 4个测试用例全部通过。
[截图:JUnit测试结果概览图,显示绿色通过条]
分析:
通过单元测试,验证了 DateUtils
的日期格式化功能在正常和边界条件(如null输入)下行为符合预期。同时,StringUtils
的空字符串判断逻辑也得到了验证。这为上层业务逻辑的正确性提供了一定的基础保障。
6. 功能测试
6.1 测试对象及方法
- 测试对象:
platform-admin
后台管理系统。 - 测试方法: 主要采用Selenium WebDriver (Java) 进行自动化测试脚本编写和执行,辅以少量探索性手动测试。
- 用例设计方法: 等价类划分、边界值分析、错误推测法。
6.2 测试用例设计
(此处仅列举部分核心用例,完整用例见附录A或单独文档)
用例ID | 模块 | 子模块 | 测试标题 | 设计方法 | 前置条件 | 测试步骤 | 预期结果 |
---|---|---|---|---|---|---|---|
TC_FUNC_LOGIN_001 | 用户登录 | 登录 | 正确用户名密码登录成功 | 等价类有效 | 后台服务启动,存在用户admin/admin | 1. 打开登录页 2. 输入用户名:admin 3. 输入密码:admin 4. 点击登录按钮 | 成功登录,跳转到后台首页,显示欢迎信息 “admin” |
TC_FUNC_LOGIN_002 | 用户登录 | 登录 | 错误密码登录失败 | 等价类无效 | 后台服务启动 | 1. 打开登录页 2. 输入用户名:admin 3. 输入密码:wrongpassword 4. 点击登录按钮 | 登录失败,页面提示“用户名或密码错误” |
TC_FUNC_LOGIN_003 | 用户登录 | 登录 | 空用户名登录失败 | 边界值 | 后台服务启动 | 1. 打开登录页 2. 用户名框留空 3. 输入密码:admin 4. 点击登录按钮 | 登录失败,页面提示“用户名不能为空” |
TC_FUNC_LOGIN_004 | 用户登录 | 登录 | 空密码登录失败 | 边界值 | 后台服务启动 | 1. 打开登录页 2. 输入用户名:admin 3. 密码框留空 4. 点击登录按钮 | 登录失败,页面提示“密码不能为空” |
TC_FUNC_GOODS_001 | 商品管理 | 添加商品 | 成功添加商品(所有必填项有效) | 等价类有效 | 已登录后台管理系统 | 1. 进入商品管理模块 2. 点击“添加商品” 3. 输入商品名称、价格(50)、库存(100)、选择分类 4. 上传商品图片 5. 点击“保存”按钮 | 商品添加成功,列表页显示新商品,数据库记录正确 |
TC_FUNC_GOODS_002 | 商品管理 | 添加商品 | 添加商品(商品名称为空) | 等价类无效 | 已登录后台管理系统 | 1. 进入商品管理模块 2. 点击“添加商品” 3. 商品名称留空,其他项有效 4. 点击“保存” | 添加失败,提示“商品名称不能为空” |
TC_FUNC_GOODS_003 | 商品管理 | 添加商品 | 添加商品(价格为负数) | 边界值 | 已登录后台管理系统 | 1. 进入商品管理模块 2. 点击“添加商品” 3. 商品名称有效,价格输入-10 4. 点击“保存” | 添加失败,提示“价格必须为正数” |
TC_FUNC_GOODS_004 | 商品管理 | 添加商品 | 添加商品(库存为非数字) | 等价类无效 | 已登录后台管理系统 | 1. 进入商品管理模块 2. 点击“添加商品” 3. 商品名称有效,库存输入“abc” 4. 点击“保存” | 添加失败,提示“库存必须为数字” |
TC_FUNC_GOODS_005 | 商品管理 | 查询商品 | 按存在的商品名称查询 | 等价类有效 | 已登录,商品列表有商品“测试商品A” | 1. 进入商品管理模块 2. 在搜索框输入“测试商品A” 3. 点击查询 | 列表显示包含“测试商品A”的记录 |
TC_FUNC_GOODS_006 | 商品管理 | 查询商品 | 按不存在的商品名称查询 | 等价类无效 | 已登录 | 1. 进入商品管理模块 2. 在搜索框输入“一个不存在的商品XYZ” 3. 点击查询 | 列表为空或提示“未找到相关商品” |
TC_FUNC_GOODS_007 | 商品管理 | 编辑商品 | 成功编辑商品价格 | 等价类有效 | 已登录,存在可编辑商品 | 1. 进入商品管理模块 2. 选择一个商品点击“编辑” 3. 修改价格为60 4. 点击“保存” | 编辑成功,商品价格更新为60,数据库记录正确 |
TC_FUNC_GOODS_008 | 商品管理 | 上下架 | 商品上架操作 | 等价类有效 | 已登录,存在一个已下架商品 | 1. 进入商品管理模块 2. 选中一个已下架商品 3. 点击“上架”按钮 | 商品状态变为“已上架”,前端可浏览 |
TC_FUNC_GOODS_009 | 商品管理 | 上下架 | 商品下架操作 | 等价类有效 | 已登录,存在一个已上架商品 | 1. 进入商品管理模块 2. 选中一个已上架商品 3. 点击“下架”按钮 | 商品状态变为“已下架”,前端不可浏览 |
TC_FUNC_GOODS_010 | 商品管理 | 删除商品 | 删除指定商品 | 等价类有效 | 已登录,存在一个可删除商品 | 1. 进入商品管理模块 2. 选中一个商品 3. 点击“删除”按钮 4. 确认删除 | 商品从列表消失,数据库记录被标记删除或物理删除 |
6.3 测试执行过程与结果
Selenium WebDriver脚本示例 (Java - 登录测试 TC_FUNC_LOGIN_001
):
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertTrue;public class AdminLoginTest {private WebDriver driver;private String baseUrl = "http://localhost:8080/platform-admin/"; // 你的后台URL@Beforepublic void setUp() {System.setProperty("webdriver.chrome.driver", "path/to/your/chromedriver.exe"); // 替换为你的chromedriver路径driver = new ChromeDriver();driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);driver.manage().window().maximize();}@Testpublic void testAdminLoginSuccess() {driver.get(baseUrl + "login.html");driver.findElement(By.name("username")).sendKeys("admin");driver.findElement(By.name("password")).sendKeys("admin");// 假设有验证码,这里简单处理,实际中可能需要万能验证码或手动输入// driver.findElement(By.name("captcha")).sendKeys("test"); driver.findElement(By.xpath("//button[@type='submit']")).click();// 等待页面跳转并验证try {Thread.sleep(2000); // 简单等待,实际应用中用显式等待} catch (InterruptedException e) {e.printStackTrace();}// 验证是否跳转到首页,比如检查页面标题或某个特定元素assertTrue("Login failed, not on dashboard", driver.getCurrentUrl().contains("index.html"));WebElement welcomeMsg = driver.findElement(By.xpath("//*[contains(text(),'欢迎您:admin')]")); // 假设的欢迎元素assertTrue("Welcome message not found", welcomeMsg.isDisplayed());}// 可添加其他登录失败的测试用例@Afterpublic void tearDown() {if (driver != null) {driver.quit();}}
}
执行过程截图:
- 登录成功截图:
[截图:platform-admin登录页面,输入admin/admin后点击登录]
[截图:platform-admin后台首页,显示欢迎信息] - 添加商品成功截图:
[截图:添加商品页面,填入有效数据后点击保存]
[截图:商品列表页面,显示新添加的商品] - 查询商品结果截图:
[截图:商品列表页面,输入查询条件后,列表显示符合条件的商品]
6.4 缺陷列表与分析
缺陷ID | 模块 | 标题 | 复现步骤 | 预期结果 | 实际结果 | 严重程度 | 优先级 | 状态 |
---|---|---|---|---|---|---|---|---|
BUG_F_001 | 商品管理 | 添加商品时,若价格输入非数字,保存后提示不友好 | 1.登录后台 2.进入商品管理-添加商品 3.商品名称输入“测试”,价格输入“abc”,库存100 4.点击保存 | 应提示“价格必须为数字” | 页面报错或提示“操作失败”,未明确指出原因 | 中 | 中 | 已提交 |
BUG_F_002 | 用户管理 | 修改用户密码时,新密码未做复杂度校验 | 1.登录后台 2.进入用户管理 3.选择一个用户点修改 4.修改密码为“123” | 应提示“密码过于简单,至少包含字母和数字,长度6位以上” | 密码修改成功 | 低 | 低 | 已提交 |
BUG_F_003 | 订单管理 | 订单发货后,发货状态未立即刷新 | 1.登录后台 2.进入订单管理 3.选择一个待发货订单 4.点击“发货”并确认 5.返回订单列表 | 订单状态应立即更新为“已发货” | 订单状态仍为“待发货”,需手动刷新页面才更新 | 低 | 中 | 已提交 |
分析:
功能测试过程中,大部分核心功能符合预期。发现的缺陷主要集中在用户体验和边界条件处理上。例如,部分错误提示不够明确具体,某些操作后的状态刷新不够及时。这些缺陷建议在后续版本中修复,以提升系统的稳定性和易用性。自动化脚本的引入有效提高了回归测试的效率。
7. 接口测试
7.1 测试对象及方法
- 测试对象:
platform-api
提供的API接口。 - 测试工具: Postman 9.x
- 测试方法:
- 通过Swagger UI (
http://localhost:8080/platform-api/swagger-ui.html
) 获取接口列表和定义。 - 在Postman中创建请求,设置请求方法、URL、请求头、请求体。
- 发送请求,检查响应状态码、响应体内容。
- 使用Postman的Tests功能编写断言,自动校验关键字段。
- 通过Swagger UI (
7.2 核心接口说明
- 用户登录 (
/api/auth/login
)- 功能:用户使用手机号和密码登录,获取访问令牌。
- 方法:POST
- 请求体 (JSON):
{"mobile": "13800138000", "password": "password123"}
- 响应 (成功):
{"errno":0, "errmsg":"登录成功", "data":{"token":"xxx...", "userInfo":{...}}}
- 获取商品列表 (
/api/goods/list
)- 功能:查询商品列表,支持分页和分类筛选。
- 方法:GET
- 参数:
categoryId
(可选),keyword
(可选),page
(页码),size
(每页数量) - 响应 (成功):
{"errno":0, "errmsg":"", "data":{"count":100, "totalPages":10, "pageSize":10, "currentPage":1, "data":[...]}}
- 获取商品详情 (
/api/goods/detail
)- 功能:根据商品ID获取商品详细信息。
- 方法:GET
- 参数:
id
(商品ID) - 响应 (成功):
{"errno":0, "errmsg":"", "data":{...商品详情对象...}}
7.3 测试用例与执行结果
用例1:用户登录 - 成功
- URL:
http://localhost:8080/platform-api/api/auth/login
- Method: POST
- Headers:
Content-Type: application/json
- Body:
{"mobile": "13800138000", "password": "password123"}
(假设此用户已注册) - 预期:Status 200,
errno
为0,data.token
不为空。 - Postman Tests:
pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Login success with errno 0", function () {var jsonData = pm.response.json();pm.expect(jsonData.errno).to.eql(0);pm.expect(jsonData.data.token).to.not.be.empty;pm.environment.set("user_token", jsonData.data.token); // 保存token供后续使用 });
- 结果:通过
[截图:Postman请求用户登录接口及成功响应,Tests Tab显示通过]
用例2:用户登录 - 密码错误
- URL:
http://localhost:8080/platform-api/api/auth/login
- Method: POST
- Headers:
Content-Type: application/json
- Body:
{"mobile": "13800138000", "password": "wrongpassword"}
- 预期:Status 200 (或业务错误码),
errno
非0,errmsg
提示错误。 - Postman Tests:
pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Login failed with errno not 0", function () {var jsonData = pm.response.json();pm.expect(jsonData.errno).to.not.eql(0);pm.expect(jsonData.errmsg).to.eql("密码错误"); // 或实际的错误消息 });
- 结果:通过
[截图:Postman请求用户登录接口及错误响应,Tests Tab显示通过]
用例3:获取商品列表 - 无需登录
- URL:
http://localhost:8080/platform-api/api/goods/list?page=1&size=5
- Method: GET
- 预期:Status 200,
errno
为0,data.data
数组有内容 (假设有商品数据)。 - Postman Tests:
pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Get goods list success", function () {var jsonData = pm.response.json();pm.expect(jsonData.errno).to.eql(0);pm.expect(jsonData.data.data).to.be.an('array').that.is.not.empty; });
- 结果:通过
[截图:Postman请求商品列表接口及成功响应,Tests Tab显示通过]
用例4:添加商品到购物车 - 需要登录
- 前置条件:执行用例1,获取到
user_token
。 - URL:
http://localhost:8080/platform-api/api/cart/add
- Method: POST
- Headers:
Content-Type: application/json
,X-Nideshop-Token: {{user_token}}
(根据项目实际token名) - Body:
{"goodsId": 1, "productId": 1, "number": 1}
(假设goodsId和productId存在) - 预期:Status 200,
errno
为0。 - Postman Tests:
pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Add to cart success", function () {var jsonData = pm.response.json();pm.expect(jsonData.errno).to.eql(0); });
- 结果:通过
[截图:Postman请求添加购物车接口及成功响应,Tests Tab显示通过]
接口测试总结:
对选定的核心API接口进行了测试,包括正常场景、异常场景(如参数错误、未授权访问)。大部分接口按预期工作。发现一个问题:部分接口对于无效参数的错误提示不够标准化。建议统一API错误码和错误消息格式。
8. 性能测试
8.1 测试对象及方法
- 测试对象:
platform-admin
后台登录接口 和platform-api
的商品列表查询接口。 - 测试工具: Apache JMeter 5.4
- 测试方法:
- 设计测试场景和负载模式。
- 在JMeter中创建测试计划,包括线程组、HTTP请求取样器、监听器等。
- 执行测试,收集响应时间、吞吐量、错误率等数据。
- 分析结果,评估系统性能。
8.2 关键业务场景
- 场景1:后台管理员并发登录
- 业务流程:访问登录页 -> 输入用户名密码 -> 点击登录 -> 验证登录成功。
- 场景2:API并发查询商品列表
- 业务流程:API用户(模拟)请求商品列表接口。
8.3 负载设计
- 场景1 (后台登录):
- 并发用户数 (Threads): 20
- Ramp-up Period: 10秒 (10秒内20个用户全部启动)
- Loop Count: 5 (每个用户重复登录5次)
- 思考时间: Uniform Random Timer (1000ms - 3000ms)
- 场景2 (API商品列表):
- 并发用户数 (Threads): 50
- Ramp-up Period: 20秒
- Duration: 60秒 (持续运行1分钟)
- 思考时间: Uniform Random Timer (500ms - 1500ms)
JMeter测试计划关键配置:
- 线程组 (Thread Group):
[截图:JMeter线程组配置界面 - 后台登录场景]
[截图:JMeter线程组配置界面 - API商品列表场景] - HTTP请求取样器 (HTTP Request Sampler):
[截图:JMeter HTTP请求配置 - 后台登录POST请求]
[截图:JMeter HTTP请求配置 - API商品列表GET请求] - 监听器 (Listeners):
- View Results Tree (用于调试)
- Summary Report (汇总报告)
- Aggregate Report (聚合报告)
- Response Time Graph (响应时间图)
8.4 测试结果与分析
场景1:后台管理员并发登录 (20用户,循环5次)
- Summary Report / Aggregate Report:
- Samples: 100
- Average Response Time: 650 ms
- 90% Line (90th Percentile Response Time): 850 ms
- Min Response Time: 320 ms
- Max Response Time: 1500 ms
- Error %: 0.0%
- Throughput: 约 15 requests/second
[截图:JMeter Summary Report - 后台登录场景]
[截图:JMeter Response Time Graph - 后台登录场景]
场景2:API并发查询商品列表 (50用户,持续1分钟)
- Summary Report / Aggregate Report:
- Samples: 约 2500 (根据实际吞吐量)
- Average Response Time: 280 ms
- 90% Line (90th Percentile Response Time): 450 ms
- Min Response Time: 80 ms
- Max Response Time: 950 ms
- Error %: 0.2% (少量超时或错误)
- Throughput: 约 40 requests/second
[截图:JMeter Aggregate Report - API商品列表场景]
[截图:JMeter Response Time Graph - API商品列表场景]
分析:
- 后台登录场景: 在20并发用户下,平均响应时间650ms,90%用户响应时间在850ms以内,无错误。系统处理后台登录的性能表现良好。
- API商品列表场景: 在50并发用户持续访问1分钟的情况下,平均响应时间280ms,90%用户响应时间在450ms以内,吞吐量达到40 req/s。出现了0.2%的错误率,主要为少量请求超时,这表明在50并发下,API商品列表接口开始出现轻微的性能压力。
- 初步瓶颈判断: API商品列表接口在并发数较高时,可能存在优化空间,如SQL查询效率、缓存机制等。后台登录性能满足当前需求。
- 建议:
- 对API商品列表接口进行进一步的性能分析和调优,特别是数据库查询和缓存策略。
- 可以考虑增加服务器资源或优化应用服务器配置,以应对更高的并发量。
9. 测试管理工具使用
9.1 选用工具简介 (概念性)
本项目在测试管理方面,借鉴了 禅道 (ZenTao) 测试管理工具的思想。禅道是一款国产的开源项目管理软件,集产品管理、项目管理、质量管理(测试管理)、文档管理、组织管理和事务管理于一体,功能完善,操作便捷。
其测试管理模块主要功能包括:
- 用例库管理: 创建和维护测试用例,支持用例的模块化组织、版本控制。
- 测试套件: 将用例组织成测试套件,方便执行。
- 测试版本/轮次: 针对不同的软件版本或测试阶段创建测试单。
- 执行测试: 分配测试任务,记录测试结果(通过、失败、阻塞、跳过)。
- 缺陷管理: 提交、指派、跟踪、关闭缺陷。
- 统计报表: 生成测试进度、用例覆盖率、缺陷分布等报表。
9.2 在本项目的测试中应用 (概念性说明)
如果实际使用禅道管理本项目测试:
- 需求关联: 将测试需求分析中识别的功能点录入禅道的需求模块。
- 用例编写: 将本文档中设计的单元测试、功能测试、接口测试的测试用例,在禅道的“测试”-“用例”模块中创建。每个用例可以关联到对应的需求。
[截图:禅道用例管理界面示例,显示本项目用例] - 测试执行: 创建测试版本(如“platform-v1.0.0 第一轮测试”),从用例库中选择相关的用例加入到测试版本中。测试人员执行用例,并在禅道中记录每个用例的实际结果。
[截图:禅道测试执行界面示例,显示用例执行状态] - 缺陷提交与跟踪: 对于执行失败的用例,或在测试过程中发现的其他问题,通过禅道的“测试”-“Bug”模块提交缺陷。详细描述缺陷的标题、重现步骤、预期结果、实际结果、严重程度,并附上截图。开发人员修复后,测试人员进行回归验证。
[截图:禅道缺陷提交/详情界面示例,显示一个本项目缺陷] - 报告生成: 测试完成后,可利用禅道的统计报表功能,生成测试总结报告,了解测试覆盖情况、缺陷状态等。
通过这种方式,可以有效地管理测试过程,确保测试的系统性和可追溯性。
10. 测试总结
10.1 测试执行总结
本次针对 platform-v1.0.0
电商平台的测试工作,已按计划完成了单元测试、功能测试、接口测试和性能测试。
- 单元测试: 共执行了7个单元测试用例(DateUtils 3个,StringUtils 4个),全部通过。
- 功能测试: 设计并执行了10个核心功能测试用例(针对后台管理系统),其中7个通过,3个发现缺陷。自动化脚本覆盖了登录和部分商品管理操作。
- 接口测试: 对约15个核心API接口进行了测试(每个接口设计2-3个用例,总计约40个用例),大部分通过,发现部分接口参数校验和错误提示需改进。
- 性能测试: 对后台登录和API商品列表查询两个关键场景进行了性能测试,后台登录性能良好,API商品列表在高并发下有轻微压力。
整体覆盖了项目的主要功能模块和关键技术点,测试过程中注重了不同测试方法的综合运用。
10.2 缺陷总结与分析
本次测试共发现缺陷5个(功能缺陷3个,接口问题1类,性能瓶颈1处):
- 功能缺陷 (3个): 主要涉及UI交互、错误提示不明确、状态刷新不及时等问题,严重程度多为中低级。这些缺陷对核心业务流程影响不大,但影响用户体验。
- 接口问题 (1类): 部分API接口在处理无效参数时,返回的错误信息不够统一和规范。
- 性能瓶颈 (1处): API商品列表接口在50并发用户时出现少量错误和响应时间波动,可能存在SQL查询或缓存优化空间。
建议优先修复影响用户体验的功能缺陷和接口规范性问题,并对API商品列表接口进行针对性优化。
10.3 项目质量评估
综合本次测试结果,platform-v1.0.0
电商平台项目:
- 核心功能: 基本实现,主要业务流程能够跑通。
- 稳定性: 在常规操作下表现稳定,但在高并发场景下,部分API接口稳定性有待提升。
- 易用性: 后台管理系统基本可用,但部分细节(如错误提示、即时反馈)可进一步优化。API接口通过Swagger文档提供,易于理解。
- 性能: 后台系统常规操作性能满足要求,核心API在中小并发下表现良好,高并发下需关注。
总体而言,项目已达到一定的质量水平,可以进入下一阶段(如UAT或小范围试用),但建议在正式上线前解决本次测试发现的主要缺陷和性能瓶颈。
10.4 经验教训与建议
- 测试计划的重要性: 详细的测试计划为测试工作的顺利开展提供了有力保障。
- 早期测试介入: 如果能在需求分析和设计阶段更早介入,可以更早发现潜在问题。
- 自动化测试的价值: Selenium和Postman的自动化脚本在回归测试中节省了大量时间,JMeter则为性能评估提供了数据支撑。建议持续投入自动化测试脚本的维护和扩展。
- 沟通与协作: (如果是团队项目)测试过程中与开发团队的及时沟通对于缺陷的确认和修复至关重要。
- 工具选择: 合理选择测试工具能极大提高测试效率。
- 文档规范: 规范的测试文档(用例、报告)有利于知识传递和后续维护。
建议:
- 建立更完善的自动化回归测试套件。
- 加强开发与测试团队的协作,实施持续集成和持续测试。
- 对高风险模块和性能瓶颈点进行专项优化。
- 重视用户体验,优化UI交互和错误提示。
附录
(根据实际情况,可以将完整的测试用例表格、核心代码片段等放在附录中,正文中只展示代表性示例。)
文件二:答辩PPT (答辩PPT.pptx
) 内容 (预填充)
以下是PPT的逐页内容建议,你需要将其制作成PPT,并配上截图。
幻灯片1:封面
- 标题: 《软件测试项目综合实训》答辩
- 项目名称: platform-v1.0.0 电商平台测试
- 汇报人: 张三 (你的名字)
- 日期: 2025年06月05日
幻灯片2:项目概述
- 项目简介:
platform-v1.0.0
:一个B/S架构的电商平台。- 包含后台管理 (
platform-admin
) 和API服务 (platform-api
)。 - 技术栈:Java SSM, MySQL。
- 测试目标:
- 验证项目核心功能是否符合需求。
- 评估系统性能和稳定性。
- 发现潜在缺陷,提升软件质量。
- 测试范围:
- 后台管理:登录、用户、商品、订单。
- API接口:认证、商品、购物车、订单。
- 单元、功能、接口、性能测试。
幻灯片3:测试环境与工具
- 硬件环境: 个人PC (Intel i5, 8GB RAM, 256GB SSD)
- 软件环境:
- OS: Windows 10
- JDK 1.8, Maven 3.6.3, MySQL 5.7
- Tomcat 8.5, IntelliJ IDEA
- Chrome, Firefox
- 测试工具列表:
- 单元测试:JUnit 4.12
- 功能测试:Selenium WebDriver (Java)
- 接口测试:Postman 9.x
- 性能测试:JMeter 5.4
- (概念) 测试管理:禅道
幻灯片4:单元测试
- 测试对象:
platform-common.utils.DateUtils.format()
platform-common.utils.StringUtils.isNullOrEmpty()
- 测试方法: JUnit,白盒测试。
- 关键测试用例代码 (DateUtils.format()):
[截图:JUnit测试类DateUtilsTest部分代码]@Test public void testFormat_normalDateTime() {// ...String result = DateUtils.format(testDate, "yyyy-MM-dd HH:mm:ss");assertEquals("2025-06-05 10:30:00", result); }
- 测试结果: 共执行7个用例,全部通过。
[截图:JUnit测试结果概览图]
幻灯片5:功能测试 - 用例设计
- 测试模块: 用户登录、商品管理等。
- 设计方法: 等价类划分、边界值分析。
- 用例示例 (TC_FUNC_GOODS_001 - 成功添加商品):
- 前置: 已登录后台。
- 步骤: 进入商品模块 -> 点击添加 -> 输入有效名称、价格(50)、库存(100) -> 保存。
- 预期: 添加成功,列表显示新商品。
- 用例示例 (TC_FUNC_GOODS_003 - 价格为负数):
- 前置: 已登录后台。
- 步骤: 进入商品模块 -> 点击添加 -> 名称有效,价格输入-10 -> 保存。
- 预期: 添加失败,提示“价格必须为正数”。
幻灯片6:功能测试 - 执行与缺陷
- 自动化脚本 (Selenium WebDriver - Java - 登录成功):
[截图:Selenium登录脚本关键代码片段]driver.get(baseUrl + "login.html"); driver.findElement(By.name("username")).sendKeys("admin"); // ... 点击登录 ... assertTrue(driver.getCurrentUrl().contains("index.html"));
- 关键执行截图:
[截图:后台登录成功跳转首页]
[截图:商品添加成功后列表展示] - 发现缺陷举例 (BUG_F_001):
- 标题: 添加商品时,若价格输入非数字,保存后提示不友好。
- 实际结果: 页面报错或提示“操作失败”,未明确指出原因。
[截图:BUG_F_001复现界面]
幻灯片7:接口测试 - Postman
- 测试接口示例:
POST /api/auth/login
(用户登录)GET /api/goods/list
(获取商品列表)
- 测试流程:
- Swagger获取接口定义。
- Postman构造请求 (URL, Method, Headers, Body)。
- 发送请求,检查响应 (Status, Body)。
- 编写Tests断言。
- 用户登录成功 (用例1):
- Body:
{"mobile": "138...", "password": "..."}
- Tests:
pm.expect(jsonData.errno).to.eql(0); pm.expect(jsonData.data.token).to.not.be.empty;
[截图:Postman用户登录接口成功响应及Tests通过]
- Body:
幻灯片8:接口测试 - 结果
- 获取商品列表 (用例3):
- URL:
/api/goods/list?page=1&size=5
- Tests:
pm.expect(jsonData.errno).to.eql(0); pm.expect(jsonData.data.data).to.be.an('array');
[截图:Postman获取商品列表接口成功响应及Tests通过]
- URL:
- 接口测试总结:
- 核心接口功能基本正常。
- 部分接口对错误参数的响应信息需规范化。
- Token认证机制工作正常。
幻灯片9:性能测试 - JMeter
- 测试场景:
- 后台管理员并发登录。
- API并发查询商品列表。
- 负载设计 (API商品列表):
- 并发用户数: 50
- Ramp-up: 20秒
- Duration: 60秒
[截图:JMeter线程组配置 (API商品列表场景)]
- JMeter脚本关键配置:
- HTTP请求取样器
- 聚合报告、响应时间图
[截图:JMeter中HTTP请求取样器配置 (API商品列表)]
幻灯片10:性能测试 - 结果分析
- 后台登录 (20并发):
- Avg Response Time: 650 ms
- 90% Line: 850 ms
- Error %: 0.0%
- Throughput: ~15 req/s
[截图:JMeter聚合报告 (后台登录)]
- API商品列表 (50并发):
- Avg Response Time: 280 ms
- 90% Line: 450 ms
- Error %: 0.2%
- Throughput: ~40 req/s
[截图:JMeter响应时间图 (API商品列表)]
- 分析与结论:
- 后台登录性能良好。
- API商品列表在高并发(50用户)下开始出现轻微压力,有0.2%错误率,建议优化。
幻灯片11:测试管理 (概念 - 禅道)
- 工具作用: 需求、用例、执行、缺陷、报告全流程管理。
- 本项目应用设想:
- 用例管理: 将设计的用例录入禅道,按模块组织。
[截图:禅道用例管理界面示例] - 缺陷跟踪: 本次发现的BUG_F_001等缺陷,在禅道中提交、指派、跟踪。
[截图:禅道Bug详情界面示例] - 优势: 提高测试效率,保证测试覆盖度,便于团队协作和进度跟踪。
- 用例管理: 将设计的用例录入禅道,按模块组织。
幻灯片12:测试总结与体会
- 测试完成情况:
- 按计划完成单元、功能、接口、性能测试。
- 覆盖核心模块,发现5个主要问题点。
- 项目整体质量评估:
- 核心功能可用,常规操作稳定。
- 用户体验和高并发性能有待提升。
- 建议修复已知缺陷后,可进入下一阶段。
- 问题与解决:
- 环境搭建:JDK/Maven版本匹配,数据库初始化。
- Selenium脚本:元素定位策略,动态等待。
- JMeter:参数化,关联Token。
- 个人心得与体会:
- 深刻理解了软件测试的完整流程。
- 熟练掌握了多种测试工具的基本使用。
- 认识到测试用例设计和缺陷分析的重要性。
- 自动化测试对提高效率和覆盖率有巨大帮助。
幻灯片13:致谢
- 感谢老师的指导!
- Q & A
请务必注意,以上所有内容(特别是测试数据、缺陷描述、截图位置提示)都需要你根据实际操作来替换和完善。这份预填充版本是为了让你能更快地搭建起报告和PPT的框架。祝你顺利完成作业!