作者前言
🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂
论坛测试报告
1.项目背景
本项目是一个论坛系统,采用前后端分离的方式实现,该系统旨在为用户提供一个基于 Web 的文章发布和讨论平台。
用户可以进行注册登录、查看和修改个人信息,进行帖子的增删改查等基础操作。
用户可以点赞、评论帖子,私信其他用户,并在帖子详情页上查看点赞数和阅读量等信息。
2.项目功能
注册模块:在本页面中,用户可以透过注册获取账号和密码,用于登入,注册过程中需要用户输入用户名、昵称、密码、等操作完成注册。
登入模块用户可以通过注册来的账号进行登入,输入正确的账号和密码进行登入,登入成功将会跳转到论坛首页
论坛首页:论坛首页包含有用户相关显示信息、论坛分类、帖子、帖子搜索、发布帖子等功能。当点击相关的按钮会进行跳转到对应的页面进行操作。
个人中心:主要包含有用户的信息,可以更换用户的头像,进行用户密码的更改等功能。
帖子详情页:主要包含了用户发送帖子的内容、标题、回复评价、私信用户等功能,
发帖子中心:具备了发帖子的基本要是,发送模块、发送内容、发送标题等相关功能
私信中心:可以回复私信等功能
3. 测试内容
3.1 设计测试用例
设计测试用例可以从功能测试、性能测试、兼容性测试、易用性测试、界面测试、安全性测试进行入手、本次测试用例主要针对的是该页面各个模块的功能测试,
3.2 功能测试
3.2.1 注册测试
界面:
测试用例1: 用户名(TestUser)、昵称(TestUser)、密码(123456)、确认密码全部填写,点击条款
预期结果:注册正常,可以进行登入
实际结果:注册成功,跳转登入界面
**测试用例2:**输入已经注册过的用户名(TestUser)、昵称(TestUser)、密码(123456)、确认密码全部填写,点击条款
预期结果:注册失败
实际结果:注册失败,右下角弹窗出用户已存在
测试用例3:用户名(TestUse)、昵称(TestUser)、密码(123456)、确认密码全部填写,不点击条款
预期结果: 注册失败
实际结果: 无法注册
测试用例4: 用户名(TestUse)、昵称(TestUser)、密码(123456)、确认密码全部不填写,点击条款
预期结果: 注册失败
实际结果: 无法注册
3.2.2登入测试
界面:
测试用例1: 输入正确的用户名(TestUser)、密码(123456)
预期结果:登入正常,页面跳转
实际结果:登入正常,页面跳转
测试用例2: 输入未注册的用户名(TestUser1)、密码(123456)
预期结果:不能登入正常,
实际结果:不能正常登陆, 右下角提示错误
测试用例3: 不输入的用户名(TestUser)和密码(123456)
预期结果:不能登入正常,
实际结果:不能正常登陆, 输入框提示错误。
3.2.3 论坛首页
界面:
测试用例1:点击不同模块
预期结果:可以切换不同的帖子列表
实际结果:可以切换不同的帖子列表
测试用例2:点击java模块,点击右上角的搜索框,输入1。进行查找
预期结果:查找出所有的1为标题的帖子
实际结果:不能查找,然后框内容情况
测试用例3:点击右上角的白夜模式切换
预期结果:白天、夜天模式切换正常
实际结果:白天、夜天模式切换正常,页面颜色改变
测试用例4:点击右上角的私信通知
预期结果:打开成功,获取所以私信的内容
实际结果:打开成功,获取所以私信的内容
测试用例5:点击右上角的头像,点击下拉框中的个人中心
预期结果:点击成功,跳转到个人中心
实际结果:点击成功,跳转到个人中心
测试用例6:点击右上角的头像,点击下拉框中的我的帖子
预期结果:点击成功,跳转到帖子中心
实际结果:点击成功,跳转到帖子中心
测试用例7:点击帖子列表中的帖子
预期结果:点击成功,跳转到帖子详情页
实际结果:点击成功,跳转到帖子帖子详情页
测试用例8:点击帖子列表的右上角的发帖按钮
预期结果:点击成功,跳转到发帖中心
实际结果:点击成功,跳转到发帖中心
3.2.4 发帖中心
界面:
测试用例1: 不输入标题,输入内容,点击发布帖子
预期结果:发送失败,帖子无标题
实际结果:发帖失败,右下角出现提示
测试用例2: 输入标题,不输入内容,点击发布帖子
预期结果:发送失败,帖子无标题
实际结果:发帖失败,右下角出现提示
测试用例3: 输入标题,输入内容,点击发布帖子
预期结果:发送成功
实际结果:发帖成功,页面跳转到首页
3.2.5 帖子详情页
界面:
测试用例1: 点击点赞
预期结果:点赞成功
实际结果:点赞成功、可以多次点赞,点赞数量增加
测试用例2: 点击用户名
预期结果:跳转到发帖中心
实际结果:跳转成功
测试用例3: 不输入回复内容,点击发送回复
预期结果:回复失败
实际结果:回复失败
测试用例4: 输入回复内容,点击发送回复
预期结果:回复成功
实际结果:回复成功,回复数量增加
测试用例5: 点击私信按钮, 输入回复内容,点击发送发送
预期结果:发送成功
实际结果:回复发送
3.2.6 个人中心
测试用例1:输入新的昵称进行修改
预期结果:修改成功
实际结果:修改成功
测试用例2:输入新的邮箱进行修改
预期结果:修改成功
实际结果:修改成功
测试用例3:输入新的手机号码进行修改
预期结果:修改成功
实际结果:修改成功
测试用例5:不输入的昵称、邮箱、手机号码,直接进行修改
预期结果:修改失败
实际效果:修改失败
测试用例6:输入个人简介内容,点击修改
预期结果:修改成功
实际效果:修改成功
3.2.7 私信回复
测试用例1: 输入回复内容,点击发送
预期结果:回复成功
实际结果:回复成功
测试用例: 不输入回复内容,点击发送
预期结果:回复失败
实际结果:回复失败
4.自动化测试
4.1测试工具
系统: windows10
浏览器 Chrome 135.0.7049.95(正式版本) (64 位)
语言:python
模块:selenium4.0
软件: pyCharm2024.3.5
4.2 自动化脚本
4.2.1 注册测试
import datetime
import time
from selenium.webdriver.common.by import By
from Common.Utials import Forum
class ForumRegisiter():
driver = ""
url = ""
user = datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')
user1="TestUser"
def __init__(self):
self.driver = Forum.driver
self.url = Forum.url
def go_Register(self):
time.sleep(1)
Forum.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
def informetionRegister(self,user , nane, password, password2, click_1):
Forum.find_element(By.CSS_SELECTOR,"#username").send_keys(user)
Forum.find_element(By.CSS_SELECTOR,"#nickname").send_keys(nane)
Forum.find_element(By.CSS_SELECTOR,"#password").send_keys(password)
Forum.find_element(By.CSS_SELECTOR,"#passwordRepeat").send_keys(password2)
if click_1:
ele = Forum.find_element(By.CSS_SELECTOR,"#policy")
if(ele.get_attribute("class") !="form-check-input is-valid"):
ele.click()
else:
ele = Forum.find_element(By.CSS_SELECTOR, "#policy")
if (ele.get_attribute("class") != "form-check-input is-invalid"):
ele.click()
Forum.imagetSave()
#注册按钮
Forum.find_element(By.CSS_SELECTOR, "#submit").click()
self.user1 = user
forumRegiter = ForumRegisiter()
4.2.2登入测试
import time
from selenium.webdriver.common.by import By
from Common.Utials import Forum
from Test.ForumRegisiter import forumRegiter
class ForumLogin:
def __init__(self,):
self.driver = Forum.driver
self.url = Forum.url
def login(self, user =forumRegiter.user1, password ="123456"):
Forum.find_element(By.CSS_SELECTOR,"#username").send_keys(user)
Forum.find_element(By.CSS_SELECTOR,"#password").send_keys(password)
Forum.find_element(By.CSS_SELECTOR,"#submit").click()
print("登入执行完成")
foumLogin = ForumLogin()
4.2.3 论坛首页
import time
import pyautogui
from selenium.webdriver.common.by import By
from Common.Utials import Forum
from Test.ForumRegisiter import forumRegiter
from Test.PostDetailsPase import postDetailsPase
class ForumFristPase():
driver = ""
url = ""
read = ""
likes = ""
comment = ""
title = ""
date = ""
def __init__(self):
self.driver = Forum.driver
self.url = Forum.url
def forumList(self,name="Java"):
time.sleep(2)
list_1 = Forum.find_elements(By.XPATH,'//span[@class="nav-link-title"]')#//*[@id="topBoardList"]
for i in list_1:
print(i.text)
if(i.text == name):
i.click()
print(name, "点击成功")
time.sleep(5)
return None
print("点击失败")
def clickPost(self, mode = "首页"):
index = 0
# 获取帖子标题链接
self.title = Forum.find_element(By.XPATH,'//*[@id="artical-items-body"]/div[2]/div/div[2]/div[1]/a').text
#获取帖子的昵称和发布时间 //*[@id="artical-items-body"]/div[1]/div
# 发布的时间
self.date = Forum.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(2)").text
# 阅读量
self.read = Forum.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(1)").text
# 点赞量
self.likes = Forum.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(2)").text
# 评论量
self.comment = Forum.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(3)").text
name = Forum.find_element(By.XPATH,'//*[@id="artical-items-body"]/div[1]/div/div[2]/div[2]/div/div[1]/ul/li[1]').text
print("昵称:", name)
print("发布时间:", self.date)
print("阅读量:", self.read)
print("点赞量:", self.likes)
print("点赞量:", self.comment)
# # 进入详情页
Forum.find_element(By.XPATH,'//*[@id="artical-items-body"]/div[2]/div/div[2]/div[1]/a').click()
# #检查是否符合
postDetailsPase.start()
postDetailsPase.informationPost(int(self.read),self.likes,self.comment,self.title,self.date)
# #私信发送
# postDetailsPase.clickPrivate(forumRegiter.user1,"11111")
# # 点赞
# postDetailsPase.clikeLike()
# # 回复
postDetailsPase.clikeComment()
# #换到对应模块
# self.forumList(mode)
#
# time.sleep(2)
return None
def inputBox(self, content):
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").send_keys(content)
pyautogui.press('enter')
Forum.imagetSave()
return None
# 帖子发送
def postSend(self):
Forum.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.forumList("首页")
print("点击帖子发送")
time.sleep(10)
Forum.imagetSave()
return None
# 模式切换
def modeSwitch(self):
try:
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-dark").click()
except:
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-light").click()
Forum.imagetSave()
return None
#私信箱
def privateMailbox(self):
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a").click()
time.sleep(1)
Forum.imagetSave()
Forum.find_element(By.CSS_SELECTOR, "#index_message_offcanvasEnd > div.offcanvas-header > button").click()
return None
#我的帖子
def mePost(self):
time.sleep(2)
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a").click()
Forum.find_element(By.CSS_SELECTOR,"#index_user_profile").click()
self.forumList("首页")
Forum.imagetSave()
return None
#个人中心
def personalCent(self):
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a").click()
Forum.find_element(By.CSS_SELECTOR, "#index_user_settings").click()
Forum.imagetSave()
self.forumList("首页")
return None
forumfristPase = ForumFristPase()
4.2.4 发帖中心
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from Common.Utials import Forum
class PostSend:
driver = ""
url = ""
def __init__(self):
self.driver = Forum.driver
self.url = Forum.url
Forum.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()
print("点击帖子发送")
def contentInput(self, model = 1,title = "111",content = "1111"):
select = Select(Forum.find_element(By.CSS_SELECTOR,"#article_post_borad"))
select.select_by_index(model)
Forum.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys(title)
Forum.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(4) > a").click()
self.driver.execute_script("arguments[0].click();", Forum.find_element(By.XPATH,'//*[@id="article_post_submit"]'))
print("发送帖子")
4.2.5 帖子详情页
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from Common.Utials import Forum
# from Test.ForumFristPase import forumfristPase
from Test.ForumRegisiter import forumRegiter
# 前台需要进入帖子详情页
class PostDetailsPase:
driver = ""
url = ""
def __init__(self):
self.driver = Forum.driver
self.url = Forum.url
def start(self):
time.sleep(2)
# 标题
self.title = Forum.find_element(By.CSS_SELECTOR, "#details_article_title").text
# 发布的时间
self.date = Forum.find_element(By.CSS_SELECTOR, "#details_article_createTime").text
# 阅读量
self.read = Forum.find_element(By.CSS_SELECTOR, "#details_article_visitCount").text
# 点赞量
self.likes = Forum.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
# 评论量
self.comment = Forum.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
# 进入了帖子详情页
# 判断
def informationPost(self,read , likes, comment,title,date):
#标题
if(self.title != title):
print("标题有误")
return False
# 发布的时间
if (self.date != date):
print("发布时间有误")
return False
#阅读量
if ( int(self.read)-1 != int(read)):
print("阅读量有误")
return False
# 点赞量
if ( self.likes != likes):
print("点赞量有误")
return False
# 点赞量
if ( self.self.comment != likes):
print("点赞量有误")
return False
return True
# 点击私信发送
def clickPrivate(self, name, content):
#非本人
if(Forum.find_element(By.CSS_SELECTOR,"#article_details_author_name").text != name):
# 点击私信
Forum.find_element(By.CSS_SELECTOR,"#btn_details_send_message").click()
#发送私信
Forum.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys(content)
Forum.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()
Forum.imagetSave()
Forum.find_element(By.CSS_SELECTOR,"#index_message_modal > div > div > div.modal-header > button").click()
print("私信发送完毕")
#点赞
def clikeLike(self):
time.sleep(2)
Forum.find_element(By.CSS_SELECTOR,"#details_btn_like_count").click()
time.sleep(2)
if(int(Forum.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text) ==int(self.likes)+1):
self.likes = Forum.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
print("点赞成功")
else:
print("点赞失败")
#回复加发私信
def clikeComment(self):
#输入内容
self.driver.execute_script("arguments[0].click();",Forum.find_element(By.CSS_SELECTOR,"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(14) > a"))
# 发送
self.driver.execute_script("arguments[0].click();",Forum.find_element(By.XPATH, '//*[@id="details_btn_article_reply"]'))
print("发送运行成功")
time.sleep(6)
# 私信发送
try:
name = Forum.find_element(By.XPATH,'//*[@id="details_reply_area"]/div[1]/div[1]/div/h3/a').text
print(name)
if(name != forumRegiter.user1):
#发私信
Forum.find_element(By.CSS_SELECTOR,"#details_reply_area > div > div.col-3.card > div > div > a").click()
Forum.find_element(By.CSS_SELECTOR, "#index_message_receive_content").send_keys("11111")
Forum.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()
Forum.imagetSave()
Forum.find_element(By.CSS_SELECTOR, "#index_message_modal > div > div > div.modal-header > button").click()
except:
pass
# 获取评论用户
Forum.find_element(By.XPATH, '//div[@id="details_reply_area"]//a[@class="a_reply_user_profile"]').click()
time.sleep(2)
# forumfristPase.forumList("首页")
postDetailsPase = PostDetailsPase()
4.2.6 我的帖子
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from Common.Utials import Forum
from Test.ForumFristPase import forumfristPase
from Test.ForumRegisiter import forumRegiter
class Mepost():
driver = ""
url = ""
def __init__(self):
self.driver = Forum.driver
self.url = Forum.url
def post(self):
forumfristPase.forumList("首页")
time.sleep(2)
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a").click()
Forum.find_element(By.CSS_SELECTOR, "#index_user_profile").click()
# 获取当前的帖子数量
time.sleep(2)
post_1 = int(Forum.find_element(By.CSS_SELECTOR,"#profile_articleCount").text)
#实际的帖子数量
lis_1 = Forum.find_elements(By.XPATH, '//*[@id="profile_article_body"]/li')
for i in lis_1:
post_1-=1
if(post_1 < 0):
print("帖子数量有误")
return None
3.2.7 私信回复
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from Common.Utials import Forum
class ReplyPrivate:
driver = ""
url = ""
def __init__(self):
self.driver = Forum.driver
self.url = Forum.url
def Reply(self,content = "11111"):
time.sleep(1)
Forum.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a").click()
time.sleep(1)
Forum.imagetSave()
# 获取所有的私信
i= Forum.find_element(By.XPATH,'//div[@id="index_div_message_list"]/div//a[@class="text-body d-block index_message_title"]')
print(i.get_attribute("href"))
time.sleep(1)
self.driver.execute_script("arguments[0].click();", i)
time.sleep(1)
# 回复
self.driver.execute_script("arguments[0].click();",Forum.find_element(By.CSS_SELECTOR, "#btn_index_message_reply"))
Forum.find_element(By.CSS_SELECTOR, "#index_message_reply_receive_content").send_keys(content)
Forum.find_element(By.CSS_SELECTOR, "#btn_index_send_message_reply").click()
try:
Forum.find_element(By.CSS_SELECTOR, "#index_message_offcanvasEnd > div.offcanvas-header > button").click()
time.sleep(12)
except:
pass
Forum.imagetSave()
Bug简述
bug1:
版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:进入论坛主页,点击模块
预期结果:模块信息正常,功能正常切换
实际结果:模块信息存在缺陷,功能正常切换
Bug2
版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:进入论坛主页,点击右上角搜索框,输入内容
预期结果:搜索正常,功能正常切换
实际结果:搜索不成功,功能不正常
Bug3:
版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:进入论坛主页,点击头像,点击个人主页,更换头像,
预期结果:更换成功
实际结果:更换失败
Bug4
版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:进入论坛主页,点击帖子列表的帖子,跳转页面, 点击点赞按钮,
预期结果:每个用户只能点赞一次
实际结果:可以无限点赞
Bug5
版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:进入论坛主页,点击帖子列表的自己帖子,跳转页面, 进帖子删除或者修改
预期结果:可以删除或者修改
实际结果:个人帖子无删除和修改按钮
测试总结
本次测试覆盖了注册、登入、论坛主页面、个人中心、帖子详情页、私信回复等相关模块功能的测试。从中总结如下:
- 功能测试:部分模块存在功能未完善或者部分完善的状态,严重影响软件使用
- 界面测试:测试过程中,部分模块存在数值不准确,界面显示
- 易用性测试:测试过程中,存在较大问题,点击返回页面,直接跳转到登入界面,以及注册没有注册成功标识等
结论:基本功能大部分可以使用、用户体验感较差,缺失功能的模块应该增加修复速度。进一步完善。