文章目录
- 一、项目背景
- 二、项目功能
- 用户注册/登录
- 帖子列表页
- 发布帖子
- 个人中心
- 三、测试工具和环境
- 四、测试计划
- 非功能测试用例
- 功能测试用例
- 部分人工手动测试截图
- web自动化测试
- 测试用例
- 代码框架
- 配置内容代码文件(Utils.py)
- 注册页面代码文件(RegistrationPage.py)
- 登录页面代码文件(LoginPage.py)
- 发布帖子页面代码文件(PublishingPage.py)
- 个人中心页面代码文件(PersonalCenterPage)
- 测试论坛系统代码文件(RunTest.py)
- 五、总结
- 测试背景
- 测试用例执行情况
- 用户注册
- 用户登录
- 个人中心页面
- 发布帖子页面
- 不足和改进
- 不足
- 改进
- 小结
一、项目背景
本系统延续前后端分离架构,使用
MySQL
关系型数据库存储结构化数据,部署于云服务器环境。
前端页面扩展为六大核心模块:用户注册/登录页、主版块索引页、帖子详情页(含评论互动)、内容发布页、个人中心页及消息通知页。
该论坛系统适用于中小型兴趣社区、企业知识共享平台等场景,通过模块化设计既可快速部署基础论坛,也可通过功能扩展演进为综合性社区平台。
二、项目功能
该论坛系统主要有以下几个功能:
- 用户注册/登录;
- 帖子列表展示;
- 发布帖子
- 个人中心。
用户注册/登录
- 采用用户自主注册机制;
- 登录成功跳转至版块列表页,失败时弹出错误提示窗口;
- 登录态异常自动退回至登录页。
帖子列表页
- 按发帖时间倒序排列主题帖;
- 展示帖子标题、作者、发布时间、浏览数、点赞量和评论数;
- 点击帖子跳转至详情页
发布帖子
- 支持纯文本发帖;
- 有版块选择;
- 提交成功刷新当前页面数据。
个人中心
- 可修改头像、昵称、邮箱地址和密码等;
- 点击提交修改按钮返回登录页面。
三、测试工具和环境
操作系统:
Windows
11
家庭中文版处理器:
11th
Gen Intel(R) Core(TM) i5-1155G7
@ 2.50GHz 2.50 GHz
浏览器:
Chrome
版本133.0.6943.142
(正式版本) (64
位)测试工具:
Python
,Selenium
自动化脚本运行环境:
PyCharm 2024.2.1
四、测试计划
非功能测试用例
功能测试用例
部分人工手动测试截图
情景一:异常注册
未勾选 使用条款和隐私政策
密码和确认密码不一致
情景二:异常登录
用户名或密码错误
情景三:登录成功后的跳转页面
情景四:登录成功后的发布帖子页面
情景五:登录成功后的个人中心页面
web自动化测试
测试用例
见上面的功能测试用例
代码框架
配置内容代码文件(Utils.py)
# 导入所需的模块
import datetime # 用于处理日期和时间
import os # 用于文件和目录操作
import sys # 用于获取调用栈信息# 导入Selenium相关模块
from selenium import webdriver # Selenium 核心模块
from selenium.webdriver.chrome.service import Service # Chrome 浏览器服务
from webdriver_manager.chrome import ChromeDriverManager # 自动管理 ChromeDriver# 创建浏览器驱动类
class Driver:driver = "" # 类属性,用于保存浏览器驱动实例def __init__(self):"""初始化浏览器驱动配置"""# 创建 Chrome 浏览器选项对象(可用于添加扩展、无头模式等配置)options = webdriver.ChromeOptions()# 指定 ChromeDriver 的路径driver_path = "D:/Downloads/chromedriver-win64/chromedriver-win64/chromedriver.exe"# 创建 Chrome 浏览器驱动实例self.driver = webdriver.Chrome(executable_path=driver_path, # 指定驱动路径options=options # 传入浏览器选项)# 设置隐式等待(作用于整个浏览器生命周期,查找元素时的默认等待时间)self.driver.implicitly_wait(2) # 单位:秒def getScreeShot(self):"""屏幕截图方法"""# 生成日期格式的目录名(示例:2023-08-01)dirname = datetime.datetime.now().strftime("%Y-%m-%d")# 拼接截图保存路径(上级目录的 images 文件夹下)screenshot_dir = "../images/" + dirname# 如果目录不存在则创建if not os.path.exists(screenshot_dir):os.mkdir(screenshot_dir)# 生成文件名格式:# 调用当前方法的上层方法名 + 时间戳 + 后缀(示例:test_login_2023-08-01-143045.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(os.path.join(screenshot_dir, filename))# 创建全局浏览器驱动实例(可被其他模块导入使用)
ForumDriver = Driver()
注册页面代码文件(RegistrationPage.py)
# 测试论坛注册界面
# 本脚本使用 Selenium 库实现对论坛注册界面的自动化测试,包括成功注册和失败注册的测试用例。from selenium.webdriver.common.by import By # 导入 Selenium 的 By 模块,用于指定元素的查找方式
from common.Utils import ForumDriver # 导入自定义的 ForumDriver 类,用于获取 WebDriver 实例class ForumRegistration:url = "" # 用于存储论坛注册页面的 URLdriver = "" # 用于存储 WebDriver 实例def __init__(self):# 初始化方法,设置注册页面的 URL 并启动 WebDriverself.url = "http://127.0.0.1:9580/sign-up.html" # 设置论坛注册页面的 URLself.driver = ForumDriver.driver # 获取 WebDriver 实例self.driver.get(self.url) # 打开注册页面# 成功注册的测试用例def RegistrationSucTest(self):"""测试正常注册流程:1. 清空所有输入框。2. 输入有效的用户名、昵称、密码和确认密码。3. 勾选用户协议。4. 点击注册按钮。5. 验证是否成功跳转到登录页面。6. 截图保存测试结果。"""# 若连续多次的 send_keys 则会出现关键词拼接,而不是替换。若要替换需要先 clearself.driver.find_element(By.CSS_SELECTOR, "#username").clear() # 清空用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear() # 清空昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#password").clear() # 清空密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear() # 清空确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("z11") # 输入有效的用户名self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("123") # 输入有效的昵称self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123") # 输入有效的密码self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123") # 输入有效的确认密码self.driver.find_element(By.CSS_SELECTOR, "#policy").click() # 勾选用户协议self.driver.find_element(By.CSS_SELECTOR, "#submit").click() # 点击注册按钮# 查找注册成功跳转后的页面的元素:登录页面的 用户登录元素self.driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2") # 验证是否成功跳转到登录页面# 添加屏幕截图ForumDriver.getScreeShot() # 调用截图方法,保存测试结果# 失败注册的测试用例def RegistrationFailTest(self):"""测试异常注册流程:1. 清空所有输入框。2. 输入用户名、密码和确认密码(确认密码与密码不一致)。3. 勾选用户协议。4. 点击注册按钮。5. 验证是否出现注册失败提示。6. 截图保存测试结果。"""# 若连续多次的 send_keys 则会出现关键词拼接,而不是替换。若要替换需要先clearself.driver.find_element(By.CSS_SELECTOR, "#username").clear() # 清空用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear() # 清空昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#password").clear() # 清空密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear() # 清空确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("z") # 输入用户名self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("123") # 输入昵称self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12") # 输入密码# 确认密码和密码输入不一致self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123") # 输入与密码不一致的确认密码self.driver.find_element(By.CSS_SELECTOR, "#policy").click() # 勾选用户协议self.driver.find_element(By.CSS_SELECTOR, "#submit").click() # 点击注册按钮# 查找注册失败页面的元素:注册页面的 提示检查确认密码self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div") # 验证是否出现注册失败提示# 添加屏幕截图ForumDriver.getScreeShot() # 调用截图方法,保存测试结果
登录页面代码文件(LoginPage.py)
# 测试论坛登录界面
# 本脚本使用 Selenium 库实现对论坛登录界面的自动化测试,包括成功登录和异常登录的测试用例。from selenium.webdriver.common.by import By # 导入 Selenium 的 By 模块,用于指定元素的查找方式from common.Utils import ForumDriver # 导入自定义的 ForumDriver 类,用于获取 WebDriver 实例class ForumLogin:url = "" # 用于存储论坛登录页面的 URLdriver = "" # 用于存储 WebDriver 实例def __init__(self):# 初始化方法,设置登录页面的 URL 并启动 WebDriverself.url = "http://127.0.0.1:9580/sign-in.html" # 设置论坛登录页面的 URLself.driver = ForumDriver.driver # 获取 WebDriver 实例self.driver.get(self.url) # 打开登录页面# 成功登陆的测试用例def LoginSucTest(self):"""测试正常登录流程:1. 清空用户名和密码输入框。2. 输入正确的用户名和密码。3. 点击登录按钮。4. 验证是否成功登录到首页。5. 截图保存测试结果。"""# 若连续多次的 send_keys 则会出现关键词拼接,而不是替换。若要替换需要先 clearself.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("zhaoliu") # 输入正确的用户名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, "#article_list_board_title") # 验证是否成功登录到首页# 添加屏幕截图ForumDriver.getScreeShot() # 调用截图方法,保存测试结果# 异常登陆的测试用例def LoginFailTest(self):"""测试异常登录流程:1. 清空用户名和密码输入框。2. 输入未注册的用户名和密码。3. 点击登录按钮。4. 验证是否出现登录失败提示。5. 截图保存测试结果。"""# 若连续多次的 send_keys 则会出现关键词拼接,而不是替换。若要替换需要先 clearself.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("admin") # 输入未注册的用户名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.jq-toast-wrap.bottom-right > div") # 验证是否出现登录失败提示# 添加屏幕截图ForumDriver.getScreeShot() # 调用截图方法,保存测试结果
发布帖子页面代码文件(PublishingPage.py)
from selenium.webdriver.common.by import By # 导入 Selenium 的 By 模块,用于指定元素的查找方式
from common.Utils import ForumDriver # 导入自定义的 ForumDriver 类,用于获取 WebDriver 实例# 测试发布帖子页
class PublishingPage:url = "" # 用于存储论坛主页的 URLdriver = "" # 用于存储 WebDriver 实例def __init__(self):"""初始化方法,设置论坛主页的URL并启动WebDriver。"""self.url = "http://127.0.0.1:9580/index.html" # 设置论坛主页的 URLself.driver = ForumDriver.driver # 获取 WebDriver 实例self.driver.get(self.url) # 打开论坛主页# 登录状态下发布帖子页的测试def PublishingPageDetail(self):"""测试在登录状态下进入发布帖子页面的流程:1. 点击发布帖子的按钮,进入发布帖子页面。2. 验证页面中是否存在“发新帖”元素,以确认页面加载成功。3. 添加屏幕截图以保存测试结果。"""# 点击发布帖子标签进入发布帖子主页self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post").click()# 查看发布帖子页面中 发新帖元素是否存在self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")# 添加屏幕截图ForumDriver.getScreeShot() # 调用截图方法,保存测试结果
个人中心页面代码文件(PersonalCenterPage)
from selenium.webdriver.common.by import By # 导入 Selenium 的 By 模块,用于指定元素的查找方式
from common.Utils import ForumDriver # 导入自定义的 ForumDriver 类,用于获取 WebDriver 实例# 测试个人中心页
class PersonalCenterPage:url = "" # 用于存储论坛主页的 URLdriver = "" # 用于存储 WebDriver 实例def __init__(self):"""初始化方法,设置论坛主页的URL并启动WebDriver。"""self.url = "http://127.0.0.1:9580/index.html" # 设置论坛主页的 URLself.driver = ForumDriver.driver # 获取 WebDriver 实例self.driver.get(self.url) # 打开论坛主页# 登录状态下个人中心页的测试def PersonalCenterPage(self):"""测试在登录状态下进入个人中心页面的流程:1. 点击头像,进入个人主页。2. 点击设置按钮,进入个人中心。3. 验证个人中心页面中是否存在“用户中心”元素。4. 添加屏幕截图以保存测试结果。"""# 点击头像进入个人主页self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()# 点击设置按钮进入个人中心self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()# 检查个人中心页中 用户中心元素是否存在:self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")# 添加屏幕截图ForumDriver.getScreeShot() # 调用截图方法,保存测试结果
测试论坛系统代码文件(RunTest.py)
from tests import LoginPage # 导入登录页面的测试模块
from tests import RegistrationPage # 导入注册页面的测试模块
from tests import PersonalCenterPage # 导入个人中心页面的测试模块
from common.Utils import ForumDriver # 导入公用的 WebDriver 工具类
from tests import PublishingPage # 导入发布帖子页面的测试模块if __name__ == '__main__':"""主程序入口,用于运行所有测试用例。"""# 注册页面print("开始测试:注册页面")# 注册失败print("测试用例:注册失败")RegistrationPage.ForumRegistration().RegistrationFailTest() # 调用注册失败的测试用例# 注册成功print("测试用例:注册成功")RegistrationPage.ForumRegistration().RegistrationSucTest() # 调用注册成功的测试用例# 登录页面print("开始测试:登录页面")# 登录失败print("测试用例:登录失败")LoginPage.ForumLogin().LoginFailTest() # 调用登录失败的测试用例# 登录成功print("测试用例:登录成功")LoginPage.ForumLogin().LoginSucTest() # 调用登录成功的测试用例# 个人中心页print("开始测试:个人中心页")PersonalCenterPage.PersonalCenterPage().PersonalCenterPage() # 调用个人中心页的测试用例# 发布帖子页print("开始测试:发布帖子页")PublishingPage.PublishingPage().PublishingPageDetail() # 调用发布帖子页的测试用例# 指定浏览器的退出print("关闭浏览器")ForumDriver.driver.quit() # 关闭 WebDriver 实例,退出浏览器
五、总结
测试背景
本次测试的目标是一个基础版的论坛系统,主要功能包括用户注册、登录、个人中心页面访问以及帖子发布。
测试旨在验证这些功能的正确性、稳定性和用户体验。
测试用例执行情况
用户注册
测试过程 | 测试结果 |
---|---|
输入有效的用户名、昵称、密码及确认密码后,成功跳转至登录页面,验证通过。 | 注册成功 |
输入无效的用户名或密码(如密码不匹配),页面提示注册失败,验证通过。 | 注册失败 |
用户登录
测试过程 | 测试结果 |
---|---|
输入正确的用户名和密码后,成功跳转至首页,验证通过。 | 登录成功 |
输入错误的用户名或密码后,页面提示登录失败,验证通过。 | 登录失败 |
个人中心页面
测试过程 | 测试结果 |
---|---|
登录状态下点击头像进入个人中心,页面加载成功,验证通过。 | 通过 |
发布帖子页面
测试过程 | 测试结果 |
---|---|
登录状态下点击发布帖子按钮,成功进入帖子发布页面,验证通过。 | 通过 |
不足和改进
不足
用户体验问题:
- 登录失败时,提示信息不够具体,无法明确告知用户是用户名还是密码错误。
功能问题:
- 未对用户输入进行严格校验,例如允许注册用户名为单个字符,可能导致后续功能异常。
测试覆盖不足:
- 未测试帖子发布功能的完整流程(如输入帖子内容、提交帖子等)。
改进
优化错误提示:
- 在注册和登录页面,提供更详细的错误提示,帮助用户快速定位问题。
增强输入校验:
- 对用户名、密码等输入进行严格校验,确保符合系统要求。
完善功能测试:
- 完整测试帖子发布功能,包括输入帖子标题、内容、提交等流程。
小结
本次测试基本覆盖了论坛系统的核心功能,测试结果表明系统的主要功能正常运行。
然而,仍存在一些用户体验和功能上的问题需要改进。
后续测试应重点关注功能的完整性、用户体验的优化以及系统的安全性。