网页博弈测试报告

news2025/6/21 22:38:27

文章目录

  • 项目介绍
  • 项目测试用例
  • 自动化测试
    • 注册自动化测试
    • 登录自动化测试
      • 匹配测试
    • 性能测试
      • 编写脚本
      • 创建测试场景
      • 性能测试报告


项目介绍

该项目是一个网页对战的五子棋游戏,支持真人匹配对战和人机对战,支持多用户同时匹配进行五子棋对战,通过同的天梯积分匹配对战。
使用的主要的技术栈:Java、MySQL、SpringBoot、MyBatis、WebSocket

项目测试用例

在这里插入图片描述

自动化测试

功能测试用例来编写自动化测试,为了方便自动化测试关闭了验证码功能。

注册自动化测试

编写自动化代码,打开注册页面,使用断言检测是否正确打开,再进行错误注册和正确注册。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RegAutoTest {
    private static EdgeDriver driver;
    @BeforeAll
    public static void init() {
        driver = AutoTestUtil.getEdgeDriver();
        driver.get("http://127.0.0.1:8080/reg.html");
        driver.manage().window().maximize();
    }

    @Order(1)
    public static void check() {
        String key = driver.findElement(By.xpath("/html/body/div/div[2]/h1")).getText();
        Assertions.assertEquals("用户注册",key);
    }

    @Order(2)
    @ParameterizedTest
    @CsvSource(value = {"hhy,hhy,hhy","null,null,null","null,test,test","test,null,test","test,test,null"})
    public void failRegTest(String username,String password,String finalPass) throws InterruptedException {
        WebElement usernameElement = driver.findElement(By.xpath("//*[@id=\"username\"]"));
        WebElement passwordElement = driver.findElement(By.cssSelector("#password"));
        WebElement finalPassElement = driver.findElement(By.cssSelector("#confirmPassword"));

        if (!"null".equals(username)) {
            usernameElement.sendKeys(username);
        }
        if (!"null".equals(password)) {
            passwordElement.sendKeys(password);
        }
        if (!"null".equals(finalPass)) {
            finalPassElement.sendKeys(finalPass);
        }
        driver.findElement(By.xpath("/html/body/div/div[2]/div/div[5]/input")).click();
        // 显示等待弹窗
        Thread.sleep(800);
        driver.switchTo().alert().accept();
        // 清空输入数据
        usernameElement.clear();
        passwordElement.clear();
        finalPassElement.clear();
    }
    @Order(3)
    @ParameterizedTest
    @CsvSource(value = {"test,test,test"})
    public void successRegTest(String username,String password,String finalPass) throws InterruptedException {
        WebElement usernameElement = driver.findElement(By.xpath("//*[@id=\"username\"]"));
        WebElement passwordElement = driver.findElement(By.cssSelector("#password"));
        WebElement finalPassElement = driver.findElement(By.cssSelector("#confirmPassword"));

        usernameElement.sendKeys(username);
        passwordElement.sendKeys(password);
        finalPassElement.sendKeys(finalPass);
        driver.findElement(By.xpath("/html/body/div/div[2]/div/div[5]/input")).click();
        // 显示等待弹窗
        Thread.sleep(800);
        driver.switchTo().alert().accept();
    }

    @AfterAll
    public static void quit() {
        driver.quit();
    }
}

执行自动化代码:
在这里插入图片描述

登录自动化测试

编写登录测试自动化代码,和注册自动化测试类似,进行错误登录和正确登录测试用例编写自动化代码,正确登录后通过断言检测匹配按钮是否存在。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginAutoTest {
    private static EdgeDriver driver;

    @BeforeAll
    public static void init() {
        driver = AutoTestUtil.getEdgeDriver();
        driver.get("http://127.0.0.1:8080/login.html");
        driver.manage().window().maximize();
    }
    @Order(1)
    @Test
    public void check() {
        String key = driver.findElement(By.xpath("/html/body/div/div[2]/h1")).getText();
        Assertions.assertEquals("网页对战五子棋",key);
    }

    @Order(2)
    @ParameterizedTest
    @CsvSource(value = {"null,null","test,null","null,test","test,1234"})
    public void failLoginAutoTest(String username,String password) throws InterruptedException {
        WebElement usernameElement = driver.findElement(By.xpath("//*[@id=\"username\"]"));
        WebElement passwordElement = driver.findElement(By.xpath("//*[@id=\"password\"]"));
        if (!"null".equals(username)) {
            usernameElement.sendKeys(username);
        }
        if (!"null".equals(password)) {
            passwordElement.sendKeys(password);
        }
        driver.findElement(By.xpath("/html/body/div/div[2]/div[1]/div[4]/input")).click();
        Thread.sleep(650);
        driver.switchTo().alert().accept();
        usernameElement.clear();
        passwordElement.clear();
    }
    @Order(3)
    @ParameterizedTest
    @CsvSource(value = {"test,test"})
    public void successLoginAutoTest(String username,String password) throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("/html/body/div/div[2]/div[1]/div[4]/input")).click();
        Thread.sleep(800);
    }

    @AfterAll
    public static void quit() {
        driver.quit();
    }
}

测试用例全部通过:
在这里插入图片描述

自动化演示:

在这里插入图片描述

匹配测试

使用浏览器打开两个窗口进行测试,模拟两个用户进行登录后进行匹配。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MatchAutoTest {
    private static EdgeDriver driver;
    private static EdgeDriver edgeDriverNoTraceWindow;
    @BeforeAll
    public static   void init() throws InterruptedException {
        driver = AutoTestUtil.getEdgeDriver();
        edgeDriverNoTraceWindow = AutoTestUtil.getEdgeDriverNoTraceWindow();
        driver.get("http://127.0.0.1:8080/login.html");
        edgeDriverNoTraceWindow.get("http://127.0.0.1:8080/login.html");
        Thread.sleep(1000);
    }

    @Test
    @Order(1)
    public void login() throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("hhy");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("hhy");
        edgeDriverNoTraceWindow.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("root");
        edgeDriverNoTraceWindow.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("root");

        driver.findElement(By.cssSelector("body > div > div.right > div.userInfo > div:nth-child(4) > input")).click();
        edgeDriverNoTraceWindow.findElement(By.cssSelector("body > div > div.right > div.userInfo > div:nth-child(4) > input")).click();
        Thread.sleep(1000);
    }


    @Order(2)
    @Test
    public void match() throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"match\"]")).click();
        Thread.sleep(1500);
        edgeDriverNoTraceWindow.findElement(By.xpath("//*[@id=\"match\"]")).click();
    }


}

自动化演示:

在这里插入图片描述

性能测试

使用LR对项目进行一个简单的性能测试,模拟多个用户同时进行登录。

编写脚本

Action()
{
	
	//开启进入登录页事务
	lr_start_transaction("login_index");
    /* 注册获取返回参数,该方法可以配合打印返回数据,检测数据内容 */
	web_reg_save_param("ParaResult",
					   "LB=",
					   "RB=",
					   LAST);
    // 定时检查点,检测登录页面是否正确打开
    web_reg_find("Text=网页对战五子棋",LAST);
    // 定义虚拟用户结合点
    lr_rendezvous("start");
    // 进入登录页面
	web_url("login_html",
		"URL=http://127.0.0.1:8080/login.html",
		"TargetFrame=",
		"Resource=0",
		"Referer=",
		LAST);
    // 结束进入登录页事务
	lr_end_transaction("login_index", LR_AUTO);
	//定时检测是否成功进入游戏大厅
	//开启登录事务
	lr_start_transaction("login");
    // 进行登录
	web_submit_data("login",
		"Action=http://127.0.0.1:8080/user/login",
		"Method=POST",
		"EncType=application/x-www-form-urlencoded; charset=UTF-8",
		"TargetFrame=",
		"Referer=",
		"Mode=HTTP",
		ITEMDATA,
		"Name=username", "Value={username}", ENDITEM,
		"Name=password", "Value={password}", ENDITEM,
		LAST);
    // 结束登录事务
	lr_end_transaction("login", LR_AUTO);
    


	return 0;
}

设置多参数模拟多个用户
在这里插入图片描述

创建测试场景

设置10个虚拟用户
在这里插入图片描述

在这里插入图片描述
执行脚本

在这里插入图片描述

性能测试报告

在这里插入图片描述
平均值和标准方差
在这里插入图片描述

运行的虚拟用户图表
在这里插入图片描述
点击率表
在这里插入图片描述
吞吐量表

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086578.html

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

相关文章

mysql数据库 windows迁移至linux

1.打开navicat,选择一个数据库进行操作: 之后文件会保存为一个xxx.sql文件,之后打开xftp,把生成的sql放进一个文件夹中(/home/dell/linuxmysql): 之后登录mysql数据库,并创建一个新的数据库,然后…

Pytorch之ConvNeXt图像分类

文章目录 前言一、ConvNeXt设计决策1.设计方案2.Training Techniques3.Macro Design🥇Changing stage compute ratio🥈Change stem to "Patchify" 4.ResNeXt-ify5. Inverted Bottleneck6.Large Kernel Size7.Micro Design✨Replacing ReLU wit…

论文阅读:Fast-BEV: Towards Real-time On-vehicleBird’s-Eye View Perception

Abstract 现有的BEV解决方案要么需要大量的资源执行车载推理,要么效果一般。Fast-BEV包含五部分: 1)一个轻量化部署友好的视角转换方式,可以快速将2D图像特征转到3D体素空间。 2)一个多尺度图像编码器利用多尺度特征。…

Mac/Wins Matlab如何查看APPs源码

查看Apps方法一样,点击HOME-preferences-MATLAB-Apps查看你的Apps安装路径。 你的Apps文件就安装在该目录下,直接进入这个目录就可以看到你自己写的APPs文件,

Fastjson历史版本记录

1.2.24 TemplatesImpl,利用条件苛刻,需要开启Feature.SupportNonPublicField {"type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes": ["yv66vgAAADQA...CJAAk"],"_name…

光通路数据单元(ODU),ODUk,同步传送模块(STM),虚容器(VC)等级

文章目录 ODUk同步传送模块,STM虚容器,VC时隙 光通路 数据 单元(ODU,Optical channel data unit) 提供与信号无关的连通性,连接保护和监控等功能,这一层也叫数据通道层。 ODUk,k值越大,帧周期越…

SpringBootCms

SpringBootCMS,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码,让您轻松打造自己的独立网站&#xff…

spark读取hive表字段,区分大小写问题

背景 spark任务读取hive表,查询字段为小写,但Hive表字段为大写,无法读取数据 问题错误: 如何解决呢? In version 2.3 and earlier, when reading from a Parquet data source table, Spark always returns null for any column …

高防CDN:网络安全的锁与钥匙

深度解析高防CDN原理 高防CDN,一门整合防护与分发功能的互联网安全技术,以卓越之姿应对DDoS攻击等网络威胁,巧妙地辨识和过滤访问源地址,以保障用户畅通访问和服务的稳定。其核心原理包括: 流量清洗: 高防C…

mysql数据库语法改造成dm数据库DATE_SUB

给了一个任务就是把一个项目用dm数据库正常跑起来,真的难呀,项目原本是使用的mysql、 问题寻找 dm数据库保存,我看mysql跑的挺好的,然后开始找原因。 其中还没有看懂这两个函数,特意搜了搜 LAST_DAY 取最后一天 DATE_…

社区投稿| 以安全视角,深度剖析 Sui Staking 与 LSD

本篇技术研报由 MoveBit 研究团队的 Jason 撰写 #1 Sui Staking 介绍 1.1 Sui 网络概述 Sui 网络由一组独立的验证者运行,每个验证者在自己的机器或集群上运行独立的 Sui 软件实例。 Sui 采用委托权益证明(DPoS)来确定哪些验证者参与网络…

Bootstrap的下拉菜单组件相关知识

Bootstrap的下拉菜单组件依赖于第三方popper.js插件实现,popper.js插件提供了动态定位和浏览器窗口大小监测,所以在使用下拉菜单时确保引入了popper.js文件,并且要放在引用Bootstrap.js文件之前前。 目录 01-下拉菜单基本结构02-分裂式下拉菜…

世和基因NGS大Panel IVD产品获批上市

近日,国家药品监督管理局(NMPA)通过创新医疗器械特别审批,批准世和基因旗下南京世和医疗器械有限公司的非小细胞肺癌组织TMB检测试剂盒(可逆末端终止测序法)(国械注准20233401452)上…

验收测试的关键步骤您知道吗

验收测试是软件开发生命周期中的重要环节,用于验证项目交付是否符合用户需求和质量标准。本文将介绍验收测试的定义及实施验收测试的关键步骤。 一、验收测试的定义和目标 确保项目交付质量:通过主动验证和评估软件系统的功能、性能和质量,确…

JS调试技巧

插桩导出全局变量 在代码段中导出运行 1.先找到需要的调试的函数 2.删除逗号给后面的变量加VAR 3.用个window.变量去接收需要的函数,让他变成全局变量 4.直接执行 window.wang.md5(123123213123) eval,AA,OO,JJ导出混淆参数 重写evel…

虚拟机独立 IP 配置

虚拟机独立 IP 配置 1. 点击虚拟网络编辑器 2. 点击更改设置 3. 查看本地电脑网卡型号并设置虚拟网络编辑器桥接网卡为同型号网卡 4. 设置有限网络信息 5. 点击网络编辑按钮并点击身份 6. 编辑名称并选择MAC地址 7. 配置 IPv4 地址后点击应用即可

2021上海市赛【10.10训练补题】

Dashboard - The 2021 Shanghai Collegiate Programming Contest - Codeforces 参考题解:2021CCPC上海省赛题解ABCDEGHIJK_2021ccpc上海题解_Hytidel的博客 A. 小 A 的点面论(数学几何) 题解:求平面的法向量(外积法…

sshpass传输文件提示Host key verification failed.

1. sshpass功能简述 sshpass指令可用于A服务器向B服务器传输文件或执行某些指令。 2. 传输文件指令 基本传输命令:sshpass -p 远程服务器登录密码 scp 本地路径文件 远程服务器登录用户名远程服务器IP地址:远程服务器文件保存路径 示例: sshpass -p 1…

HVV行动是什么?网络安全的重要布局!

1 什么是HVV行动 “HVV行动” 是国家应对网络安全问题所做的重要布局之一,是由政府统一组织的"网络安全实战攻防演习,通过与进攻方的对抗,企事业单位网络、系统以及设备等的安全能力会大大提高。 2 发展 “HVV行动”从2016年开始&#…

基于R和gephi做宏基因组与代谢组等多组学联合network相关性网络图

写在前面 拿到多组学的数据后一直在找合适的方法将二者进行关联,比如我这里是三种体液的代谢组与一种体液的宏基因组。需求是对多组学进行关联分析,直到最近看到不少文章里利用Gephi将相关性表格进行可视化的图,效果还不错,于是写…