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

星璇抽奖测试报告

唯有热爱,恒常如新

一、项目背景

        基于 Spring Boot 实现的前后端分离星璇抽奖系统旨在为企业或组织提供一个高效、便捷的在线抽奖解决方案。该系统有管理员和普通用户两个角色,支持管理员创建普通用户、新建活动奖品、创建抽奖活动、进行抽奖等功能。用户参与抽奖活动,通过随机算法产生中奖结果,并能对抽奖活动进行管理,包括设置奖项、控制参与人数等。它具有良好的可扩展性和可维护性,能够适应不同规模的抽奖需求。


二、项目功能

该抽奖项目主要实现了登录注册管理员新建活动奖品创建抽奖活动进行抽奖以及创建普通用户进行人员管理等功能。

1.登录或注册管理员

  • 用户已有账号:输入手机号密码或手机号验证码,经后端校验通过以后成功登录系统,进入抽奖首页。
  • 用户没有账号:点击注册按钮,跳转注册页面填写信息进行注册,注册完毕跳转回登录页面。

2.新建活动奖品

在后台管理中找到奖品管理-创建奖品,输入奖品名称、价格和描述并上传奖品图片,点击“创建奖品”按钮,成功创建奖品。

3.创建抽奖活动

在后台管理中找到活动管理-新建抽奖活动,输入活动名称和活动描述,并圈选奖品和人员,点击“创建活动”按钮,成功创建活动。

4.抽奖

在后台管理中找到活动列表,点击活动进行抽奖。

5.创建普通用户

在后台管理中找到人员管理-注册用户,输入姓名、邮箱和手机号,点击“注册”按钮,成功创建普通用户。


三、测试计划

  1. 根据抽奖的每个页面和不同页面对应的功能编写测试用例。
  2. 根据测试用例执行相关测试,对不符合要求的地方进行记录,并提bug。
  3. 编写自动化测试代码,执行自动化测试。
  4. 对本次测试进行总结。

四、功能测试

1.测试用例


2.执行功能测试

2.1 登录成功


2.2 新建活动奖品

弹出弹窗,提示“奖品创建成功”。


2.3 创建抽奖活动

填写完活动名称和描述后,设置奖品数量和等级,并将要抽取的奖品勾选上。

勾选要参与抽奖的人员。


点击“创建活动”,弹出弹窗显示“创建成功”


2.4 抽奖

在活动列表中选择要进行的抽奖活动,点击“活动进行中,去抽奖”按钮。


开始一等奖的抽取,奖品为拍立得1份。


一等奖抽取完毕,中奖者为朱伯丞。

点击“已抽完,下一步”按钮,进行二等奖的抽取。


开始二等奖的抽取,奖品为小卡1份。

二等奖抽取完毕,中奖者为周诣涛。

点击“已抽完,下一步”按钮,进行三等奖的抽取。


开始三等奖的抽取,奖品为贴纸1份。


三等奖抽取完毕,中奖者为钟鸿森。

点击“点我确定”按钮,查看中奖名单。


2.5 中奖结果分享

点击“分享结果”按钮,弹出弹窗显示“链接已复制到粘贴板”。


2.6 创建普通用户

输入未被使用过并且为合法字符的姓名、邮箱和手机号,点击“注册”按钮,注册成功。

在人员管理-人员列表中可以看到刚刚注册的普通用户。

五、自动化测试

1. 测试用例


2. 代码编写

  • 根据测试用例进行UI自动化测试。
  • 公共属性单独放一个类,方便进行代码复用。
  • 注意添加隐式等待,确保页面正确加载显示。

2.1 添加依赖pom.xml

2.2 代码封装

package common;import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;public class Utils {public static WebDriver driver;public static WebDriver createDriver() {if (driver == null) {// 1、打开浏览器// 使用驱动管理程序,打开对应的浏览器驱动// 这边使用谷歌浏览器进行自动化测试WebDriverManager.chromedriver().setup();// 增加浏览器配置,创建驱动对象时要强制允许访问所有的链接ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");// 创建一个浏览器驱动对象 (在这里会打开一个网页)driver = new ChromeDriver(options);// 隐式等待driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));}return driver;}public Utils(String url) {// 调用 driver 对象driver = createDriver();// 访问指定的urldriver.get(url);}// 屏幕截图public void getScreenShot(String str) throws IOException {// 屏幕截图SimpleDateFormat sim1 = new SimpleDateFormat("yyyy_MM_dd");SimpleDateFormat sim2 = new SimpleDateFormat("HH_mm_ss_SSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());// 设置文件名称String fileName = "./src/test/image/" + dirTime + "/" + str + "_" + fileTime + ".png";File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);// 存放至对应路径FileUtils.copyFile(file,new File(fileName));}// 登录public void base_login() {// 登录页面跳转至添加奖品页面driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18799999999");driver.findElement(By.cssSelector("#password")).sendKeys("123456789");driver.findElement(By.cssSelector("#loginForm > button")).click();driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));}
}

2.3 登录测试

验证登录成功登录失败的情况。

登录成功:

  • 使用 WebDriver 打开登录页面
  • 输入正确手机号和正确密码
  • 点击登录按钮,登录成功跳转到主页面

登录失败:

  • 输入正确手机号和错误密码 / 输入错误手机号和正确密码
  • 点击登录按钮,处理弹窗
  • 看程序是否正常结束,若正常,则符合预期
     /*** 测试登录* 1、创建驱动,并打开页面* 2、测试页面是否正常打开* 3、测试正常登录:多参数测试* 4、测试异常登录:用户名/密码错误*/public  void login() throws InterruptedException {/*** 正常登录* 1、输入正确手机号* 2、输入正确密码* 3、点击登录按钮*/driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18799999999");driver.findElement(By.cssSelector("#password")).sendKeys("123456789");driver.findElement(By.cssSelector("#loginForm > button")).click();/*** 登录失败* 1、回退到登录页面* 2、输入正确/错误手机号* 3、输入正确/错误密码* 4、点击登录按钮*/// 回退到登录页面driver.findElement(By.cssSelector("body > div.header-box > div.user-box > div > span")).click();// 手机号未注册、密码正确driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18712345678");driver.findElement(By.cssSelector("#password")).sendKeys("123456789");driver.findElement(By.cssSelector("#loginForm > button")).click();// 此时会有弹窗显示登录失败 点击确定Alert alert = driver.switchTo().alert();alert.accept();// 手机号已注册、密码错误driver.findElement(By.cssSelector("#phoneNumber")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18799999999");driver.findElement(By.cssSelector("#password")).sendKeys("123456");driver.findElement(By.cssSelector("#loginForm > button")).click();// 此时会有弹窗显示登录失败 点击确定alert = driver.switchTo().alert();alert.accept();}

与预期结果一致,登录测试通过。


2.4 注册测试

  1. 使用 WebDriver 打开登录页面
  2. 点击页面中的注册按钮,跳转至注册页面
  3. 填写正确格式的属性值
  4. 点击注册按钮进行注册
  5. 在登录页面使用注册的信息进行登录,验证是否注册成功
  6. 如果成功登录,就说明注册成功,程序正常执行完毕
    /*** 注册测试* 1、刷新页面* 2、跳转至注册页面* 3、填写注册信息* 4、点击注册按钮* 5、回到登录页面测试是否可以登录*/public void register() throws InterruptedException {// 刷新页面driver.navigate().refresh();// 在登录界面点击跳转注册driver.findElement(By.cssSelector("body > div > div.login-container.col-sm-6.col-md-6.col-lg-5.col-xl-5 > div.register-link > a")).click();// 填写信息driver.findElement(By.cssSelector("#name")).sendKeys("周诣涛");driver.findElement(By.cssSelector("#mail")).sendKeys("18720020207@qq.com");driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18720020207");driver.findElement(By.cssSelector("#password")).sendKeys("123456789");driver.findElement(By.cssSelector("#registerForm > button")).click();// 注册完有弹窗显示注册成功,点击确认。点击完跳转回登录界面Thread.sleep(100);Alert alert = driver.switchTo().alert();alert.accept();// 测试注册成功driver.findElement(By.cssSelector("#phoneNumber")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18720020207");driver.findElement(By.cssSelector("#password")).sendKeys("123456789");driver.findElement(By.cssSelector("#loginForm > button")).click();driver.close();}

 与预期结果一致,注册测试通过。


2.5 人员管理测试

验证人员管理栏的创建普通用户功能以及用户列表显示功能。

  1. 在主页面点击进入注册普通用户界面
  2. 输入用户名、手机号、邮箱
  3. 点击注册按钮
  4. 注册成功自动跳转至人员列表页(逆序排列)
  5. 校验首个人员用户名是否与新注册的一致
  6. 若一致,则说明注册成功,程序正常执行完毕
    public void createUser() throws InterruptedException {// 进入注册普通用户界面driver.findElement(By.cssSelector("#register")).click();// 显示等待,直到输入框出来driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));// 找到输入框,输入信息,点击注册按键driver.findElement(By.cssSelector("#name")).sendKeys("吴亚飞");driver.findElement(By.cssSelector("#mail")).sendKeys("18720050107@qq.com");driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18720050107");// 注册成功弹出弹窗 点击确定 自动跳转到人员列表页Thread.sleep(100);Alert alert = driver.switchTo().alert();alert.accept();// 注册成功的用户会显示在首行 测试名称是否与要求的一致String name = driver.findElement(By.cssSelector("#userList > tr:nth-child(1) > td:nth-child(2)")).getText();System.out.println("自动化测试创建普通用户是否成功  ->  " + name.equals("吴亚飞"));}

 与预期结果一致,人员管理测试通过。


2.6 奖品管理测试

验证创建奖品奖品列表显示功能。

  1. 在主页面点击进入创建奖品界面
  2. 输入奖品属性值,上传奖品图片
  3. 点击创建按钮
  4. 创建成功自动跳转至奖品列表页(逆序排列)
  5. 校验首个奖品属性值是否与新创建的一致
  6. 若一致,则说明创建成功,程序正常执行完毕
    // 测试添加奖品public void addPrize() throws InterruptedException {base_login();// 登录页面跳转至添加奖品页面driver.findElement(By.cssSelector("body>div.cont-box>div.sidebar>ul>li:nth-child(2)>ul>li:nth-child(2)>a")).click();System.out.println(driver.getCurrentUrl());// 目标元素可能位于一个 iframe 中,若未先切换到该 iframe,Selenium 就无法定位到元素WebElement iframe = driver.findElement(By.id("contentFrame"));driver.switchTo().frame(iframe);// 设置奖品名称driver.findElement(By.cssSelector("#prizeName.form-control")).sendKeys("海报");// 定位文件输入框元素WebElement uploadElement = driver.findElement(By.cssSelector("#prizeImageUrl"));// 上传奖品图片uploadElement.sendKeys("E:\\LotterySystem\\LotteryAutoTest\\src\\test\\robot.png");// 设置奖品价格driver.findElement(By.cssSelector("#price.form-control")).sendKeys("85");// 设置奖品描述driver.findElement(By.cssSelector("#description.form-control")).sendKeys("33Svan海报");// 点击创建按钮,显示弹窗提示创建成功Thread.sleep(1000);driver.findElement(By.xpath("/html/body/div/button")).click();Thread.sleep(200);  // 等待弹窗出现Alert alert = driver.switchTo().alert();alert.accept();// 跳转至奖品列表页面 测试第一个是不是设置的奖品String prizeName = driver.findElement(By.cssSelector("#prizeList > tr:nth-child(1) > td:nth-child(3)")).getText();System.out.println(prizeName);System.out.println("自动化添加的奖品是否成功  ->   " + prizeName.equals("海报"));driver.close();}

 与预期结果一致,奖品管理测试通过。


2.7 活动管理测试

验证创建活动活动列表显示功能。

  1. 在主页面点击进入创建活动界面
  2. 输入活动属性值,圈选奖品、人员
  3. 点击创建按钮
  4. 创建成功自动跳转至活动列表页
  5. 校验首个活动属性值是否与新创建的一致,是否为未执行状态
  6. 若一致,则说明创建成功,开始执行活动
  7. 点击执行活动,页面跳转,需切换句柄
  8. 执行活动,若程序正常运行完毕,则说明符合需求
public void createActivity() throws InterruptedException {base_login();// 进入创建抽奖活动界面driver.findElement(By.cssSelector("#createActivity")).click();// 进入iframeWebElement iframe = driver.findElement(By.id("contentFrame"));driver.switchTo().frame(iframe);// 输入活动名称、活动描述driver.findElement(By.cssSelector("#activityName")).sendKeys("生日会");driver.findElement(By.cssSelector("#description")).sendKeys("33Svan生日会");Thread.sleep(1000);// 圈选奖品// 点击圈选按钮、圈选人员、点击确定、看圈选按钮是否显示已圈选driver.findElement(By.cssSelector("#buttonPrizes")).click();driver.findElement(By.cssSelector("#prize-30")).click();driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();String putPrize = driver.findElement(By.cssSelector("#buttonPrizes")).getText();if (putPrize.equals("圈选奖品(已选)")) {System.out.println("圈选奖品成功");
}// 圈选人员// 点击圈选按钮、圈选人员、点击确定、看圈选按钮是否显示已圈选driver.findElement(By.cssSelector("#buttonUsers")).click();driver.findElement(By.cssSelector("#user-42")).click();driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();String putUser = driver.findElement(By.cssSelector("#buttonUsers")).getText();if (putUser.equals("圈选人员(已选)")) {System.out.println("圈选人员成功");}// 创建活动driver.findElement(By.cssSelector("#createActivity")).click();// 处理弹窗Thread.sleep(200);Alert alert = driver.switchTo().alert();alert.accept();// 校验活动是否创建成功String activityName = driver.findElement(By.cssSelector("#activities > div:nth-child(1) > div.activity-info > h4")).getText();if (activityName.equals("生日会")) {System.out.println("活动创建成功");}// 此时页面在奖品列表页// 测试执行抽奖活动driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));driver.findElement(By.cssSelector("#activities > div:nth-child(1) > div.active > p > a")).click();// 跳转至新标签页 需要切换句柄// 获取当前页面句柄String currentHandle = driver.getWindowHandle();Set<String> allHandles = driver.getWindowHandles();for (String handle : allHandles) {// 如果句柄和当前的不一样,就切换if (!handle.equals(currentHandle)) {driver.switchTo().window(handle);}}// 点击抽奖driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();driver.close();}

 与预期结果一致,活动管理测试通过。


六、测试结果评估

主线功能测试通过,项目可以上线。

http://www.lqws.cn/news/594739.html

相关文章:

  • 开源模型应用落地-OpenAI Agents SDK-集成Qwen3-8B-探索input_guardrail 的创意应用(五)
  • Hibernate对象生命周期全解析
  • SQLite与MySQL:嵌入式与客户端-服务器数据库的权衡
  • 复现一个nanoGPT——model.py
  • 【PDF-XSS攻击】springboot项目-上传文件-解决PDF文件XSS攻击
  • [密码学实战]深入解析ASN.1和DER编码:以数字签名值为例
  • 用openCV实现基础的人脸检测与情绪识别
  • 华为交换机堆叠与集群技术深度解析附带脚本
  • Sketch v2025「Athens」全新发布,3大更新重塑UI/UX设计的关键逻辑
  • stm32 单片机主要优点有哪些?
  • SAP ABAP 中 AMDP 简介及实现方法
  • Spring Boot 集成 Dufs 通过 WebDAV 实现文件管理
  • ES05 - 集群的运维和安全
  • 玄机——第一章应急响应-Linux日志分析
  • AILiquid线上AMA首秀,全链AI驱动的去中心化合约平台引发关注
  • 【项目笔记】高并发内存池项目剖析(二)
  • npm list的使用方法详细介绍
  • 【开源项目】一款真正可修改视频MD5工具视频质量不损失
  • uniapp+vue写小程序页面,实现一张图片默认放大后,可以在容器内上下左右拖动查看
  • 前端第二节(Vue)
  • 【实战】 容器中Spring boot项目 Graphics2D 画图中文乱码解决方案
  • anchor 智能合约案例3 之 journal
  • Docker进阶命令与参数——AI教你学Docker
  • 想做跑腿配送生意,怎么第三方平台订单对接?
  • MCU、LIN收发器、LIN总线、节点,它们之间是如何协作的?
  • SVN 分支管理(本文以Unity项目为例)
  • 以下是 Kafka 不同认证方式的配置示例,结合前面的单表设计方案,展示如何为每种认证方式填充配置表
  • 【Go-选项模式】
  • Spring Boot 2 多模块项目中配置文件的加载顺序
  • 2025年主流大厂Java后端面试题主题深度解析