当前位置: 首页 > news >正文

基于websocket的多用户网页五子棋 --- 测试报告

目录

  • 功能测试
  • 自动化测试
  • 性能测试

功能测试

在这里插入图片描述

1.登录注册页面
在这里插入图片描述
2.游戏大厅页面
在这里插入图片描述

3.游戏房间页面
在这里插入图片描述

自动化测试

1.使用脑图编写web自动化测试用例
在这里插入图片描述

2.创建自动化项目,根据用例通过selenium来实现脚本
根据脑图进行测试用例的编写:

  1. 每个页面一个测试类,然后再各个测试类中进行测试用例的编写。
  2. 注意公共属性需要单独放一个类,方便进行代码复用。
  3. 使用测试套件便于运行以及修改。
  4. 创建启动以及现场截图就是会频繁进行复用,所以单独创建一个类进行存储。
  5. 注意添加隐式等待,为了确保页面正确加载显示。

步骤一、初始化测试用例

#创建一个浏览器对象
import datetime
import os.path
import sys

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)
        self.driver.implicitly_wait(2)
    def getScreeShot(self):
        #创建屏幕截图
        #图片文件名称:./2024-09-24-173456.png
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否已经存在,若不存在则创建文件夹
        # ../images/2024-09-24
        if not os.path.exists("../images/"+dirname):
            os.mkdir("../images/"+dirname)
        #2024-09-24-173456.png
        #图片路径:../images/调用方法-2024-09-24/2024-09-24-173456.png
        #图片路径:../images/LoginSucTest-2024-09-24/2024-09-24-173456.png
        #图片路径:../images/LoginFailTest-2024-09-24/2024-09-24-173456.png
        filename = sys._getframe().f_back.f_code.co_name+"-"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
        self.driver.save_screenshot("../images/"+dirname+"/"+filename)

GBDriver = Driver()

步骤二、对登录注册页面的测试

import time

from selenium.webdriver.common.by import By

from common.Utils import GBDriver
#测试在线OJ系统登陆页面

class GBLogin:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://1.117.75.202:8080/login.html"
        self.driver = GBDriver.driver
        self.driver.get(self.url)
    #成功登陆的测试用例
    def LoginSucTest(self):
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #能够找到首页用户的昵称,说明登录成功,否则登录失败
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        #添加屏幕截图
        GBDriver.getScreeShot()
        #返回到登陆页面
        self.driver.back()

    #异常登陆的测试用例
    def LoginFailTest1(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")
        #错误的密码
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否登录失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"
    def LoginFailTest2(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        #错误的密码
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否登录失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"
        def LoginFailTest3(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")
        #错误的密码
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否登录失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"
        def LoginFailTest4(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        #错误的密码
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否登录失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"


	#成功注册的测试用例
    def RegisterSucTest(self):
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("lisi")
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #检查是否注册成功
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "注册成功!"

    #异常注册的测试用例
    def RegisterFailTest1(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

		#已存在的用户名
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否注册失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名已存在!"
    def RegisterFailTest2(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        #密码为空
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否注册失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"
        def LoginFailTest3(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")
        #密码为空
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否注册失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"
        def LoginFailTest4(self):
        #若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #检查是否注册失败
        actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
        #添加屏幕截图
        GBDriver.getScreeShot()
        #断言检测一下是否符合预期
        assert actual == "用户名或密码为空!"

login = GBLogin()
login.LoginSucTest()
login.LoginFailTest()

步骤三、对游戏大厅页面测试

from selenium.webdriver.common.by import By

from common.Utils import GBDriver
class GBHall:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://1.117.75.202:8080/game_hall.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
    #测试游戏大厅页面
    def HallTest(self):
        #测试游戏大厅页面是否正常显示,如果正常显示那么必有“游戏大厅”这一段标题
        actual = self.driver.title
        assert actual == "游戏大厅"
        #添加屏幕截图
        GBDriver.getScreeShot()
		
		#测试游戏大厅页面是否有玩家信息模块
		screen_element = self.driver.find_element(By.ID, "screen")
		#添加屏幕截图
        GBDriver.getScreeShot()
        
        #点击“开始匹配”按钮,检查是否有匹配成功或匹配失败
        self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div.match-button").click()
        # 设置隐式等待
        self.driver.implicitly_wait(5)
        #获取当前url
 		url = self.driver.current_url
        #比较期望url和当前的url
        assert url == "http://1.117.75.202:8080/game_hall.html"
        #添加屏幕截图
        GBDriver.getScreeShot()
     

步骤四、对游戏房间页面测试

from selenium.webdriver.common.by import By

from common.Utils import GBDriver
class GBRoom:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://1.117.75.202:8080/game_room.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
    #测试游戏房间页面
    def RoomTest(self):
        
        # 设置隐式等待
        self.driver.implicitly_wait(5)
        #测试游戏房间页面是否正常显示,如果正常显示那么必有“游戏房间”这一段标题
        actual = self.driver.title
        assert actual == "游戏房间"
        #添加屏幕截图
        GBDriver.getScreeShot()
		
		#测试游戏房间页面是否有玩家聊天区域
		screen_element = self.driver.find_element(By.ID, "body > div > div.chat_area")
		#添加屏幕截图
        GBDriver.getScreeShot()
        

性能测试

使用 jmeter 进行简单性能测试:针对用户管理、用户匹配、游戏对战功能进行简单的性能测试。
测试策略为并发梯度测试,每隔10s新增10个线程,最终达到100个线程并发访问。

  1. 对注册功能进行性能测试
  2. 对登录功能进行性能测试
  3. 对匹配功能进行性能测试
  4. 对对战功能进行性能测试

测试结果概述
在本次测试中,对系统的关键性能指标进行了全面评估,包括但不限于响应时间、吞吐量和错误率。测试覆盖了以下3个核心功能模块:用户管理、用户匹配、游戏对战功能。
(1)响应时间
总体表现:系统在大多数情况下响应时间较为稳定。用户登录、题目列表加载、具体题目查看、提交评测等操作在高并发场景下表现良好。
例外情况:注册功能在高并发场景下出现性能瓶颈,响应时间显著增加,部分请求达到 30,000ms 以上,影响用户体验。
(2)吞吐量
系统在高负载条件下表现出良好的吞吐能力,能够有效处理大量并发请求。尽管在某些时段出现小幅波动,但整体保持稳定。
(3)错误率
系统的错误率维持在 0%,没有出现服务不可用或关键功能故障的情况。

相关文章:

  • 小微企业友好方案:低成本智能客服系统如何落地
  • C# 基础知识总结(持续更新中...)
  • 数据仓库建模方法论:起源、发展与深度对比解析
  • ICLR 2025|香港浸会大学可信机器学习和推理课题组专场
  • 密码学基础-Hash、MAC、HMAC 的区别与联系
  • 计算机毕业设计SpringBoot+Vue.js个人博客系统(源码+文档+PPT+讲解)
  • react 19版中路由react-router-dom v7版的使用
  • 厦大第三发:《DeepSeek大模型及其企业应用实践》
  • 1.Big-endian/ little endian大端对齐、小端对齐
  • Camera相关配置
  • 带宽管理组网配置
  • Web Snapshot 网页截图 模块代码详解
  • 生活反思公园散步与小雨遇记
  • MoE 架构:专家齐聚,智启未来 —— 解锁传统稠密模型的瓶颈
  • MongoDB 查询语句详解:以 `db.fs.files.find().sort({ _id: -1 }).limit(10)` 为例
  • excel的宏是什么
  • AI 实战5 - pytorch框架实现face检测
  • 如何快速的用pdfjs建立一个网页可以在线阅读你的PDF文件
  • 自动驾驶---不依赖地图的大模型轨迹预测
  • 在 Spring Boot 中格式化 LocalDateTime
  • 哈马斯官员:若实现永久停火,可交出加沙地带控制权
  • 商务部回应稀土出口管制问题
  • 加强战略矿产出口全链条管控将重点开展哪些工作?商务部答问
  • 三亚通报救护车省外拉警报器开道旅游:违规违法,责令公司停业整顿
  • 受贿3501万余元,中石油原董事长王宜林一审被判13年
  • 王毅会见巴西外长维埃拉、总统首席特别顾问阿莫林