目录
- 功能测试
 - 自动化测试
 - 性能测试
 
功能测试

1.登录注册页面
 
 2.游戏大厅页面
 
3.游戏房间页面
 
自动化测试
1.使用脑图编写web自动化测试用例
 
2.创建自动化项目,根据用例通过selenium来实现脚本
 根据脑图进行测试用例的编写:
- 每个页面一个测试类,然后再各个测试类中进行测试用例的编写。
 - 注意公共属性需要单独放一个类,方便进行代码复用。
 - 使用测试套件便于运行以及修改。
 - 创建启动以及现场截图就是会频繁进行复用,所以单独创建一个类进行存储。
 - 注意添加隐式等待,为了确保页面正确加载显示。
 
步骤一、初始化测试用例
#创建一个浏览器对象
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个线程并发访问。
- 对注册功能进行性能测试
 - 对登录功能进行性能测试
 - 对匹配功能进行性能测试
 - 对对战功能进行性能测试
 
测试结果概述
 在本次测试中,对系统的关键性能指标进行了全面评估,包括但不限于响应时间、吞吐量和错误率。测试覆盖了以下3个核心功能模块:用户管理、用户匹配、游戏对战功能。
 (1)响应时间
 总体表现:系统在大多数情况下响应时间较为稳定。用户登录、题目列表加载、具体题目查看、提交评测等操作在高并发场景下表现良好。
 例外情况:注册功能在高并发场景下出现性能瓶颈,响应时间显著增加,部分请求达到 30,000ms 以上,影响用户体验。
 (2)吞吐量
 系统在高负载条件下表现出良好的吞吐能力,能够有效处理大量并发请求。尽管在某些时段出现小幅波动,但整体保持稳定。
 (3)错误率
 系统的错误率维持在 0%,没有出现服务不可用或关键功能故障的情况。



















