云顶之弈-测试报告

前言

五子棋对战网页应用是一个基于Web技术的在线多人五子棋游戏。该应用提供了用户注册、登录、匹配对手、对战等功能,旨在为用户提供轻松愉快的游戏体验。本篇文章主要用来记录我的网页版五子棋项目,包括项目介绍、实现功能、测试用例、自动化测试等。

一、项目描述

该项目支持玩家随时随地与其他在线玩家进行五子棋对战,实现实时的棋局同步和即时通讯。利用 WebSocket 技术实现双向通信,保证游戏过程中的实时性和即时交互,提供更流畅的游戏体验。 提供游戏大厅,展示在线玩家信息、排名和当前对局状态。内置匹配系统,自动匹配合适的对手,确保玩家能够享受到公平有趣的游戏。

技术栈:
前端: 使用HTML5、CSS3、JavaScript以及现代前端框架(如React、Vue等)构建直观、响应式的用户界面。
后端: 基于Spring MVC、Spring Boot等后端框架,使用WebSocket实现实时通信,处理用户认证、游戏逻辑和数据存储。
数据库: 使用关系型数据库MySQL存储用户信息、对战历史等数据。
实时通信: 使用WebSocket技术,实现玩家之间的实时通信和对战同步。
webSocket:是一个应用层协议。四个核心点:建立连接之后、收到消息之后、出现连接异常、出现连接关闭。客户端通过webSocket.send()发送消息,服务器使用sendMessage()发送消息。

二. 项目功能

1、注册功能——未注册的用户可以输入用户名和密码进行注册。

2、登录功能——用户注册完成账号之后,可以输入正确的用户名和密码进行登录

3、匹配功能——用户在游戏大厅页面点击“开始匹配”按钮,即可进行匹配,匹配到玩家之后会立即进入游戏页面。

4、对战功能——用户在游戏房间页面即可在棋盘中进行对弈。

三. 功能测试

1. 注册功能

注册之前的数据库

 

注册之后的数据库

 

2. 登录功能

 

3. 大厅匹配功能

4. 游戏房间功能 

5. 获胜条件功能

 

  四. 自动化测试用例

(1) 注册页面

根据注册页面的测试用例编写,对是否注册成功进行测试

    @Order(4)
    @Test
    @CsvSource
    public void RegisterSuccess() throws InterruptedException {
        //打开注册页面
        webDriver.get("http://127.0.0.1:8085/register.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间

        String expected = "注册成功!";
        webDriver.findElement(By.cssSelector("#username")).clear();  //清除
        webDriver.findElement(By.cssSelector("#password")).clear();
        String name = System.currentTimeMillis()/1000+""; //根据时间戳获取一个随机字符串
        String password = System.currentTimeMillis()/1000+"";
        webDriver.findElement(By.cssSelector("#username")).sendKeys(name);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.findElement(By.cssSelector("#submit")).click();
        //强制等待0.1s,弹窗出现
        Thread.sleep(100);
        Alert alert = webDriver.switchTo().alert();
        String accept = alert.getText();  //返回警告窗的文本
        //比较断言判断
        Assertions.assertEquals(expected, accept);  //前面的值是预期,后面的是测试得到的值
        //确认
        alert.accept();
    }

(2) 登录页面

根据测试用例,我们对登录页面是否正常、登录失败、登录成功分别测试。
这里写出测试登录失败的逻辑:
1)清空登录框。防止多组登录;
2)登录,使用cssSelector选择器和sendkeys输入文本,csvSource准备好测试数据;
3)获取弹窗和弹窗中的提示信息;
4)使用assertion判断实际信息和提示信息是否一致,一致则登录成功。

    @Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "LoginSuccess.csv")
    public void LoginSuccess(String username, String password, String url) throws InterruptedException {

        //打开登录页面
        webDriver.get("http://127.0.0.1:8085/login.html");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间
        //输入账号zhangsan
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        //输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间
        //点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);  强制等待0.1s,弹窗出现
        //弹窗点确认
        Alert alert = webDriver.switchTo().alert();
        //确认
        alert.accept();
        //获取当前页面的URL
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals(url, cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间
        //游戏大厅信息展示
        //用户名是zhangsan测试通过,反之不通过
        String cur_zhangshan = webDriver.findElement(By.cssSelector("#screen > span")).getText();
        Assertions.assertEquals(username, cur_zhangshan);  //前面的值是预期,后面的是测试得到的值

    }

(3) 游戏大厅页面

根据游戏大厅的测试用例,编写页面加载正常、检测用户登录、匹配按钮的测试代码。
其匹配按钮的测试代码逻辑如下:
1)由于点击匹配按钮需要是登录的状态下,所以先进行用户的登录;
2)登录后点击匹配按钮;
3)查看点击后的匹配按钮的状态是否发生变化;
4)再次点击按钮;
5)查看按钮是否恢复为开始匹配状态。

@Order(2)
    @Test
    public void game_hallSuccess() {
        String expected = "匹配中...(点击停止)";
        webDriver.findElement(By.cssSelector("#match-button")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间
        String accept = webDriver.findElement(By.cssSelector("#match-button")).getText();
        Assertions.assertEquals(expected, accept);
        //再次点击
        webDriver.findElement(By.cssSelector("#match-button")).click();
        String acceptAgain = webDriver.findElement(By.cssSelector("#match-button")).getText();
        //判断
        expected = "开始匹配";
        Assertions.assertEquals(expected, acceptAgain);
    }

(4) 游戏对战页面

根据测试用例对游戏匹配成功后游戏对战页面进行测试,主要测试点是页面上的棋盘和显示屏元素。
测试步骤:
1)防止多开,创建两个浏览器驱动(edgeDriver、webDriver);
2)分别在两个浏览器上登录不同的账户;
3)登录成功后进入游戏大厅页面,分别点击开始匹配按钮;
4)匹配成功后进入游戏对战页面,寻找棋盘和显示屏两个标志元素。

@Order(3)
    @Test
    public void gameSuccess() throws InterruptedException {
        // 不同系统的两个用户匹配到同一个房间
        userLogin();
        // 测试游戏对战页面
        edgeDriver.findElement(By.cssSelector("#chess"));
        webDriver.findElement(By.cssSelector("#chess"));

    }

    private static void userLogin() throws InterruptedException {
        //打开第一个登录页面
        webDriver.get("http://127.0.0.1:8085/login.html");
        //输入账号zhangsan
        webDriver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        //输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("123");
        //点击提交
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);  强制等待0.1s,弹窗出现
        //弹窗点确认
        Alert alert = webDriver.switchTo().alert();
        //确认
        alert.accept();
        //进入游戏房间
        webDriver.findElement(By.cssSelector("#match-button")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间

        //打开第二个登录页面
        edgeDriver.get("http://127.0.0.1:8085/login.html");
        //输入账号lisi
        edgeDriver.findElement(By.cssSelector("#username")).sendKeys("lisi");
        //输入密码
        edgeDriver.findElement(By.cssSelector("#password")).sendKeys("123");
        //点击提交
        edgeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);  强制等待0.1s,弹窗出现
        //弹窗点确认
        Alert alert2 = edgeDriver.switchTo().alert();
        //确认
        alert2.accept();
        //进入游戏房间
        edgeDriver.findElement(By.cssSelector("#match-button")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);  //隐式等待时间
    }

五. 项目测试结果

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值