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

【测试报告】Hsu营销平台系统 - 测试报告

项目简介

项目名称:Hsu营销平台系统 - 抽奖与行为奖励服务

项目概述:本项目采用Spring Boot、React、MySQL、Redis、RabbitMQ等技术栈,基于微服务架构和DDD理念,核心功能涵盖抽奖、用户行为奖励、积分兑换、活动装配和高并发库存管理。后端通过模板模式、责任链模式优化抽奖流程,利用Redis、RabbitMQ实现库存扣减和分布式事务一致性,提升系统在高并发场景下的性能与可靠性。前端采用React实现抽奖组件,优化交互与性能。

测试覆盖功能包括:九宫格抽奖、大转盘抽奖、奖品管理、活动装配、积分账户、商品兑换、用户签到返利等业务流程。

测试方法

  • 测试用例设计:结合项目需求文档、前后端API和业务流程,采用等价类划分、边界值分析、场景法等方法,确保核心流程和异常路径全面覆盖。
  • 自动化测试:基于Selenium和TestNG编写UI自动化测试脚本,模拟真实用户操作,实现端到端的回归测试。自动化测试覆盖主要业务场景,如抽奖、奖品展示、积分兑换、签到等。
  • 接口测试:使用Postman和自动化脚本,对抽奖、账户、商品、签到等所有API进行功能和性能测试,验证接口稳定性和数据一致性。
  • 性能与压力测试:采用JMeter对抽奖和积分系统进行高并发场景压测,分析系统响应时间、吞吐量和并发瓶颈,结合Redis和RabbitMQ优化缓存和消息队列处理能力。
  • 安全性测试:对登录、积分等敏感操作进行SQL注入、XSS等常见安全漏洞检测,确保系统安全性和数据防护能力。
  • 多端/多浏览器兼容性测试:自动化脚本支持Chrome/Edge,人工验证PC端、移动端及主流浏览器下的功能和页面兼容性。

非功能测试用例思维导图

在这里插入图片描述

功能测试用例思维导图

在这里插入图片描述

部分核心功能展示

  1. 页面展示

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

  1. 抽奖装配功能

在这里插入图片描述

  1. 每日签到返利功能

在这里插入图片描述

  1. 积分兑换抽奖次数功能

对比前一张图的积分和抽奖次数均已变化

在这里插入图片描述

  1. 左侧大转盘抽奖功能

在这里插入图片描述

  1. 右侧大转盘抽奖功能

在这里插入图片描述

  1. 底部展示抽奖权重功能

在这里插入图片描述

自动化核心代码

import common.TestUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.io.IOException;
import java.util.List;public class LuckySystemTest extends TestUtils {public static String url = "http://127.0.0.1:8080/"; public LuckySystemTest() {super(url);}// 1. 检查Lucky系统首页所有核心UI元素public void checkAllMainElements() throws IOException {// 抽奖主标题与页面头部driver.findElement(By.cssSelector("header"));driver.findElement(By.xpath("//*[contains(text(),'抽奖展示')]"));// Lucky九宫格和大转盘driver.findElement(By.cssSelector(".LuckyGrid, [class*=LuckyGrid]"));driver.findElement(By.cssSelector(".LuckyWheel, [class*=LuckyWheel]"));// 九宫格按钮及奖品图driver.findElement(By.cssSelector("[src='/raffle-button.png']"));driver.findElement(By.cssSelector("[src^='/raffle-award-0']")); // 任意一个奖品图片// 会员卡、商品、活动装配、权重规则模块driver.findElement(By.cssSelector(".MemberCard, [class*=MemberCard]"));driver.findElement(By.cssSelector(".SkuProduct, [class*=SkuProduct]"));driver.findElement(By.cssSelector(".StrategyArmory, [class*=StrategyArmory]"));driver.findElement(By.cssSelector(".StrategyRuleWeight, [class*=StrategyRuleWeight]"));// 底部版权driver.findElement(By.cssSelector("footer"));// Edge同样检查driverByEdge.findElement(By.cssSelector("header"));driverByEdge.findElement(By.xpath("//*[contains(text(),'抽奖展示')]"));driverByEdge.findElement(By.cssSelector(".LuckyGrid, [class*=LuckyGrid]"));driverByEdge.findElement(By.cssSelector(".LuckyWheel, [class*=LuckyWheel]"));driverByEdge.findElement(By.cssSelector("[src='/raffle-button.png']"));driverByEdge.findElement(By.cssSelector("[src^='/raffle-award-0']"));driverByEdge.findElement(By.cssSelector(".MemberCard, [class*=MemberCard]"));driverByEdge.findElement(By.cssSelector(".SkuProduct, [class*=SkuProduct]"));driverByEdge.findElement(By.cssSelector(".StrategyArmory, [class*=StrategyArmory]"));driverByEdge.findElement(By.cssSelector(".StrategyRuleWeight, [class*=StrategyRuleWeight]"));driverByEdge.findElement(By.cssSelector("footer"));getScreenShot("checkAllMainElements");}// 2. Lucky九宫格抽奖流程(按钮点击、动画、结果弹窗)public void gridRaffleFlow() throws IOException {// 点击抽奖按钮WebElement gridBtn = driver.findElement(By.cssSelector("[src='/raffle-button.png']"));gridBtn.click();// 等待动画和结果弹窗出现// driver.findElement(By.xpath("//*[contains(text(),'恭喜')]"));Thread.sleep(3500); // 等待动画和alert(如需)getScreenShot("gridRaffleFlow");// EdgeWebElement gridBtnEdge = driverByEdge.findElement(By.cssSelector("[src='/raffle-button.png']"));gridBtnEdge.click();Thread.sleep(3500);getScreenShot("gridRaffleFlow_Edge");}// 3. Lucky大转盘抽奖流程public void wheelRaffleFlow() throws IOException {// 点击大转盘“开始”按钮(可能是span或button,视页面结构修改)WebElement wheelBtn = driver.findElement(By.xpath("//*[text()='开始' or contains(.,'开始')]"));wheelBtn.click();Thread.sleep(3500);getScreenShot("wheelRaffleFlow");// EdgeWebElement wheelBtnEdge = driverByEdge.findElement(By.xpath("//*[text()='开始' or contains(.,'开始')]"));wheelBtnEdge.click();Thread.sleep(3500);getScreenShot("wheelRaffleFlow_Edge");}// 4. 查询奖品列表展示(奖品卡/奖品图片/奖品名称全部渲染)public void checkPrizeListDisplay() throws IOException {List<WebElement> prizeImgs = driver.findElements(By.cssSelector("[src^='/raffle-award-']"));assert(prizeImgs.size() >= 8); // 九宫格奖品或转盘奖品for (WebElement img : prizeImgs) {assert(img.isDisplayed());}getScreenShot("checkPrizeListDisplay");}// 5. 商品兑换流程public void skuExchangeFlow() throws IOException {// 找到商品列表第一个商品的兑换按钮并点击(按钮类名需与实际页面一致)WebElement exchangeBtn = driver.findElement(By.cssSelector(".SkuProduct .exchange-btn, [class*=SkuProduct] [class*=exchange]"));exchangeBtn.click();// 等待弹窗或页面提示(如有)Thread.sleep(1000);getScreenShot("skuExchangeFlow");}// 6. 活动装配(装配按钮点击,等待结果)public void armoryAction() throws IOException {WebElement armoryBtn = driver.findElement(By.cssSelector(".StrategyArmory button, [class*=StrategyArmory] button"));armoryBtn.click();// 可以等待装配结果的提示Thread.sleep(1000);getScreenShot("armoryAction");}// 7. 权重规则查看流程public void ruleWeightCheck() throws IOException {WebElement ruleBtn = driver.findElement(By.cssSelector(".StrategyRuleWeight button, [class*=StrategyRuleWeight] button"));ruleBtn.click();// 弹窗或规则详情区出现Thread.sleep(500);getScreenShot("ruleWeightCheck");}// 8. 会员卡查看(点击、展开等)public void memberCardCheck() throws IOException {WebElement memberCard = driver.findElement(By.cssSelector(".MemberCard, [class*=MemberCard]"));memberCard.click();Thread.sleep(500);getScreenShot("memberCardCheck");}// 9. 签到返利操作public void calendarSignFlow() throws IOException {WebElement signBtn = driver.findElement(By.cssSelector(".CalendarSign button, [class*=CalendarSign] button"));signBtn.click();Thread.sleep(500);getScreenShot("calendarSignFlow");}// 10. 查询积分账户信息public void checkCreditAccount() throws IOException {WebElement creditInfo = driver.findElement(By.cssSelector(".CreditAccountInfo, [class*=CreditAccountInfo]"));assert(creditInfo.isDisplayed());getScreenShot("checkCreditAccount");}// 11. 查询活动额度(额度区/文本)public void checkActivityAccount() throws IOException {WebElement quotaInfo = driver.findElement(By.cssSelector(".ActivityAccountInfo, [class*=ActivityAccountInfo]"));assert(quotaInfo.isDisplayed());getScreenShot("checkActivityAccount");}}

测试结论

本次测试,涵盖抽奖、奖品、活动、账户、签到、积分、商品兑换等全部核心业务模块,自动化与手工测试协同推进,接口和UI两端均有覆盖。系统在核心流程、边界场景、高并发下均通过测试,主要功能稳定、响应及时,满足业务上线标准。针对测试中发现的关键问题,已完成修复并回归验证。整体测试质量达到预期。

http://www.dtcms.com/a/316042.html

相关文章:

  • 嵌入式#define __assert __assert写法解析
  • 起落架大型结构件深孔测量探究 - 激光频率梳 3D 轮廓检测
  • 智慧会所:科技赋能,开启休闲新体验
  • 解决 Windows 下的“幽灵文件”——记一次与带空格的 .gitignore 文件的艰难斗争
  • PDF 文本提取技术深度对比:基于规则与基于模型的两种实现
  • 向量范数与矩阵范数
  • ThingsKit Edge是什么?
  • 论文阅读: Mobile Edge Intelligence for Large LanguageModels: A Contemporary Survey
  • 小杰数据结构——题库——拂衣便欲沧海去,但许明月随吾身
  • echarts在前后端分离项目中的实践与应用
  • mysql强制区分大小写进行查询用BINARY
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(四)
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制
  • Java学习第一百零六部分——Lucene
  • python开发环境安装多系统完整版
  • laravel在cli模式下输出格式漂亮一些
  • python的高校班级管理系统
  • 【计组】数据的表示与运算
  • Linux动静态库的理解
  • 探秘MOBILITY China 2026,新能源汽车与智慧出行的未来盛宴
  • MinIO02-Docker安装
  • 11.Linux 防火墙管理
  • selenium自动化收集资料
  • MLP-Mixer: An all-MLP Architecture for Vision
  • 计算机基础:操作系统学习的基石
  • 【前端】Node.js 简易服务器搭建全指南:从基础到实践
  • 调试|谷歌浏览器调试长连接|调试SSE和websocket
  • Redis内存耗尽时的应对策略
  • Day115 SpringBoot整合Redis,RedisTemplate和注解两种方式的使用
  • SQL164 删除表