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

校园幸运抽(抽奖系统)测试报告

校园幸运抽(抽奖系统)

  • 项目介绍
  • 测试用例设计
  • 部分测试示例
  • 自动化测试
    • 编写自动化脚本
      • (1)引入相关的脚本依赖
      • (2) 创建对应的类和文件夹
      • 自动化部分功能实战结果(视频)
      • 部分源码展示:
      • 测试总结:
      • 接口测试

项目介绍

"校园幸运抽"是一款基于SSM(Spring+SpringMVC+MyBatis)框架构建的智能抽奖平台,专为校园场景设计,集活动运营、数据安全和高并发处理于一体。系统采用Spring Boot3现代化架构,融合多种前沿技术,为师生提供趣味性强、公平透明的抽奖体验,同时为运营者提供高效的管理工具。

测试用例设计

在这里插入图片描述

部分测试示例

注册信息不填直接点击注册,出现提示词
在这里插入图片描述
正常注册
在这里插入图片描述
密码错误登录
在这里插入图片描述
正常登录跳转到活动中心页面
在这里插入图片描述

自动化测试

编写自动化脚本

(1)引入相关的脚本依赖

在这里插入图片描述

(2) 创建对应的类和文件夹

在这里插入图片描述

自动化部分功能实战结果(视频)

屏幕录制 2025-07-12 223510

部分源码展示:

public class Utils {private static WebDriver driver;public Utils() {}public static WebDriver getDriver() {if(driver == null) {WebDriverManager.firefoxdriver().setup();FirefoxOptions options = new FirefoxOptions();options.addArguments("--headless");driver = new FirefoxDriver();driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));}return driver;}public static void openUrl(String url) {getDriver().get(url);}public static void quitDriver() {if (driver != null) {driver.quit();driver = null;}}public static void waitForElementVisible(By locator, Duration timeout) {new WebDriverWait(getDriver(), timeout).until(ExpectedConditions.visibilityOfElementLocated(locator));}public static void waitForElementClickable(By locator, Duration timeout) {new WebDriverWait(getDriver(), timeout).until(ExpectedConditions.elementToBeClickable(locator));}public static void ScreenShot(String name)  {//年月日SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");//时分秒SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());File srcFile= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);String fileName = "./src/test/java/images/" + dirTime + "/" + name +"/"+ "-" + fileTime + ".png";try {FileUtils.copyFile(srcFile,new File(fileName));} catch (IOException e) {System.out.println("截图失败:"+e.getMessage());}}public static  WebDriverWait Wait() {return new WebDriverWait(getDriver(), Duration.ofSeconds(10));}public static void captureFullScreen(String picName) {//年月日SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");//时分秒SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());File srcFile= ((TakesScreenshot)getDriver()).getScreenshotAs(OutputType.FILE);String fileName = "./src/test/java/images/" + dirTime + "/" +picName+"/"+ "-" + fileTime ;try {// 创建 Robot 类实例Robot robot = new Robot();// 获取屏幕尺寸Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());// 捕获整个屏幕BufferedImage screenFullImage = robot.createScreenCapture(screenRect);// 将截图保存为文件ImageIO.write(screenFullImage, "png", new File(fileName));} catch (AWTException | IOException e) {e.printStackTrace();}}}private Alert alert ;private WebDriver driver ;{Utils.openUrl("http://101.201.58.216:8080/blogin.html");driver = Utils.getDriver();}public void loginInformation(String username, String password,String picName) {driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();  // 清空密码输入框driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys(username);driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);driver.findElement(By.xpath("/html/body/div/div[2]/form[1]/button")).click();}//正确登录public void Normallogin(String username, String password,String picName)  {loginInformation(username, password,picName);String title = driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).getText();assert title.equals("退出");Utils.ScreenShot(picName);// 输入密码}public void userCorrectPasswordError(String username, String password,String picName)  {loginInformation(username, password,picName);Utils.Wait().until(ExpectedConditions.alertIsPresent());alert=driver.switchTo().alert();String title = alert.getText();assert title.equals("登录失败!密码错误");// Utils.captureFullScreen(picName);// 输入密码alert.accept();Utils.ScreenShot(picName);}public void userErrorPasswordCorrect(String username, String password,String picName)  {loginInformation(username, password,picName);alert=driver.switchTo().alert();String title = alert.getText();assert title.equals("登录失败!登录方式不存在");// Utils.ScreenShot(picName);// 输入密码alert.accept();Utils.ScreenShot(picName);}public void userEmptyPasswordCorrect(String username, String password,String picName)  {loginInformation(username, password,picName);String textPhone=driver.findElement(By.xpath("//*[@id=\"phoneNumber-error\"]")).getText();assert textPhone.equals("请输入您的手机号");// Utils.ScreenShot(picName);// 输入密码Utils.ScreenShot(picName);}public void userCorrectPasswordEmpty(String username, String password,String picName)  {loginInformation(username, password,picName);String text=driver.findElement(By.xpath("//*[@id=\"password-error\"]")).getText();assert text.equals("请输入密码");// Utils.ScreenShot(picName);// 输入密码Utils.ScreenShot(picName);}public void userErrorPasswordError(String username, String password,String picName)  {loginInformation(username, password,picName);alert=driver.switchTo().alert();String title = alert.getText();assert title.equals("登录失败!登录方式不存在");// Utils.ScreenShot(picName);// 输入密码alert.accept();Utils.ScreenShot(picName);}public void userEmptyPasswordEmpty(String username, String password,String picName)  {loginInformation(username, password,picName);String textPhone=driver.findElement(By.xpath("//*[@id=\"phoneNumber-error\"]")).getText();String textPassword=driver.findElement(By.xpath("//*[@id=\"password-error\"]")).getText();assert textPhone.equals("请输入您的手机号");assert textPassword.equals("请输入密码");Utils.ScreenShot(picName);}

源码仓库:https://gitee.com/daiyang-200332/automated-testing-source-code
测试结果:自动化正常结束,用例通过

测试总结:

该项目在功能方面表现良好,测试过程中发现的问题均已修复,但由于云服务器资源不足,链接不够稳定,以及项目逻辑中设置了多开限制,因此暂时未能进行完整的压力测试

接口测试

利用postman对于登录,注册,创建奖品,创造抽奖人员,抽奖等接口进行测试,保证接口返回值正确

在这里插入图片描述
测试结果:符合预期结果

http://www.lryc.cn/news/586618.html

相关文章:

  • 第七章应用题
  • HT8313功放入门
  • HashMap的原理
  • 数据结构与算法之美:线索二叉树
  • 蒙特卡洛树搜索方法实践
  • 蓝牙调试抓包工具--nRF Connect移动端 使用详细总结
  • 生成式对抗网络(GAN)模型原理概述
  • Java生产带文字、带边框的二维码
  • 牛客:HJ19 简单错误记录[华为机考][字符串]
  • 009 ST表:静态区间最值的极致优化
  • 面试现场:奇哥扮猪吃老虎,RocketMQ高级原理吊打面试官
  • MyBatis实现分页查询-苍穹外卖笔记
  • comfyUI-controlNet-线稿软边缘
  • python-enumrate函数
  • HarmonyOS从入门到精通:动画设计与实现之六 - 动画曲线与运动节奏控制
  • houdini 用 vellum 制作一个最简单的布料
  • 洛谷题解 | UVA1485 Permutation Counting
  • C++结构体数组应用
  • Spring Boot 中使用 Lombok 进行依赖注入的示例
  • 基于springboot+Vue的二手物品交易的设计与实现(免费分享)
  • 2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文讲解(含完整python代码)
  • jieba 库:中文分词的利器
  • JAVA--双亲委派机制
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(四)
  • 【一起来学AI大模型】RAG系统流程:查询→向量化→检索→生成
  • 【AI News | 20250711】每日AI进展
  • 【TOOL】ubuntu升级cmake版本
  • AI产品经理面试宝典第12天:AI产品经理的思维与转型路径面试题与答法
  • 功耗校准数据PowerProfile测试方法建议
  • 【深度剖析】致力“四个最”的君乐宝数字化转型(下篇:转型成效5-打造数字化生存能力探索可持续发展路径)