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

目录

一、项目概述及测试目标

二、项目功能 

三、测试类型 

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 旅游信…

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迷途小书童…

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连…

pgrouting使用

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

【论文解读】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结论 摘要 …

vivado联合modelsim仿真

一. 编译Vivado仿真库 打开Vivado,Tools -> Compile Simulation Libraries 二. 设置仿真工具和库路径 因为新建工程的默认仿真工具是Vivado Simulator,所以要使用Modelsim仿真,每个新工程都要设置一次,方法如下: …

上海小程序开发需要进行定制开发吗?

随着互联网技术与移动设备的不断成熟,小程序也已普及到人们日常生活的方方面面。随着企业与互联网联结的愈发深入,小程序的开发可以为企业带来更高效的经营模式,降本增效。那么,上海小程序作为无需安装且开发门槛较低的应用&#…

【Python】Python中的常量与变量

常量与变量 导读一、新建项目二、常量2.1 字面常量2.2 特殊常量 三、变量3.1 变量的定义3.2 变量的命名3.2.1 关键字 结语 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们详细介绍了Python环境的搭建过程,…

【等保2.0是什么意思?等保2.0的基本要求有哪些? 】

一、等保2.0是什么意思? 等保2.0又称“网络安全等级保护2.0”体系,它是国家的一项基本国策和基本制度。在1.0版本的基础上,等级保护标准以主动防御为重点,由被动防守转向安全可信,动态感知,以及事前、事中…

【Python基础篇】一篇文章入门Python,进入Python的世界

文章目录 0.前言1.打印(Hello,World)2.创建变量3.打印升级3.1 打印一句话中间加变量3.2 sep设置分隔符3.3 end和换行 4. 注释 0.前言 大家好,我是小辰,前几天做了个重大的决定,学习python。 首先&#xff0…

Docker部署ETCD 3.5.14(保姆级图文教程)

系列文章目录 Docker部署Nginx 1.21.5(保姆级图文教程) Docker部署MySQL 8.3.0(保姆级图文教程) Docker部署ETCD 3.5.14(保姆级图文教程) 文章目录 一、环境二、拉取镜像2.1 查找 Docker Hub 上的 ETCD 镜像…

人工智能在软件开发中的角色:助手还是替代者?

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【FDTD Solutions(时域有限差分)仿真技术与应用】

FDTD Solutions(时域有限差分)是一种基于时域有限差分方法的电磁场仿真技术。它是一种数值计算方法,用于解决Maxwell方程组,能够模拟电磁波的传播和相互作用。 FDTD Solutions的原理是将空间分割成网格,并在每个网格点…