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

网络五子棋对战游戏测试报告

1. 项目背景

本次测试的对象为网络五子棋对战游戏项目(线上地址:http://106.53.219.176:8085,项目源码:网络五子棋对战项目),该项目支持用户注册、登录、游戏大厅交互(用户信息查看、匹配对战)等核心功能,面向普通玩家提供在线五子棋对战服务。本次测试旨在通过功能验证、自动化执行等手段,确保游戏核心模块(注册、登录、游戏大厅)界面以及功能正确性、稳定性。

2. 测试范围

2.1 功能测试范围

模块覆盖功能点
注册模块1. 新用户成功注册(唯一用户名);2. 重复用户名注册失败;3. 空用户名 / 空密码注册失败;4. 注册页面元素显示正确性
登录模块1. 正确账号密码登录成功;2. 错误账号 / 密码登录失败;3. 空账号 / 空密码登录失败;4. 登录后弹窗处理;5. 登录页面标题显示正确性
游戏大厅模块1. 未登录进入大厅的警告弹窗处理;2. 登录后用户信息(积分、比赛场次)显示正确性;3. 匹配按钮功能(开始匹配 / 停止匹配);4. 大厅页面元素显示正确性
对战房间模块1.棋盘显示正常;2.聊天界面显示正常;3.双方进入对战后,一方下棋时另一方不能下棋;4.双方能自由聊天;5.一方五子连珠时游戏正常结束;6.聊天敏感词汇(“菜鸡”)不允许发送

2.2 非功能测试范围

测试类型覆盖场景
稳定性测试1. 连续多次登录 / 注册操作无崩溃;2. 匹配按钮反复点击(开始 / 停止)功能正常;3. 页面跳转(登录→大厅)无卡死
弱网测试1. 弱网环境下(网络延迟 500ms+)注册 / 登录的弹窗响应是否正常;2. 弱网下用户信息加载是否正常
兼容性测试1. Chrome 浏览器(141.0.7390.76版本)下功能正常;2.不同浏览器(QQ浏览器、Edge浏览器)下页面是否异常

3. 需求分析

3.1 功能需求

模块功能需求描述优先级
注册模块1. 用户名需唯一,重复用户名提示 “用户名已被占用”;2. 用户名 / 密码不能为空,空值提示 “请输入用户名 / 密码”;3. 注册成功提示 “注册用户成功” 并跳转
登录模块1. 正确账号密码登录后弹出 “登录成功”“连接大厅成功” 弹窗;2. 错误凭证登录提示 “账号或密码错误”;3. 登录后支持返回登录页重新登录
游戏大厅模块1. 未登录进入大厅弹出警告弹窗;2. 登录后显示当前用户积分、比赛场次;3. 点击 “开始匹配” 切换为 “匹配中… 点击按钮停止匹配!”,再次点击恢复初始状态
对战房间模块1.直接连接对战房间网页无响应;2.双方游戏中一方退出游戏判另一方直接获胜;3.其中一方下棋时另一方不能下棋;4.可自由聊天且不能包含敏感词(“菜鸡”);5.一方五子连珠后,可正常退出房间且游戏场次获胜场次增加正确

3.2 非功能需求

需求类型需求描述优先级
稳定性单会话内连续执行 10 次登录 / 注册操作,无 “无效会话”“元素未找到” 异常
弱网容错弱网下操作超时(如登录等待 10s+)时,需有明确提示(而非直接崩溃)
页面兼容性核心元素(输入框、按钮)在 Chrome 141.0.7390.76版本版本中可正常点击 / 输入,在不同浏览器下界面显示要求正常

4. 测试设计

4.1 功能测试:测试用例设计

4.1.1 注册模块功能用例
用例 ID用例名称前置条件测试步骤预期结果实际结果测试状态
REG-001新用户成功注册用户名未被占用1. 进入注册页;2. 输入新用户名(自动生成年/月/日+时间);3. 输入密码(自动生成年/月/日+时间);4. 点击 “注册”1. 弹出 “注册用户成功” 弹窗;2. 关闭弹窗后可返回登录页注册成功已执行
REG-002重复用户名注册用户名已存在1. 进入注册页;2. 输入 lqf123;3. 输入任意密码;4. 点击 “注册”弹出 “用户名已被占用” 弹窗注册失败已执行
REG-003空用户名注册1. 进入注册页;2. 用户名留空;3. 输入密码;4. 点击 “注册”弹出 “请输入用户名 / 密码” 弹窗注册失败已执行
REG-004注册页面标题验证进入注册页1. 进入注册页;2. 查看页面标题 “网络五子棋对战游戏” 和 “注册” 文本(自动化测试)1. 标题 “网络五子棋对战游戏” 存在且正确;2. “注册” 文本存在且正确注册页面界面测试正常已执行
4.1.2 登录模块功能用例
用例 ID用例名称前置条件测试步骤预期结果实际结果测试状态
LOG-001正确账号密码登录账号 lqf123 / 密码 123456 有效1. 进入登录页;2. 输入 lqf123 和 123456;3. 点击 “登录”(自动化测试)1. 弹出 “登录成功” 弹窗;2. 关闭后弹出 “连接大厅成功” 弹窗;3. 进入大厅登录成功已执行
LOG-002正确账号 + 错误密码登录账号 lqf123 有效1. 进入登录页;2. 账号输入 lqf123 和 密码输入456789(错误密码);3. 点击 “登录”弹出 “账号或密码错误” 弹窗登录失败已执行
LOG-003空密码登录账号 lqf123 有效1. 进入登录页;2. 输入 lqf123;3. 密码留空;4. 点击 “登录”弹出 “请输入用户名 / 密码” 弹窗登录失败已执行
LOG-004登录后返回登录页登录成功进入大厅1. 登录成功后;2. 点击浏览器 “返回” 按钮返回到登录页,且输入框为空正常返回登录大厅已执行
4.1.3 游戏大厅模块功能用例
用例 ID用例名称前置条件测试步骤预期结果实际结果测试状态
HALL-001未登录进入大厅未登录状态1. 直接访问大厅页;2. 查看弹窗弹出警告弹窗,点击确认后返回登录大厅正常弹出弹窗,点击后回到登录界面已执行
HALL-002登录后用户信息验证登录账号 lqf1231. 登录成功进入大厅;2. 查看 “用户:lqf123 积分:1040” 和 “比赛场次:10 获胜场次:6”文本显示正确,无缺失或错误文本显示正确,无缺失或错误已执行
HALL-003匹配按钮功能验证登录进入大厅1. 点击 “开始匹配”;2. 查看按钮文本;3. 再次点击按钮1. 首次点击后文本变为 “匹配中… 点击按钮停止匹配!”;2. 再次点击恢复 “开始匹配”与预期相符已执行
4.1.4 对战房间模块功能用例
用例 ID用例名称前置条件测试步骤预期结果实际结果测试状态
ROOM-001对战房间显示正常双方匹配成功1.登录两个同分段账号进行匹配;2.匹配进入房间后查看棋盘、聊天界面时候正常显示棋盘、聊天界面时候正常显示棋盘、聊天界面时候正常显示已执行
ROOM-002对战时一方退出双方在对战房间中1.登录两个同分段账号进行匹配;2.匹配进入房间后一方直接退出游戏;3.查看另一方是否直接获胜另一方直接获胜且能正常退出到大厅另一方直接获胜且能正常退出到大厅已执行
ROOM-003对战判胜验证双方在对战房间中1.登录两个同分段账号进行匹配;2.匹配进入房间后一方五子相连;3.查看游戏是否结束且该方是否胜利五子优先相连一方胜利且能正常退出到大厅五子优先相连一方胜利且能正常退出到大厅已执行
ROOM-004聊天功能验证双方在对战房间中1.登录两个同分段账号进行匹配;2.匹配进入房间分别在聊天界面发送消息(“你好”)能发送消息且对方能看见能发送消息且对方能看见已执行
ROOM-005聊天敏感词验证双方在对战房间中1.登录两个同分段账号进行匹配;2.匹配进入房间分别在聊天界面发送敏感词(“菜鸡”)提示敏感词无法发送且对方看不到该消息提示敏感词无法发送且对方看不到该消息已执行

4.2 自动化测试:测试用例设计与代码

4.2.1 自动化测试用例
自动化用例 ID对应功能用例 ID用例名称自动化步骤概述
AUTO-REG-001REG-001新用户成功注册自动化1. 初始化注册页;2. 生成时间戳用户名和密码;3. 输入并注册;4. 断言弹窗文本;5. 截图留存
AUTO-REG-002REG-002重复用户名注册1. 初始化注册页;2. 输入已注册用户用户名;3. 输入不同密码并点击注册;4. 断言弹窗文本;5. 截图留存
AUTO-REG-003REG-003空用户名注册1. 初始化注册页;2. 用户名留空;3. 生成时间戳密码;4. 断言弹窗文本;5. 截图留存
AUTO-REG-004REG-004注册页面标题验证1. 进入注册页;2.验证页面文字是否与设计相同;3.打印结果
AUTO-LOG-001LOG-001正确账号登录自动化1. 初始化登录页;2. 输入 lqf123/123456;3. 处理两次弹窗;4. 断言是否进入大厅
AUTO-LOG-002LOG-002正确账号 + 错误密码登录1. 初始化登录页;2. 输入 lqf123/456789;3. 处理两次弹窗;4. 断言是否进入大厅
AUTO-LOG-003LOG-003空密码登录1. 初始化登录页;2. 输入 lqf123;3. 处理两次弹窗;4. 断言是否进入大厅
AUTO-HALL-002HALL-002大厅用户信息验证自动化1. 登录后进入大厅;2. 获取用户信息文本;3. 断言文本与预期一致
AUTO-HALL-003HALL-003匹配按钮功能自动化1. 登录后进入大厅;2. 点击匹配按钮;3. 断言文本切换;4. 再次点击断言恢复
4.2.2 自动化测试代码
4.2.2.1 公共工具类(commen/Utils.py)
import datetime
import os.path
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerclass 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):dirname = datetime.datetime.now().strftime("%Y-%m-%d")if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)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)gobang_driver = Driver()
4.2.2.2 register.py
import datetime
import timefrom selenium.webdriver.common.by import By
from common.Utils import gobang_driverclass gobang_register:url = ""driver = ""def __init__(self):self.url = "http://106.53.219.176:8085/register.html"self.driver = gobang_driver.driverself.driver.get(self.url)# 网页页面测试def web_page_test(self):# 标题if self.driver.find_element(By.CSS_SELECTOR, "body > div.nav"):print("(注册界面)游戏标题存在")else:print("(注册界面)游戏标题不存在")if self.driver.find_element(By.CSS_SELECTOR, "body > div.nav").text == "网络五子棋对战游戏":print("(注册界面)游戏标题正确")else:print("(注册界面)游戏标题错误")# 注册界面页面测试if self.driver.find_element(By.CSS_SELECTOR, "body > div.login-container > div > h3"):print("(注册界面)注册标题存在")else:print("(注册界面)注册标题不存在")if self.driver.find_element(By.CSS_SELECTOR, "body > div.login-container > div > h3").text == "注册":print("(注册界面)'注册(txt)'标题正确")else:print("(注册界面)'注册(txt)'标题错误")if self.driver.find_element(By.CSS_SELECTOR, "body > div.login-container > div > div:nth-child(2) > span"):print("(注册界面)'用户名(txt)'存在")else:print("(注册界面)'用户名(txt)'不存在")if self.driver.find_element(By.CSS_SELECTOR, "body > div.login-container > div > div:nth-child(2) > span").text == "用户名":print("(注册界面)'用户名(txt)'正确")else:print("(注册界面)'用户名(txt)'错误")if self.driver.find_element(By.CSS_SELECTOR, "body > div.login-container > div > div:nth-child(3) > span"):print("注册界面)'密码(txt)'存在")else:print("(注册界面)'密码(txt)'不存在")if self.driver.find_element(By.CSS_SELECTOR, "body > div.login-container > div > div:nth-child(3) > span").text == "密码":print("注册界面)'密码(txt)'正确")else:print("(注册界面)'密码(txt)'错误")# 功能测试(能成功注册)def register_suc_test(self):self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()user_name = datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")password = datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys(user_name)self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertif alert.text == "注册用户成功":print("注册成功")alert.accept()else:print("注册失败")alert.accept()self.driver.back()# 功能测试(不能成功注册)def register_fal_test(self):self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# 已存在账号self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()# 未输入账号self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()password = datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()# 未输入密码self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()user_name = datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys(user_name)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()#register = gobang_register()
#register.register_suc_test()
#register.register_fal_test()
#register.web_page_test()
4.2.2.3 login.py
import time
from selenium.webdriver.common.by import Byfrom common.Utils import gobang_driverclass gobang_login:url = ""driver = ""def __init__(self):self.url = "http://106.53.219.176:8085/login.html"self.driver = gobang_driver.driverself.driver.get(self.url)# 成功登录的测试用例def login_suc_test(self):self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)gobang_driver.getScreeShot()self.driver.back()time.sleep(3)self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf456")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)gobang_driver.getScreeShot()self.driver.back()print("登陆成功测试完毕")# 登录失败测试用例def login_fal_test(self):# 正确账号+错误密码 1self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("456789")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(正确账号+错误密码 1)完毕")# 正确账号+错误密码 2self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf456")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(正确账号+错误密码 2)完毕")# 错误账号+正确密码 1self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf321")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(错误账号+正确密码 1)完毕")# 错误账号+正确密码 2self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(错误账号+正确密码 2)完毕")# 错误账号+错误密码 1self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(错误账号+错误密码 1)完毕")# 错误账号+错误密码 2self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("lqf456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(错误账号+错误密码 2)完毕")# 未输入账号self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(未输入账号)完毕")# 未输入密码self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(未输入密码)完毕")# 未输入账号和密码self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)print("登陆失败测试(未输入账号和密码)完毕")def exist_title(self):if self.driver.find_element(By.CSS_SELECTOR, "body > div.nav"):print("标题存在")else:print("标题不存在")txt = self.driver.find_element(By.CSS_SELECTOR, "body > div.nav").textif txt == "网络五子棋对战游戏":print("标题正确")else:print("标题错误")#login = gobang_login()
#login.exist_title()
#login.login_suc_test()
#login.login_fal_test()
4.2.2.4 game_hall.py
import time
from selenium.webdriver.common.by import Byfrom common.Utils import gobang_driverclass gobang_game_hall:url = ""driver = ""def __init__(self):self.url = "http://106.53.219.176:8085/game_hall.html"self.driver = gobang_driver.driverself.driver.get(self.url)# 直接进入(未登录状态)def none_login(self):# 警告弹窗time.sleep(3)alert = self.driver.switch_to.alertif alert:print(alert.text)alert.accept()else:print("未出现弹窗,请检查问题")# 登录后进入def has_login(self):self.none_login()self.driver.find_element(By.CSS_SELECTOR, "#user_name").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#user_name").send_keys("lqf123")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)alert = self.driver.switch_to.alertalert.accept()time.sleep(3)# 页面测试# 获取整个p元素的文本p_text = self.driver.find_element(By.XPATH, '//*[@id="screen"]/p').text# 按换行分割文本(假设两行文本用换行分隔)lines = p_text.split('\n')# 检查第一行文本if len(lines) >= 1 and lines[0] == "用户:lqf123 积分:1040":print("(game_hall)用户 积分txt正确")else:print("(game_hall)用户 积分txt错误")# 检查第二行文本if len(lines) >= 2 and lines[1] == "比赛场次:10 获胜场次:6":print("(game_hall)比赛场次 获胜场次txt正确")else:print("(game_hall)比赛场次 获胜场次txt错误")if self.driver.find_element(By.CSS_SELECTOR, "#match-button"):print("(game_hall)匹配按钮存在")else:print("(game_hall)匹配按钮不存在")if self.driver.find_element(By.CSS_SELECTOR, "#match-button").text == "开始匹配":print("(game_hall)匹配按钮文字正确")else:print("(game_hall)匹配按钮文字错误")time.sleep(3)self.driver.find_element(By.CSS_SELECTOR, "#match-button").click()time.sleep(3)if self.driver.find_element(By.CSS_SELECTOR, "#match-button").text == "匹配中....点击按钮停止匹配!":print("(game_hall)匹配中按钮文字正确")else:print("(game_hall)匹配中按钮文字错误")time.sleep(3)self.driver.find_element(By.CSS_SELECTOR, "#match-button").click()#game_hall = gobang_game_hall()
#game_hall.none_login()
#game_hall.has_login()
#gobang_driver.driver.close()
4.2.2.5 执行代码
from gobang import register
from gobang import login
from gobang import game_hall
from common.Utils import gobang_driverif __name__ == "__main__":register.gobang_register().register_fal_test()register.gobang_register().register_suc_test()register.gobang_register().web_page_test()login.gobang_login().exist_title()login.gobang_login().login_suc_test()login.gobang_login().login_fal_test()#game_hall.gobang_game_hall().none_login()game_hall.gobang_game_hall().has_login()gobang_driver.driver.quit()

5.自动化测试核心介绍

5.1、核心架构

三段脚本(login.py/register.py/game_hall.py)采用统一模式:类初始化(驱动+URL+页面跳转)→ 业务场景测试(成功/失败)→ 结果输出(日志+截图)

5.2、各模块核心点

5.2.1 登录模块(login.py
  1. 场景全覆盖:成功场景(2 个有效账号登录 + 双重弹窗处理 + 截图);失败场景(9 种,含错误凭证、空值提交);
  2. 状态重置:每次输入前用clear()清空输入框,避免残留文本干扰;
  3. UI 验证:检查标题元素(body > div.nav)存在性与文本正确性。
5.2.2 注册模块(register.py
  1. 动态数据:用时间戳生成唯一用户名 / 密码,解决重复注册问题;
  2. 元素校验:按层级验证标题、“用户名 / 密码” 文本提示等 UI 完整性;
  3. 结果断言:通过弹窗文本(“注册用户成功”)判断注册结果,而非仅关闭弹窗。
5.2.3 游戏大厅模块(game_hall.py
  1. 双态验证:未登录(处理警告弹窗)、登录后(串联登录流程)场景;
  2. 信息精准校验:拆分用户信息文本(积分 / 比赛场次),按行匹配;
  3. 交互验证:完整测试匹配按钮状态切换(开始→匹配中→停止)。

三、通用核心技术

  1. 元素定位:以 CSS 选择器为主(高效稳定),复杂元素用 XPath;
  2. 弹窗处理:适配多弹窗场景(如登录双重弹窗),time.sleep()等待 +accept()关闭;
  3. 依赖复用:统一调用gobang_driver驱动,支持跨模块流程串联。

6.bug管理

6.1 空值注册bug

6.1.1 bug描述

​ 在用户注册时,用户名为空时输入密码注册成功(正常应注册失败)

6.1.2 触发bug步骤

​ 1.打开Edge浏览器(版本 141.0.3537.71 (正式版本) (64 位));

​ 2.输入注册页面网址(http://106.53.219.176:8085/register.html)并进入;

​ 3.用户名为空,输入密码123456,点击注册;

​ 4.显示注册成功

6.1.3 解决方法

​ 排查后端代码判断用户名为空操作是否仅判断了用户名为空而没有判断是否为空字符串,前端同步增加非空校验

7.总结

本次测试围绕网络五子棋对战游戏的注册、登录、游戏大厅、对战房间四大核心模块展开,覆盖功能验证、非功能验证及自动化执行,全面评估游戏核心业务流程的正确性与稳定性,现将测试结果总结如下:

7.1 测试覆盖范围与用例执行情况

7.1.1 功能模块覆盖

本次测试完整覆盖游戏核心业务模块,具体包括:

注册模块:新用户注册、重复用户名拦截、空值提交校验、页面 UI 元素验证;

登录模块:正确凭证登录、错误凭证拦截(错误账号 / 密码)、空值提交校验、登录后状态重置;

游戏大厅模块:未登录访问拦截、登录后用户信息(积分 / 场次)展示、匹配按钮交互;

对战房间模块:房间界面(棋盘 / 聊天区)展示、对战规则(轮流下棋 / 退出判负 / 五子连珠判胜)、聊天敏感词过滤。

7.1.2 测试用例执行统计

本次测试共设计 16 条功能测试用例,涵盖成功场景与失败场景,全部执行完毕,具体分布如下:

模块用例数量执行状态成功用例数失败用例数(关联 Bug)
注册模块4全部执行31
登录模块4全部执行40
游戏大厅模块3全部执行30
对战房间模块5全部执行50
合计16全部执行151

7.2 Bug 统计与处理情况

本次测试共发现 1 个功能类 Bug,无非功能类(稳定性 / 弱网 / 兼容性)Bug,具体信息如下:

Bug IDBug 类型涉及模块严重程度描述处理建议
BUG-001功能缺陷注册模块一般用户名为空、仅输入密码时,点击 “注册” 可成功注册,未触发空用户名拦截校验排查后端注册接口逻辑,补充 “用户名不可为空字符串” 的判断,前端同步增加非空校验

7.3 测试结论

  1. 功能正确性:游戏核心模块(登录、游戏大厅、对战房间)功能正常,15 条用例执行通过,占比 93.75%;仅注册模块存在 “空用户名注册” 的功能漏洞,修复后可保障注册流程的合法性;
  2. 自动化有效性:自动化脚本(login.py/register.py/game_hall.py)可稳定覆盖注册、登录、大厅的核心场景,支持自动生成测试数据(时间戳用户名)、留存截图日志,可替代人工重复执行,提升测试效率;
  3. 非功能达标性:在 Chrome 141.0.7390.76、Edge 141.0.3537.71 等浏览器下页面显示正常,连续 10 次登录 / 注册无崩溃,弱网(延迟 500ms+)下弹窗响应与信息加载正常,满足非功能需求。
http://www.dtcms.com/a/474206.html

相关文章:

  • html做网站的原则自建站排名
  • 互联网彩票网站开发珠海seo关键词排名
  • springboot095交通事故档案管理系统lgl(源码+部署说明+演示视频+源码介绍+lw)
  • 新郑郑州网站建设铭讯网站建设
  • 在next项目中使用iconfont图标方法
  • 重新定义AI编程协作:深入解析Claude Code多智能体系统架
  • 深入解析如何高效处理PDF?
  • uniapp运行微信小程序uni为什么是undefined
  • 2100AI智能生活(下)
  • 什么是后端开发-常见问题
  • 产品做优化好还是超级网站好WordPress来应力
  • wordpress 慢2017郴州网站seo优化
  • 05_零基础搭建AI智能体开发环境:全网开源资源完全指南
  • UDSONIP学习
  • 照片网站cmswordpress 做问卷
  • 除了crontab,如何实现自动化MySQL备份?
  • 积分器电路(波形转换电路)
  • 免费远程新标杆:UU远程对比ToDesk、向日葵,个人体验更优
  • 做视频网站的服务器深圳福田地址随便来一个
  • Git介绍和使用
  • LeetCode经典算法题解详解
  • Java基于SpringBoot的农场管理系统小程序【附源码、文档说明】
  • 建站系统社区网站建设建站在线建站
  • 数字政府智慧政务服务跨省通办建设方案PPT(46页)
  • 宁波市内做公司网站的公司网站建设与管理技术发展
  • WPS国际版 18.21.1| 可使用邮箱登录,大部分功能已经解锁,比国内版简洁干净
  • 搭建公司网站郑州小程序开发外包公司
  • 无监督学习驱动的遗留系统重构方法论
  • 分析AI代码助手对开发流程的重构与伦理挑战
  • 南京网站建设公司 雷仁网络吉林手机版建站系统开发