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

目录

一、项目概述及测试目标

二、项目功能 

三、测试类型 

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.mzph.cn/pingmian/39848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm旅游信息分享网站-计算机毕业设计源码92194

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 旅游信息分享网站分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 旅游信息分享网站总体设计 3.1 系统功能模块设计 3.2 数据库设计 3.4本章小结 4 旅游信…

在数据库中,如何区分是第几范式?

在数据库中,区分不同的范式(Normal Forms,简称NFs)主要是通过判断表中数据依赖关系(特别是函数依赖)的性质来实现的。范式是关系数据库设计理论中的一个核心概念,用于指导数据库表的设计&#x…

Fabric.js 绘制图形 API 完全指南

Fabric.js 是一个功能强大的 HTML5 Canvas 库,提供了丰富的 API 用于绘制和操作图形对象。本文将详细介绍 Fabric.js 中所有的绘制图形 API 及其参数,帮助开发者全面掌握 Fabric.js 的使用。 安装与引入 安装 通过 npm 安装 Fabric.js: n…

mysql 将一个列按逗号分割为多列

在MySQL中,将一个列按逗号分割为多列通常需要使用字符串函数,如SUBSTRING_INDEX(),配合UNION ALL或CROSS JOIN等操作来实现。 假设有一个表my_table,它有一个列tags,其中存储了逗号分隔的标签值,如下所示&…

中介子方程四十一

XXFXXuXXWXXuXXdXXrXXαXXuXpXXKXηXiXXnXXyXηXuXXrXXaXnXXαXLXyXLXαXXnXaXXrXXuXηXyXXnXXiXηXKXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXpXXKXηXiXXnXXyXηXuXXrXXaXnXXαXLXyXLXαXXnXaXXrXXuXηXyXXnXXiXηXKXXpXuXXαXXrXXeXqXXNXXpXπXbXeXyXeXW…

Unity--异步加载资源

Unity–异步加载资源 0. 异步加载资源简介 在Unity中,异步加载资源是一种优化游戏性能的重要手段,特别是在处理大型资源或需要平滑过渡的场景时。以下是关于Unity中异步加载资源的内容总结: 1. 为什么使用异步加载 避免卡顿:异…

pycharm配置conda解释器

假如我新建了一个conda虚拟环境,名为python3.8

学校教室NTP电子钟时间是如何同步北京时间的?-讯鹏时钟

在学校教室里,NTP 电子钟精准地显示着时间,与北京时间保持高度同步,为师生们提供了可靠的时间参考。那么,它是如何做到这一点的呢? NTP 电子钟能够与北京时间同步,主要依赖于网络时间协议(NTP&a…

【Python】从文本字符串中提取数字、电话号码、日期、网址的方法汇总(全!)

我们在做数据清洗的时候,有时候会遇到将一堆文本中提取我们需要的内容,最常见的是,从一大段文本中提取出数字、电话号码、日期、网址等。而在Python中,正则表达式re,则可以满足我们从文本中提取数字、电话号码和日期等…

一篇文章入门主成分分析PCA

文章目录 基本概念事件随机变量独立同分布离散型随机变量伯努利分布(两点分布)二项分布几何分布泊松分布 连续型随机变量正态分布 期望方差标准化协方差相关系数线性组合特征值和特征向量特征值分解对称矩阵的特征值分解 齐次线性方程组单位向量基向量矩…

钉钉机器人接入Dify工作流

实现钉钉机器人接入dify工作流,完成ai 流式问答 代码地址 有用的话点个star github地址 效果 配置使用 修改.env_template文件 为.env 设置.env文件内的环境变量 API_KEY: dify的api_keyAPI_URL: dify 的api接口CLIENT_ID : 钉钉机器人应用的idCLIENT_SECRET:钉…

松下护眼大路灯值得买吗?实测对比书客、松下、雷士三款热门护眼灯

松下护眼大路灯值得买吗?面对长时间的频繁用眼,选择一款可以提供宽广接近自然光的护眼大路灯,用了才知道有多香,而大路灯的选购也有讲究,在面对市面上的琳琅满目的护眼大路灯,怎么选好一款灯也是个大学问&a…

layui-页面布局

1.布局容器 分为固定和完整宽度 class layui-container 是固定宽度 layui-fluid是完整宽度

【Python网络通信】基于Bypy调用百度网盘api实现自动上传和下载网盘文件

网盘对于大家的生活工作可以说是息息相关,但是如果每天都重复去上传下载文件就会很浪费时间,所以有没有什么办法可以解放双手?那就是网盘接口,本文通过Bypy库实现百度网盘的自动上传和下载文件。 原创作者:RS迷途小书童…

修改van-toast文字大小样式

this.$toast({type:fail,message: 文件超过50M,className: toastWidth })样式不能写在scoped lang"scss"里面&#xff0c;样式会失效&#xff0c;只能写在style里面 <style> .toastWidth{min-width: 150px !important;line-height: 34px;font-size: 24px; } &…

Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制

这里写目录标题 0. 机器人配置1. Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制1.1 TurtleBot3 Waffle Pi端配置1.2 PC端配置1.2.1 安装turtlebot3的环境配置1.2.2 创建项目并安装Turtlebot31.2.3 配置环境变量 1.3 PC端与TurtleBot3进行通信1.3.1 PC端与机器人端互PING和SSH连…

【Axure视频教程】控制其他页面元件——动态面板案例

今天教大家在Axure制作控制其他页面元件--动态面板案例模板&#xff0c;我们可以在一个页面中控制另外一个页面的元件&#xff0c;案例中是通过点击不同的按钮&#xff0c;进入其他页面后显示对应的动态面板的状态页。该教程从0开始制作&#xff0c;手把手教学&#xff0c;无论…

pgrouting使用

pgRouting是一个为PostgreSQL和PostGIS提供路由功能的开源库&#xff0c;它支持复杂的图论算法&#xff0c;用于在地理网络中进行最短路径搜索。以下是pgRouting的一些应用实例。 注意事项&#xff1a; 1、路网表中的id、source、target必须是int类型&#xff0c;否则创建拓扑…

【论文解读】Multiagent Multitraversal Multimodal Self-Driving: Open MARS Dataset

Open MARS Dataset 摘要引言Dataset CurationVehicle SetupData CollectionDataset Statistics Benchmark Task and ModelPlace RecognitionNeural Reconstruction Experimental ResultsVisual Place RecognitionNeural Reconstruction Opportunities and Challenges结论 摘要 …

Python的列表list(与C++的vector对比学习)

一、前言 Python的列表list与C的vector很像&#xff0c;但也有很多不同之处&#xff0c;接下来我们将会通过C的vector对比学习列表list 二、相同点 都支持动态扩容&#xff0c;可以随时随地添加和删除元素下标访问时&#xff0c;第一个元素下标为0 三、不同点 Python的 list…