网页五子棋项目自动化测试

一、项目概述以及本次测试的目标

本项目是基于Web的五子棋实时对战应用,为用户提供多人实时游戏体验;项目采用了前后端分离的方法来实现,使用了数据库来存储相关的数据;前端主要有四个页面构成:登录页面,注册页面,游戏大厅页面和游戏房间页面,测试的目标是验证游戏的功能的完整性。

二、项目的功能

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

1.用户注册与登录:玩家可以注册账户并进行登录,每个玩家可以保存个人积分信息和游戏记录

2.游戏大厅页面:展示在线玩家的信息和进行玩家匹配的功能。

3.游戏房间页面:当两个积分相近的玩家匹配成功后,会进入游戏房间的页面,使用了WebSocket进行页面初始化,并发送请求和接收响应,前端发送落子请求,后端进行胜利逻辑判断并返回落子响应,实现实时对战。

三、自动化测试

a、首先创建一个Maven项目,引入selenium以及Junit5的依赖

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-suite</artifactId>
        <version>1.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.8.0</version>
    </dependency>
</dependencies>

b、创建驱动类

package common;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;

public class Utils {
    public static WebDriver driver;

    public static WebDriver createDriver()
    {
        if(driver == null)
        {
            WebDriverManager.edgedriver().setup();
            EdgeOptions options = new EdgeOptions();
            //允许访问所有的链接
            options.addArguments("--remote-allow-origins=*");

            driver = new EdgeDriver(options);

            //等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
        }
        return driver;
    }

    public Utils(String url)
    {
        //调用driver对象
        driver = createDriver();
        //访问url
        driver.get(url);
    }

    public void getScreenShot(String str) throws IOException {
        //屏幕截图
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");

        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());

        //./src/test/image/2024-07-17/test01-17453020.png
        String filename ="./src/test/image/"+ dirTime +"/" + str + "-" + fileTime+".png";
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //srcFile放到指定位置
        FileUtils.copyFile(srcFile,new File(filename));
    }
}

c、测试登录界面

package tests;

import common.Utils;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;

import java.io.File;
import java.io.IOException;

public class Login extends Utils {
    public static String url = "http://127.0.0.1:8080/login.html";
    public Login() {
        super(url);
    }

    /*
    检查页面是否加载成功
     */
    public void  loginPageRight() throws InterruptedException, IOException {
        //通过查看页面元素是否存在来检查页面加载成功与否
        driver.findElement(By.cssSelector("body > div.nav > a"));
        //登陆输入框
        //driver.findElement(By.cssSelector("body > div.login-container > form > div"));

    }

    //检查登录功能---成功登录
    public void LoginSuc() throws IOException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        //检查点击登陆之后是否登陆成功
        driver.findElement(By.cssSelector("#submit"));
        //页面标题来检查是否登陆成功
        String expect = driver.getTitle();
        assert expect.equals("游戏大厅");

        getScreenShot(getClass().getName());

        driver.navigate().back();
    }

    /*
    检查登录功能---登录失败
     */
    public void LoginFail() throws IOException {
//        //方法一:通过clear保证输入框没有文本
//        driver.findElement(By.cssSelector("#username")).clear();
//        driver.findElement(By.cssSelector("#password")).clear();

        //方法二:通过刷新保证输入框没有文本
        driver.navigate().refresh();

        driver.findElement(By.cssSelector("#username")).sendKeys("admin111");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();

        String res = driver.findElement(By.cssSelector("body")).getText();


        getScreenShot(getClass().getName());

        assert res.equals("用户名或密码错误!");
    }
}

d、测试注册界面

package tests;

import common.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;

import java.io.IOException;

public class Register extends Utils {
    public static String url = "http://127.0.0.1:8080/register.html";
    public Register(){
        super(url);
    }
    public void registerPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.nav > a"));
        String expect = "注册";
        String actual = driver.findElement(By.cssSelector("#submit")).getText();
        getScreenShot(getClass().getName());
        Assertions.assertEquals(expect, actual);
    }
    public void registerSuc() throws IOException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
        //检查点击登陆之后是否注册成功
        driver.findElement(By.cssSelector("#submit"));
        //页面标题来检查是否注册成功
        String expect = driver.getTitle();
        assert expect.equals("注册成功");

        getScreenShot(getClass().getName());

        driver.navigate().back();
    }

    /*
    检查注册功能---注册失败
     */
    public void registerFail() throws IOException {
        //通过刷新保证输入框没有文本
        driver.navigate().refresh();

        driver.findElement(By.cssSelector("#username")).sendKeys("admin111");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();

        String res = driver.findElement(By.cssSelector("body")).getText();


        getScreenShot(getClass().getName());

        assert res.equals("用户名或密码错误!");
    }

}

四、测试总结

趣味五子棋实时对战在功能方面表现良好,测试过程中发现的问题都已及时修复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值