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

网页五子棋测试

目录

一、项目背景

1.1 项目简介

1.2 应用技术

二、项目功能

2.1 用户模块

2.2 匹配模块

2.3 对战模块

三、测试报告

3.1 功能测试

3.1.1注册功能测试

3.1.2 登录功能测试

3.1.3 匹配和落子测试

3.1.4 胜负判定测试

3.2 界面测试

3.2.1 注册页面

3.2.2 登录页面

3.2.3 游戏大厅界面

3.2.4 游戏房间界面

3.2.5 界面测试总结

3.3 性能测试

3.4 自动化测试

3.4.1 工具类:AutotestUtils.java

3.4.2 测试类设计

3.4.3 测试套件:runSuite.java

四、测试总结

4.1 测试目标

4.2 测试范围

4.2.1 功能测试

4.2.2 性能测试

4.2.3 界面测试

4.2.4 兼容性测试

一、项目背景

1.1 项目简介

为了实现五子棋在线对战功能,我使用 Java 开发了一款低延迟、易上手的网页版五子棋游戏。目标是让用户打开浏览器即可秒匹配对手,享受流畅的对战体验,并能够记录战绩,在不断对弈中提升棋艺。

1.2 应用技术

本项目基于 Java 语言开发,采用 SpringBoot 搭建后端服务,整合 Spring、Spring MVC 和 MyBatis 构成 SSM 框架,提升开发效率与系统可维护性。为实现玩家间的实时在线对战功能,集成 WebSocket 协议,建立持久化全双工通信连接,确保落子指令低延迟、高可靠地实时同步。前端界面使用 HTML、CSS、JavaScript 构建,结合 Ajax 实现异步数据交互,提升用户交互体验。系统采用前后端分离架构,职责清晰,协作高效。数据层基于 MySQL 关系型数据库存储用户信息、游戏积分等结构化数据,通过 MyBatis 实现持久化操作,充分发挥数据库事务控制与一致性优势,保障高并发场景下的数据安全与系统稳定性。项目已部署至云服务器,支持多用户并发在线对战,整体架构具备良好的可扩展性与可维护性。

二、项目功能

2.1 用户模块

用户的注册和登录

管理用户的天梯分数,比赛场数,获胜场数等信息

2.2 匹配模块

依据用户的天梯积分.实现匹配机制

2.3 对战模块

把两个匹配到一起的玩家放到一个游戏房间中,双方通过网页的形式来进行对战比赛

三、测试报告

3.1 功能测试
3.1.1注册功能测试

注册成功

注册失败

注册功能测试总结:用户进行相关的注册操作时,会弹框提示注册状态。账号密码正确提示注册成功,账号错误、密码错误、同时错误或者输入为空时都会提示注册失败,此处处理比较简单,可以根据相关不同的错误类型提示不同的信息。

3.1.2 登录功能测试

登录成功

登陆失败

登录功能测试总结:用户进行相关的登录操作时,会弹框提示登录状态。账号密码正确提示登录成功,账号错误、密码错误、同时错误或者输入为空时都会提示登录失败,此处处理比较简单,可以根据相关不同的错误类型提示不同的信息。

3.1.3 匹配和落子测试

匹配等待

匹配会在相关实力的队列中进行匹配,点击匹配之后显示如图。

匹配成功

匹配成功之后,会进入游戏房间,下面会提示用户先后手的信息

落子测试

玩家落子之后,会切换到另一个玩家落子,不同玩家执不同颜色的棋子

3.1.4 胜负判定测试

其中一个玩家达成五子连珠之后,也会有相关的输赢显示

3.2 界面测试
3.2.1 注册页面

3.2.2 登录页面

3.2.3 游戏大厅界面

3.2.4 游戏房间界面

3.2.5 界面测试总结

各页面的左上角“五子棋对战”字样正常显示,背景图片正常显示,按钮正常。登录/注册界面显示注册,游戏大厅界面玩家信息(用户名、分数、比赛场次、获胜场次)正常显示,游戏房间棋盘和棋子显示正常。

3.3 性能测试

1.创建一个梯度压测线程组,慢慢增大我们对这两个接口(登录接口和获取用户信息接口)的并发请求的数量

2.创建 HTTP Cookie 管理器,添加相关的用户信息

3.写csv数据

4.把写好的csv数据导入测试中,用于生成测试图

5.tps

6.响应时间

7.总结

当少数用户用于访问页面时,加载时长任在可控范围内;但是当大量用户同时进行匹配游戏时还是会出现卡顿,加载速度过慢的情况。

3.4 自动化测试
3.4.1 工具类:AutotestUtils.java

我设计了一个工具类来封装测试过程中常用的功能:

  • createDriver() :创建并配置ChromeDriver实例

  • getScreenShot() :捕获屏幕截图并按日期组织存储

public class AutotestUtils {public static ChromeDriver driver;
​public static ChromeDriver createDriver() {if (driver == null) {System.setProperty("webdriver.chrome.driver", "D:/chromedriver-win64/chromedriver.exe");ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));}return driver;}
​public void getScreenShot(String str) throws IOException {SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());String filename = "./src/test/image/" + dirTime + "/" + str + "-" + fileTime + ".png";File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(srcFile, new File(filename));}
}
3.4.2 测试类设计

我们针对不同页面和功能编写了专门的测试类: 登录页面测试:LoginPageTest.java这个类测试了登录页面的各项功能,包括页面加载、正常登录和异常登录场景。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class LoginPageTest extends AutotestUtils {public static ChromeDriver driver = createDriver();
​@BeforeAllstatic void baseControl() {driver.get("http://49.232.126.11:8080/login.html");}
​@Test@Order(1)void loginPageLoadRight() throws IOException {driver.findElement(By.cssSelector("#submit"));driver.findElement(By.cssSelector("body > div.login-container > div > h3"));getScreenShot(getClass().getName());}
​@ParameterizedTest@CsvSource({"lisi,123","zhangsan,123"})@Order(2)void loginSuc(String name, String passwd) throws InterruptedException, IOException {driver.findElement(By.cssSelector("#username")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#username")).sendKeys(name);driver.findElement(By.cssSelector("#password")).sendKeys(passwd);driver.findElement(By.cssSelector("#submit")).click();// 处理登录成功弹窗WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();alert.accept();// 验证是否跳转到游戏大厅driver.findElement(By.cssSelector("#match_button"));getScreenShot(getClass().getName());driver.navigate().back();}
}

注册页面测试:RegisterPageTest.java这个类负责测试用户注册功能,包括页面加载、正常注册和异常注册场景。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class RegisterPageTest extends AutotestUtils {//1.驱动对象public static ChromeDriver driver = createDriver();
​
​/**访问注册页面的URL*/@BeforeAllstatic void baseControl() {driver.get("http://49.232.126.11:8080/register.html");}
​/*** 检查注册页面是否正常打开* 检查点:注册框标题 是否存在*/@Test@Order(1)void registerPageLoadRight() throws IOException {driver.findElement(By.cssSelector("body > div.login-container > div > h3"));getScreenShot(getClass().getName());
​}
​/*** 检查正常注册的情况,会出现弹窗:注册成功!*/@ParameterizedTest@CsvSource({"lisi4,123"})@Order(3)void registerSuc(String name,String password) throws InterruptedException, IOException {String expected = "注册成功!";driver.findElement(By.cssSelector("#username")).clear();driver.findElement(By.cssSelector("#password")).clear();driver.findElement(By.cssSelector("#username")).sendKeys(name);driver.findElement(By.cssSelector("#password")).sendKeys(password);driver.findElement(By.cssSelector("#submit")).click();//处理弹窗WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();String accept = alert.getText();alert.accept();getScreenShot(getClass().getName());Assertions.assertEquals(expected,accept);}/*** 检查异常注册的情况:用户名或者密码为空* 会出现弹窗提示*/@ParameterizedTest@CsvSource({"zs"})@Order(2)void registerFail(String name) throws InterruptedException, IOException {driver.findElement(By.cssSelector("#username")).clear();driver.findElement(By.cssSelector("#password")).clear();String expected = "注册失败!!";driver.findElement(By.cssSelector("#username")).sendKeys(name);driver.findElement(By.cssSelector("#submit")).click();//处理弹窗WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));wait.until(ExpectedConditions.alertIsPresent());Alert alert = driver.switchTo().alert();String accept = alert.getText();alert.accept();getScreenShot(getClass().getName());Assertions.assertEquals(expected,accept);}

游戏大厅测试:GameHallTest.java这个类测试了游戏大厅页面的加载和匹配功能。

@Test@Order(1)void gameHallLoadRight() throws IOException {//检查“开始匹配按钮”元素是否存在driver.findElement(By.cssSelector("#match_button"));getScreenShot(getClass().getName());}/*** 检查正登录状态下:点击“开始匹配”按钮否会变化*/@Test@Order(2)void gameHallSuc() throws InterruptedException, IOException {String expected = "匹配中...(点击停止)";WebElement matchButton = driver.findElement(By.cssSelector("#match_button"));matchButton.click();//强制等待,等按钮文字改变Thread.sleep(3);String accept = driver.findElement(By.cssSelector("#match_button")).getText();getScreenShot(getClass().getName());Assertions.assertEquals(expected,accept);}
​

游戏房间测试:GameRoomTest.java这个类负责测试游戏房间功能,特别是未匹配用户访问游戏房间的场景。

@BeforeAllstatic void baseControl() {driver.get("http://49.232.126.11:8080/game_room.html");}
​/*** 检查登录——未匹配用户状态下的的游戏房间是否有弹窗*/@Test@Order(1)void gameRoomFail() throws InterruptedException, IOException {String expected = "连接游戏失败! reason: 该用户尚未匹配";Thread.sleep(1000);Alert alert = driver.switchTo().alert();String accept = alert.getText();alert.accept();getScreenShot(getClass().getName());Assertions.assertEquals(expected,accept);}
3.4.3 测试套件:runSuite.java

为了方便一次性执行所有测试,我们创建了测试套件:

@Suite//创建测试套件
// 用于Suite的注解,指定要包含在测试套件中的测试类
@SelectClasses({RegisterPageTest.class, LoginPageTest.class,GameHallTest.class,GameRoomTest.class,driverQuitTest.class})
public class runSuite {
​
}

网页五子棋自动化测试

四、测试总结

对测试进行了一个简单总结

4.1 测试目标

确保五子棋的基本功能正常运行,界面对用户友好,游戏能够在不同浏览器兼容。

4.2 测试范围
4.2.1 功能测试

注册:用户进行相关的注册操作时,会弹框提示注册状态。账号密码正确提示注册成功,账号错误、密码错误、同时错误或者输入为空时都会提示注册失败,此处处理比较简单,可以根据相关不同的错误类型提示不同的信息。

登录:用户进行相关的登录操作时,会弹框提示登录状态。账号密码正确提示登录成功,账号错误、密码错误、同时错误或者输入为空时都会提示登录失败,此处处理比较简单,可以根据相关不同的错误类型提示不同的信息。

匹配:匹配成功之后,会进入游戏房间,下面会提示用户先后手的信息。

落子:玩家落子之后,会切换到另一个玩家落子,不同玩家执不同颜色的棋子。

输赢:在各种五子连珠情况下,胜负判断准确无误。

4.2.2 性能测试

当少数用户用于访问页面时,加载时长任在可控范围内;但是当大量用户同时进行匹配游戏时还是会出现卡顿,加载速度过慢的情况。

4.2.3 界面测试

各页面的左上角“五子棋对战”字样正常显示,背景图片正常显示,按钮正常。登录/注册界面显示注册,游戏大厅界面玩家信息(用户名、分数、比赛场次、获胜场次)正常显示,游戏房间棋盘和棋子显示正常。

4.2.4 兼容性测试

目前只在window11的主流浏览器(Chrome、Firefox和Edge浏览器)进行了测试,游戏运行基本完美,只有一些小的样式差异。

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

相关文章:

  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-关于我们
  • 2025最新免费的大模型和免费的大模型API有哪些?(202508更新)
  • 秋招春招实习百度笔试百度管培生笔试题库百度非技术岗笔试|笔试解析和攻略|题库分享
  • 冒泡排序实现以及优化
  • WebSocket集群方案解析与实现
  • My APK 安卓版:高效管理手机应用的工具软件
  • windows的cmd命令【持续更新】
  • Linux应用软件编程---文件操作1(fopen、fclose、fgetc/fputc、fgets/fputs)
  • 什么是浏览器标识?
  • 【Docker进阶实战】从多容器编排到集群部署
  • TSF应用开发与运维部署
  • 个人笔记Mybatis2
  • 医学统计(现况调查的统计分析策略1)
  • 电脑使用“碎片整理”程序的作用
  • 基于ECharts的智慧社区数据可视化
  • 【npm、yarn、pnpm】特点对比,按需选择
  • Java设计模式之开闭原则介绍与说明
  • 【RocketMQ 生产者和消费者】- ConsumeMessageOrderlyService 顺序消费消息
  • Vue.js设计于实现 - 概览(二)
  • 跑酷小游戏2.0
  • C语言(长期更新)第10讲:操作符详解(二)
  • 麻溜启动Oracle实例demo
  • 【渲染流水线】[几何阶段]-[归一化NDC]以UnityURP为例
  • 基于Spring Boot和WebSocket的实时聊天系统
  • Openlayers基础教程|从前端框架到GIS开发系列课程(21)geojson实现线要素和区要素
  • git merge的原理和过程,merge conflict产生的原因、处理的逻辑
  • 【话题讨论】GPT-5 发布全解读:参数升级、长上下文与多领域能力提升
  • MCP学习与实践
  • ESP32安装于配置
  • [激光原理与应用-216]:设计 - 皮秒紫外激光器 - 热管理设计,多维策略保障高效稳定运行