网页五子棋测试报告

📅 发布时间:2026/7/12 18:08:50
网页五子棋测试报告 目录1.项目概述1.1 项目背景1.2 核心技术1.3 业务功能模块1.4 测试环境2.测试用例2.1 用户模块2.2 匹配模块2.3 对战模块3.手动测试3.1 用户模块3.1.1 注册功能3.1.2 登录功能3.2 匹配模块3.3 对战模块4.自动化测试4.1 自动化环境4.2 注册页面4.3 登录页面4.4 匹配页面1.项目概述1.1 项目背景WebSocket 是 HTML5 引入的一种通信机制它允许网页与服务器之间建立持久连接实现双向实时消息推送。与传统 HTTP 的“请求-响应”模式不同WebSocket 一旦握手成功双方即可随时主动发送数据无需客户端反复轮询。在传统 Web 架构中服务器只能被动响应客户端的请求无法主动推送信息。对于像五子棋对战或即时聊天这类需要高频交互的应用若依赖 HTTP 轮询不仅延迟高、资源消耗大还难以保证消息的及时性。而 WebSocket 基于 TCP 协议连接建立后通信效率接近原生 Socket极大提升了实时应用的体验。1.2 核心技术Spring/SpringBoot/SpringMVCWebSocketMySQLMyBatisHTML/CSS/JS/AJAX1.3 业务功能模块用户模块用户注册用户登录用户天梯分数记录用户比赛场次记录匹配模块按照用户的天梯分数实现匹配机制对战模块实现两个玩家在网页端进行五子棋对战的功能1.4 测试环境操作系统Windows 1164位浏览器Edge 版本149.0.4022.982.测试用例2.1 用户模块2.2 匹配模块2.3 对战模块3.手动测试3.1 用户模块3.1.1 注册功能成功注册流程输入不存在的用户名输入一个随机密码点击提交结果提示注册成功随后跳转到登录页面异常注册流程1用户名和密码都为空点击提交结果提示注册失败2输入一个数据库中已存在的用户名输入密码点击提交按钮结果提示注册失败3.1.2 登录功能成功登录流程输入已注册过的用户名和密码点击提交按钮结果提示登录成功确认弹框后来到游戏大厅页面异常登录流程1不输入用户名和密码点击提交按钮结果提示登录失败2输入已注册的用户名但输入错误的密码结果提示登录失败3.2 匹配模块1匹配逻辑测试来到游戏大厅页面点击开始匹配结果按钮文字由“开始匹配”变为“匹配中...点击停止再点击按钮结果按钮文字重新变回“开始匹配”2成功匹配测试此时玩家张三和玩家李四都点击开始匹配结果两个玩家都来到游戏房间页面多开测试用两个不同的浏览器页面登录同一玩家张三结果提示后登录的那一个页面“检测到多开”3.3 对战模块落子与回合逻辑此时玩家张三为先手张三在棋盘上随机点击一个位置落子落子后在棋盘上绘制出一个棋子同时下方文字变成“轮到对方落子了”接着是玩家李四的落子李四落子后页面又绘制出一个棋子同时下方文字变成“轮到对方落子了”成功判定当玩家形成五子连珠的情况时右对角线就判定这个玩家获胜下方文字为“你赢了”并且多出一个“回到大厅”按钮同时对手下方的文字为“你输了”五子连珠还有其他几种情况1横向2竖向3左对角线异常情况当玩家张三在游戏进行中时退出页面或者关闭浏览器结果玩家李四直接显示“你赢了”此时并未形成五子连珠4.自动化测试4.1 自动化环境Java idea selenium webdrivermanager驱动管理 Edge浏览器4.2 注册页面package tests; import common.Utils; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.io.IOException; public class RegisterPage { private Utils utils; private WebDriverWait wait; public RegisterPage(Utils utils) { this.utils utils; this.wait utils.getWait(); } /** * 注册框检查 */ public void checkPage() throws IOException { utils.getDriver().findElement(By.cssSelector(#username)); utils.getDriver().findElement(By.cssSelector(#password)); utils.getDriver().findElement(By.cssSelector(#submit)); utils.screenShot(Thread.currentThread().getStackTrace()[1].getMethodName()); } /** * 成功注册流程 */ public void registerSuc(String username, String password) { utils.getDriver().findElement(By.cssSelector(#username)).clear(); utils.getDriver().findElement(By.cssSelector(#password)).clear(); utils.getDriver().findElement(By.cssSelector(#username)).sendKeys(username); utils.getDriver().findElement(By.cssSelector(#password)).sendKeys(password); utils.getDriver().findElement(By.cssSelector(#submit)).click(); wait.until(ExpectedConditions.alertIsPresent()); Alert alert utils.getDriver().switchTo().alert(); alert.accept(); } /** * 失败注册流程 * 用户名不填写 */ public void registerFail(String password) { utils.getDriver().findElement(By.cssSelector(#username)).clear(); utils.getDriver().findElement(By.cssSelector(#password)).clear(); // 只填密码不填用户名 utils.getDriver().findElement(By.cssSelector(#password)).sendKeys(password); utils.getDriver().findElement(By.cssSelector(#submit)).click(); wait.until(ExpectedConditions.alertIsPresent()); Alert alert utils.getDriver().switchTo().alert(); alert.accept(); } /** * 等待跳转到登录页面 */ public boolean waitForRedirectToLogin() { try { return wait.until(driver - driver.getCurrentUrl().contains(login.html) ); } catch (Exception e) { return false; } } public void quit() { utils.quit(); } }4.3 登录页面package tests; import common.Utils; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.io.IOException; public class LoginPage { private Utils utils; private WebDriverWait wait; public LoginPage(Utils utils) { this.utils utils; this.wait utils.getWait(); } /** * 登录框检查 * throws IOException */ public void checkPage() throws IOException { // 通过 utils.getDriver() 获取当前浏览器的驱动 utils.getDriver().findElement(By.cssSelector(#username)); utils.getDriver().findElement(By.cssSelector(#password)); utils.getDriver().findElement(By.cssSelector(#submit)); // 截图 utils.screenShot(Thread.currentThread().getStackTrace()[1].getMethodName()); } /** * 成功登录流程 * param username 用户名 * param password 密码 */ public void loginSuc(String username, String password) { utils.getDriver().findElement(By.cssSelector(#username)).clear(); utils.getDriver().findElement(By.cssSelector(#password)).clear(); utils.getDriver().findElement(By.cssSelector(#username)).sendKeys(username); utils.getDriver().findElement(By.cssSelector(#password)).sendKeys(password); utils.getDriver().findElement(By.cssSelector(#submit)).click(); // 等待弹窗出现并点击确认 wait.until(ExpectedConditions.alertIsPresent()); Alert alert utils.getDriver().switchTo().alert(); alert.accept(); } /** * 失败登录流程 * 密码错误 */ public void loginFail(String username, String wrongPassword) { utils.getDriver().findElement(By.cssSelector(#username)).clear(); utils.getDriver().findElement(By.cssSelector(#password)).clear(); utils.getDriver().findElement(By.cssSelector(#username)).sendKeys(username); utils.getDriver().findElement(By.cssSelector(#password)).sendKeys(wrongPassword); utils.getDriver().findElement(By.cssSelector(#submit)).click(); wait.until(ExpectedConditions.alertIsPresent()); Alert alert utils.getDriver().switchTo().alert(); alert.accept(); } /** * 等待跳转到游戏大厅 * return true表示跳转成功 */ public boolean waitForRedirectToGameHall() { try { return wait.until(driver - driver.getCurrentUrl().contains(game_hall.html) ); } catch (Exception e) { return false; } } /** * 判断是否还在登录页面 */ public boolean isOnLoginPage() { return utils.getDriver().getCurrentUrl().contains(login.html); } /** * 关闭当前浏览器 */ public void quit() { utils.quit(); } }4.4 匹配页面package tests; import common.Utils; import org.openqa.selenium.By; public class GameHallPage { private Utils utils; public GameHallPage(Utils utils) { this.utils utils; } public String getUserInfo() { return utils.getDriver().findElement(By.id(screen)).getText(); } public void clickMatchButton() { utils.getDriver().findElement(By.id(match-button)).click(); } public void startMatch() { String btnText utils.getDriver().findElement(By.id(match-button)).getText(); if (开始匹配.equals(btnText)) { clickMatchButton(); } } public void waitForRedirectToGameRoom() { utils.getWait().until(driver - driver.getCurrentUrl().contains(game_room.html) ); } }执行测试import common.Utils; import tests.GameHallPage; import tests.LoginPage; public class RunTest { public static void main(String[] args) { // 浏览器1普通模式 Utils utils1 new Utils(http://127.0.0.1:8080/login.html, false); LoginPage login1 new LoginPage(utils1); login1.loginSuc(zhangsan, 123); GameHallPage gameHallPage new GameHallPage(utils1); gameHallPage.startMatch(); // 浏览器2无痕模式 Utils utils2 new Utils(http://127.0.0.1:8080/login.html, true); LoginPage login2 new LoginPage(utils2); login2.loginSuc(lisi, 123); GameHallPage gameHallPage2 new GameHallPage(utils2); gameHallPage2.startMatch(); } }