当前位置: 首页 > news >正文

[AI Claude] 软件测试2

好的,我现在为你准备一份预填充好大部分内容的测试报告和PPT内容。这里面的数据是我根据项目结构和常见的测试场景推理和编造的,你需要根据你的实际操作结果(包括截图、实际数据、发现的缺陷等)进行替换和修改。

我将按照之前定义的结构,尽量完整地输出这些文件内容。


文件一:《软件测试项目综合实训》测试报告 (完整版 - 预填充)

《软件测试项目综合实训》测试报告

项目名称:platform-v1.0.0 电商平台测试
小组成员:张三 (请替换为你的名字)
日期:2025年06月05日 (请替换为实际提交日期)

目录

  1. 引言
    1.1 编写目的
    1.2 项目背景
    1.3 参考资料
  2. 测试概述
    2.1 测试范围
    2.2 测试环境
    2.3 测试策略概述
  3. 测试需求分析
    3.1 platform-admin 后台管理系统功能点
    3.2 platform-api 接口功能点
    3.3 非功能需求点
  4. 测试计划回顾
    4.1 计划执行情况
    4.2 资源使用情况
  5. 单元测试
    5.1 测试对象及方法
    5.2 测试用例与代码
    5.3 测试结果与分析
  6. 功能测试
    6.1 测试对象及方法
    6.2 测试用例设计
    6.3 测试执行过程与结果
    6.4 缺陷列表与分析
  7. 接口测试
    7.1 测试对象及方法
    7.2 核心接口说明
    7.3 测试用例与执行结果
  8. 性能测试
    8.1 测试对象及方法
    8.2 关键业务场景
    8.3 负载设计
    8.4 测试结果与分析
  9. 测试管理工具使用
    9.1 选用工具简介
    9.2 在本项目的测试中应用
  10. 测试总结
    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-malluni-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-commonplatform-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-adminplatform-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-202025-05-222025-05-202025-05-23完成MySQL配置稍有延迟
测试需求分析与计划编写2025-05-232025-05-242025-05-232025-05-24完成
单元测试用例设计与执行2025-05-252025-05-262025-05-252025-05-26完成
功能测试用例设计2025-05-262025-05-282025-05-262025-05-28完成
功能测试脚本编写与执行2025-05-292025-06-012025-05-292025-06-02完成Selenium脚本调试耗时较多
接口测试用例设计与执行2025-06-012025-06-032025-06-012025-06-03完成
性能测试脚本设计与执行2025-06-032025-06-042025-06-032025-06-04完成
测试报告与PPT编写2025-06-042025-06-052025-06-042025-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层方法或其调用的核心逻辑方法。
  • 测试对象示例:
    1. platform-common/src/main/java/com/platform/utils/DateUtils.java 中的 format(Date date, String pattern) 方法。
    2. 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), pattern yyyy-MM-dd HH:mm:ss
    • 预期输出:字符串 "2025-06-05 10:30:00"
  • 用例2:
    • 输入:Date 对象 (例如 2025-06-05 10:30:00), pattern yyyy/MM/dd
    • 预期输出:字符串 "2025/06/05"
  • 用例3:
    • 输入:null Date对象, pattern yyyy-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/admin1. 打开登录页 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
  • 测试方法:
    1. 通过Swagger UI (http://localhost:8080/platform-api/swagger-ui.html) 获取接口列表和定义。
    2. 在Postman中创建请求,设置请求方法、URL、请求头、请求体。
    3. 发送请求,检查响应状态码、响应体内容。
    4. 使用Postman的Tests功能编写断言,自动校验关键字段。

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
  • 测试方法:
    1. 设计测试场景和负载模式。
    2. 在JMeter中创建测试计划,包括线程组、HTTP请求取样器、监听器等。
    3. 执行测试,收集响应时间、吞吐量、错误率等数据。
    4. 分析结果,评估系统性能。

8.2 关键业务场景

  1. 场景1:后台管理员并发登录
    • 业务流程:访问登录页 -> 输入用户名密码 -> 点击登录 -> 验证登录成功。
  2. 场景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 在本项目的测试中应用 (概念性说明)
如果实际使用禅道管理本项目测试:

  1. 需求关联: 将测试需求分析中识别的功能点录入禅道的需求模块。
  2. 用例编写: 将本文档中设计的单元测试、功能测试、接口测试的测试用例,在禅道的“测试”-“用例”模块中创建。每个用例可以关联到对应的需求。
    [截图:禅道用例管理界面示例,显示本项目用例]
  3. 测试执行: 创建测试版本(如“platform-v1.0.0 第一轮测试”),从用例库中选择相关的用例加入到测试版本中。测试人员执行用例,并在禅道中记录每个用例的实际结果。
    [截图:禅道测试执行界面示例,显示用例执行状态]
  4. 缺陷提交与跟踪: 对于执行失败的用例,或在测试过程中发现的其他问题,通过禅道的“测试”-“Bug”模块提交缺陷。详细描述缺陷的标题、重现步骤、预期结果、实际结果、严重程度,并附上截图。开发人员修复后,测试人员进行回归验证。
    [截图:禅道缺陷提交/详情界面示例,显示一个本项目缺陷]
  5. 报告生成: 测试完成后,可利用禅道的统计报表功能,生成测试总结报告,了解测试覆盖情况、缺陷状态等。

通过这种方式,可以有效地管理测试过程,确保测试的系统性和可追溯性。


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则为性能评估提供了数据支撑。建议持续投入自动化测试脚本的维护和扩展。
  • 沟通与协作: (如果是团队项目)测试过程中与开发团队的及时沟通对于缺陷的确认和修复至关重要。
  • 工具选择: 合理选择测试工具能极大提高测试效率。
  • 文档规范: 规范的测试文档(用例、报告)有利于知识传递和后续维护。

建议:

  1. 建立更完善的自动化回归测试套件。
  2. 加强开发与测试团队的协作,实施持续集成和持续测试。
  3. 对高风险模块和性能瓶颈点进行专项优化。
  4. 重视用户体验,优化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()):
    @Test
    public void testFormat_normalDateTime() {// ...String result = DateUtils.format(testDate, "yyyy-MM-dd HH:mm:ss");assertEquals("2025-06-05 10:30:00", result);
    }
    
    [截图:JUnit测试类DateUtilsTest部分代码]
  • 测试结果: 共执行7个用例,全部通过。
    [截图:JUnit测试结果概览图]

幻灯片5:功能测试 - 用例设计

  • 测试模块: 用户登录、商品管理等。
  • 设计方法: 等价类划分、边界值分析。
  • 用例示例 (TC_FUNC_GOODS_001 - 成功添加商品):
    • 前置: 已登录后台。
    • 步骤: 进入商品模块 -> 点击添加 -> 输入有效名称、价格(50)、库存(100) -> 保存。
    • 预期: 添加成功,列表显示新商品。
  • 用例示例 (TC_FUNC_GOODS_003 - 价格为负数):
    • 前置: 已登录后台。
    • 步骤: 进入商品模块 -> 点击添加 -> 名称有效,价格输入-10 -> 保存。
    • 预期: 添加失败,提示“价格必须为正数”。

幻灯片6:功能测试 - 执行与缺陷

  • 自动化脚本 (Selenium WebDriver - Java - 登录成功):
    driver.get(baseUrl + "login.html");
    driver.findElement(By.name("username")).sendKeys("admin");
    // ... 点击登录 ...
    assertTrue(driver.getCurrentUrl().contains("index.html"));
    
    [截图:Selenium登录脚本关键代码片段]
  • 关键执行截图:
    [截图:后台登录成功跳转首页]
    [截图:商品添加成功后列表展示]
  • 发现缺陷举例 (BUG_F_001):
    • 标题: 添加商品时,若价格输入非数字,保存后提示不友好。
    • 实际结果: 页面报错或提示“操作失败”,未明确指出原因。
      [截图:BUG_F_001复现界面]

幻灯片7:接口测试 - Postman

  • 测试接口示例:
    • POST /api/auth/login (用户登录)
    • GET /api/goods/list (获取商品列表)
  • 测试流程:
    1. Swagger获取接口定义。
    2. Postman构造请求 (URL, Method, Headers, Body)。
    3. 发送请求,检查响应 (Status, Body)。
    4. 编写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通过]

幻灯片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通过]
  • 接口测试总结:
    • 核心接口功能基本正常。
    • 部分接口对错误参数的响应信息需规范化。
    • Token认证机制工作正常。

幻灯片9:性能测试 - JMeter

  • 测试场景:
    1. 后台管理员并发登录。
    2. 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的框架。祝你顺利完成作业!

http://www.xdnf.cn/news/874351.html

相关文章:

  • JS利用原型链实现继承
  • Spring 中的disposableBean介绍
  • C语言数据结构笔记2:结构体地址的遍历_结构体嵌套
  • Java DLL依赖缺失解决思路和修复过程(Windows版本)
  • JVM 内存结构 详解
  • 【Java】CopyOnWriteArrayList
  • 使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
  • 陈伟霆电视剧《九门》开机 续写传奇热血新篇
  • 【博客X】缤果串口蓝牙网络USB调试助手(总汇)
  • python打卡day44
  • 如何通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式(并进行了训练、推理)
  • SQL 中 IN 和 EXISTS 的区别
  • 局部变量-线程安全
  • 池化层-机器学习
  • 5.Promise,async,await概念(1)
  • 【SpringCloud】Nacos配置中心
  • 【HarmonyOS 5】游戏开发教程
  • 面向文档编程:MoonBit 的创新开发体验
  • 照片按时间自动重命名工具
  • Java异常信息
  • PaddleOCR(1):PaddleOCR介绍
  • 雷达流速仪相关介绍
  • 微信小程序开发一个自定义组件的详细教程
  • Haystack:AI与IoT领域的全能开源框架
  • 996引擎-前端组件:富文本(RichText)
  • 研究探析 | 高速摄像机在一种新型冲击压痕技术及其动态标定方法中的应用
  • unix/linux,sudo,其发展历程详细时间线、由来、历史背景
  • Origin如何仅删除奇数行或偶数行的数据
  • shell脚本总结14:awk命令的使用方法
  • 【力扣链表篇】203.移除链表元素