【测试】五子棋项目测试报告

ops/2024/10/20 19:01:33/

目录

一、项目概述及测试目标

二、项目功能 

三、测试类型 

1)功能测试      

​编辑

2)自动化测试 

四、测试总结


一、项目概述及测试目标

本项目是一个基于Web的五子棋实时对战应用,旨在提供用户之间的多人实时游戏体验。项目采用前后端分离的方法来实现,使用了数据库来存储相关的数据,并将其部署到了云服务器上。前端主要有四个页面构成:登录页、注册页、游戏大厅页以及游戏房间页,测试的目标是验证游戏的功能完整性。

二、项目功能 

该五子棋对战项目主要实现了以下几个功能:登录、注册、匹配和对战功能。

  1. 用户注册与登录:玩家可以注册账户并进行登录,每个玩家保存个人积分信息以及游戏记录(场数、胜场数)。
  2. 游戏大厅页面:展示在线玩家信息和进行玩家匹配功能。使用 WebSocket 协议实现实时匹配功能,处理了多开问题、线程安全问题及忙等问题,避免因并发而导致的意外行为。
  3. 游戏房间页面:当两个积分相近的玩家成功匹配后,会进入游戏房间界面,使用 WebSocket 进行页面初始化,并发送请求和接收响应,前端发送落子请求,后端进行胜利逻辑判断并返回落子响应,实现实时对战。
  4. 掉线处理:针对玩家掉线进行及时处理,当一名玩家掉线后,另一名玩家能第一时间收到通知,并进行胜负判定。

三、测试类型 

1)功能测试      

测试用例

实际执行测试的部分操作步骤/截图:

a)登录界面 - 输入正确用户名和密码进行登录

b)游戏大厅页面

c)匹配逻辑测试

d)游戏胜负判定

e)多开处理 - 后登录的将被强制退出

f)掉线处理 - 对方直接关闭页面或网络异常,直接判定游戏胜负

以上测试均成功通过。 

2)自动化测试 

使用 Selenium 对登录,匹配等基础功能进行了简单测试。

五子棋项目自动化测试代码仓库(gitee)

自动化中涉及到的通用操作封装在一个类中,如创建驱动对象,屏幕截图等。

import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.time.Duration;public class InitAndEndBrowser {static WebDriver webDriver;@BeforeAllstatic void openGobangSystem() {WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");webDriver = new ChromeDriver(options);webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));}@AfterAllstatic void closeGobangSystem() {webDriver.quit();}
}

部分功能的自动化测试 

import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;import static java.lang.Thread.sleep;
import static org.junit.jupiter.api.Assertions.assertNotNull;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class GobangTest extends InitAndEndBrowser {//登录成功测试@Order(2)@ParameterizedTest@CsvSource({"'zhangsan', '123456'"})void loginSuccessful(String username, String password) {webDriver.get("http://47.121.113.16:9090/login.html");webDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.findElement(By.cssSelector("#password")).sendKeys(password);webDriver.findElement(By.cssSelector("#submit")).click();//登录后,应跳转到游戏大厅页面//检验是否有开始匹配这个按钮String text = webDriver.findElement(By.cssSelector("#match-button")).getText();if ("开始匹配".equals(text)) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}//登录失败测试@Order(1)@ParameterizedTest@CsvFileSource(resources = "loginfalied.csv")void loginFailed(String username, String password) throws InterruptedException {webDriver.get("http://47.121.113.16:9090/login.html");webDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.findElement(By.cssSelector("#password")).sendKeys(password);webDriver.findElement(By.cssSelector("#submit")).click();sleep(2000);//登录失败,会出现一个alert弹窗Alert alert = webDriver.switchTo().alert();if (alert != null) {System.out.println("测试通过,弹框内容: " + alert.getText());} else {System.out.println("测试不通过");}assertNotNull(alert);alert.dismiss();  //关闭弹窗}//匹配按钮的显示功能测试(放在登录成功测试之后执行)@Order(3)@Testvoid matchButtonTest() throws InterruptedException {
//        webDriver.get("http://47.121.113.16:9090/login.html");
//        webDriver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
//        webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");
//        webDriver.findElement(By.cssSelector("#submit")).click();sleep(2000);//此时按钮显示的是开始匹配,点击后看是否变成了匹配中webDriver.findElement(By.cssSelector("#match-button")).click();sleep(2000);String text = webDriver.findElement(By.cssSelector("#match-button")).getText();if (text.equals("匹配中...(点击停止)")) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}
}

四、测试总结

五子棋实时对战Web项目在功能方面表现良好,测试过程中发现的问题都及时修复。但由于云服务器资源不足,带宽有限,与客户端的网络连接不够稳定,因此暂时未能进行完整的性能和压力测试。


http://www.ppmy.cn/ops/56253.html

相关文章

解码技术债:AI代码助手与智能体的革新之道

技术债 技术债可能来源于多种原因,比如时间压力、资源限制、技术选型不当等。它可以表现为代码中的临时性修补、未能彻底解决的设计问题、缺乏文档或测试覆盖等。虽然技术债可以帮助快速推进项目进度,但长期来看,它会增加软件维护的成本和风险…

Codeforces Round 956 F. array-value 【01Trie查询异或最小值】

题意 给定一个非负整数数组 a a a 对每个长度至少为 2 2 2 的子数组&#xff0c;定义其权值为&#xff1a;子数组内两两异或值最小值 即 b ⊂ a [ l , r ] , w ( b ) min ⁡ l ≤ i < j ≤ r { a i ⨁ a j } b \subset a[l, r], \quad w(b) \min_{l \leq i < j \le…

k8s常用组件之pod

简介 Pod 是 Kubernetes 中最小的部署单元,也是 Kubernetes 集群中的基本工作单元。一个 Pod 通常包含一个或多个密切相关的容器。 Pod 的主要特点包括: 容器组合 Pod 可以包含一个或多个密切相关的容器,这些容器共享网络、存储等资源。这些容器通常被称为 Pod 内的"同…

ABAP 一篇作业分享

目录 一&#xff1a;要件定义&#xff1a; 二&#xff0c;具体代码&#xff1a; 三&#xff0c;测试结果&#xff1a; 一&#xff1a;要件定义&#xff1a; 二&#xff0c;具体代码&#xff1a; *&-------------------------------------------------------------------…

用MATLAB绘制三向应力圆

% 定义主应力值 sigma1 100; % MPa sigma2 50; % MPa sigma3 -33; % MPa sigma_m1(sigma1 sigma3)/2; sigma_m2(sigma1 sigma2)/2; sigma_m3(sigma2 sigma3)/2; % 计算半径 r1 (sigma1 - sigma3) / 2; r2 (sigma1 - sigma2) / 2; r3 (sigma2 - sigma3…

Windows Server 2012 R2查看IIS版本

文章目录 一、方法一1.win R 键打开运行窗口 → 输入 "regedit" → 点击【确定】2.HKEY_LOCAL_MACHINE → SOFTWARE → Microsoft → InetStp 二、方法二1.win R 键打开运行窗口 → 输入 "inetmgr" → 点击【确定】2.点击 【帮助】 → 选择【关于 Intern…

模型泛化与工程技巧-模型泛化

1. 模型存在问题 1.1 过拟合 过拟合(Overfitting):模型过于紧密或精确地匹配特定数据集,以致于无法良好地拟合其他数据或预测未来的观察结果的现象。通俗的来讲,就是训练的模型在训练集上的精确度很高,但是在测试集上的精确度却很差的现象。 1.2 如何防止过拟合—数据角度 …

快速测试electron环境是否安装成功

快速测试electron环境是否安装成功 测试代码正确运行的效果运行错误的效果v22.4.1 版本无法使用v20.15.1版本无法使用v18.20.4 版本无法使用 测试代码 1.npx create-electron-app my-electron-app 2.cd my-electron-app 3.npm start 正确运行的效果 环境没问题,你就会正常运…