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

校园幸运抽(抽奖系统)

  • 项目介绍
  • 测试用例设计
  • 部分测试示例
  • 自动化测试
    • 编写自动化脚本
      • (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.mfbz.cn/a/579.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【跟着PMP学习项目管理】敏捷专题 - 敏捷概述

目录 1、可确定的工作与高度不确定的工作 2、《敏捷宣言》及思维模式 3、 精益与看板方法 4、 不确定性、风险和生命周期选择 1、可确定的工作与高度不确定的工作 项目工作包括可确定的工作与高度不确定的工作。可确定的工作项目具有明确的流程,它们在以往类似的…

os.machine()详解

核心功能返回硬件架构 返回字符串表示系统的硬件架构,常见值包括: x86_64:64 位 x86 架构(Intel/AMD)armv7l:32 位 ARM 架构(如树莓派 3B)aarch64:64 位 ARM 架构&#x…

day4--媒资管理模块(Nacos+网关)

1. 需求分析 1.1 介绍 媒资管理系统是每个在线教育平台所必须具备的,查阅百度百科对它的定义如下: 媒体资源管理(Media Asset Management,MAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音…

【数据结构与算法】206.反转链表(LeetCode)

反转链表 问题描述 给定单链表的头节点 head,要求反转链表并返回反转后的链表头节点。 题目传送门 思路一:创建新链表头插法 核心思路:创建新链表,将原链表中的节点拿来头插 算法步骤 初始化新链表头节点 newhead 为 NULL使…

源表=电源+数字表?一文看懂SMU源表 2025-04-14

源表(Source Meter Unit, SMU)广泛用于半导体器件、材料、医疗、发光器件与光通信等行业,测量器件的伏安(I-V)特性曲线、绝缘材料的电阻值(电阻率)、电容的绝缘电阻(漏电流)、光电器件的暗电流或者L-I-V等。 源表的名称已经清晰的告诉我们,它包含了高精度电源输出和…

探索飞算 JavaAI 进阶:解锁高效Java开发的新维度

前引:在当今快速迭代的软件开发领域,Java作为企业级应用的基石,持续推动着技术创新。随着性能需求的提升,“飞算JAVA”应运而生,它融合了现代优化理念,为开发者提供了一套简洁、高效的解决方案。本文将深入…

亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战

亿级流量下的缓存架构设计:RedisCaffeine多级缓存实战 一、为什么需要多级缓存? 在亿级流量场景下,单纯依赖Redis会遇到三大瓶颈:网络延迟:Redis远程访问通常需要1-5ms,QPS超过10万时成为瓶颈资源成本&…

从就绪到终止:操作系统进程状态转换指南

前言: 在操作系统的核心机制中,进程管理是至关重要的组成部分。进程在其生命周期中会经历多种状态的变化,如创建、就绪、运行、阻塞、挂起和终止等。理解这些状态及其转换关系,不仅有助于掌握操作系统的调度原理,也能为…

chatgpt是怎么诞生的,详解GPT1到GPT4的演化之路及相关背景知识

人工智能革命正在发生,我们是何其幸运的一代,能亲眼见证人类/机器智能的大爆发。 仅仅作为这场革命的看客显然是有些遗憾的,如何进一步了解它? 本文将讨论chatgpt的诞生过程,串联起OpenAI发表的一系列重要论文&#…

GitHub信息收集

目录 简介 一、入门搜索技巧 1. 基本关键词搜索 2. 文件类型限定搜索 3. 用户/组织定向搜索 二、精准定位技巧 1. 组合搜索条件 2. 排除干扰结果 3. 路径限定搜索 三、防御建议 四、法律与道德提醒 简介 GitHub作为全球最大的代码托管平台,存储着数十亿…

2025.07.09华为机考真题解析-第一题100分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 花园灯具照明设计 问题描述 K小姐正在为她的私人花园设计照明系统。花园是一条长廊,由 n n n

Sophix、Tinker 和 Robust 三大主流 Android 热修复框架的详细对比

以下是 Sophix、Tinker 和 Robust 三大主流 Android 热修复框架的详细对比,从技术原理、功能支持、性能表现到适用场景的全方位分析:一、核心原理对比特性SophixTinkerRobust修复方式混合模式(即时生效 冷启动)冷启动生效&#x…