1.项目背景
本项目是一个论坛系统,采用前后端分离的方式实现,该系统旨在为用户提供一个基于 Web 的文章发布和讨论平台。用户可以进行注册登录、查看和修改个人信息,进行帖子的增删改查等基础操作。用户可以点赞、评论帖子,私信其他用户,并在帖子详情页上查看点赞数和阅读量等信息。
2.项目功能
注册模块:在本页面中,用户可以透过注册获取账号和密码,用于登入,注册过程中需要用户输入用户名、昵称、密码、等操作完成注册。
登入模块:用户可以通过注册来的账号进行登入,输入正确的账号和密码进行登入,登入成功将会跳转到论坛首页。
论坛首页:论坛首页包含有用户相关显示信息、论坛分类、帖子、帖子搜索、发布帖子等功能。当点击相关的按钮会进行跳转到对应的页面进行操作。
个人中心:主要包含有用户的信息,可以更换用户的头像,进行用户密码的更改等功能。
帖子详情页:主要包含了用户发送帖子的内容、标题、回复评价、私信用户等功能。
发帖子中心:具备了发帖子的基本要是,发送模块、发送内容、发送标题等相关功能。
私信中心:可以回复私信等功能。
3. 测试内容
3.1 设计测试用例
设计测试用例可以从功能测试、性能测试、兼容性测试、易用性测试、界面测试、安全性测试进行入手、本次测试用例主要针对的是该页面各个模块的功能测试。
3.2 功能测试
3.2.1 注册测试
测试用例1: 用户名(222)、昵称(222)、密码(222)、确认密码全部填写,点击条款
预期结果:注册正常,可以进行登入
实际结果:注册成功,跳转登入界面
测试用例2:输入已经注册过的用户名(222)、昵称(222)、密码(222)、确认密码全部填写,点击条款
预期结果:注册失败
实际结果:注册失败,右下角弹窗出用户已存在
测试用例3:用户名(666)、昵称(666)、密码(666)、确认密码全部填写,不点击条款
预期结果: 注册失败
实际结果: 无法注册
测试用例4: 用户名、昵称、密码、确认密码全部不填写,点击条款
预期结果: 注册失败
实际结果: 无法注册
3.2.2登入测试
测试用例1: 输入正确的用户名(222)、密码(222)
预期结果:登入正常,页面跳转
实际结果:登入正常,页面跳转
测试用例2: 输入未注册的用户名(qwer)、密码(qwer)
预期结果:不能登入正常,
实际结果:不能正常登陆, 右下角提示错误
测试用例3:不输入的用户名(qwer)和密码(qwer)
预期结果:不能登入正常,
实际结果:不能正常登陆, 输入框提示错误。
3.2.3 论坛首页
界面显示
测试用例1:点击不同模块
预期结果:可以切换不同的帖子列表
实际结果:可以切换不同的帖子列表
测试用例2:点击java模块,点击右上角的搜索框,输入eeee。进行查找
预期结果:查找出所有的eeee为标题的帖子
实际结果:不能查找,然后框内容情况
测试用例3:点击右上角的白夜模式切换
预期结果:白天、夜天模式切换正常
实际结果:白天、夜天模式切换正常,页面颜色改变
测试用例4:点击右上角的私信通知
预期结果:打开成功,获取所以私信的内容
实际结果:打开成功,获取所以私信的内容
测试用例5:点击右上角的头像,点击下拉框中的个人中心
预期结果:点击成功,跳转到个人中心
实际结果:点击成功,跳转到个人中心
测试用例6:点击右上角的头像,点击下拉框中的我的帖子
预期结果:点击成功,跳转到帖子中心
实际结果:点击成功,跳转到帖子中心
测试用例7:点击帖子列表中的帖子
预期结果:点击成功,跳转到帖子详情页
实际结果:点击成功,跳转到帖子帖子详情页
测试用例8:点击帖子列表的右上角的发帖按钮
预期结果:点击成功,跳转到发帖中心
实际结果:点击成功,跳转到发帖中心
3.2.4 帖子编辑页
界面:
测试用例1: 不输入标题,输入内容,点击发布帖子
预期结果:发送失败,帖子无标题
实际结果:发帖失败,右下角出现提示
测试用例2: 输入标题,不输入内容,点击发布帖子
预期结果:发送失败,帖子无标题
实际结果:发帖失败,右下角出现提示
测试用例3: 输入标题,输入内容,点击发布帖子
预期结果:发送成功
实际结果:发帖成功,页面跳转到首页
3.2.5 内容管理页
界面:
测试用例1: 点击标题进入详情页点击点赞按钮
预期结果:点赞成功,只增加一次点赞
实际结果:点赞成功、可以多次点赞,点赞数量增加
测试用例2: 点击标题进入详情页点击编辑按钮
预期结果:跳转到内容编辑页
实际结果:跳转到内容编辑页
测试用例3: 点击标题进入详情页点击删除按钮
预期结果:删除成功跳转到首页
实际结果:删除成功跳转到首页
测试用例4: 点击用户名
预期结果:跳转到内容管理页
实际结果:跳转成功
测试用例5: 不输入回复内容,点击发送回复
预期结果:回复失败
实际结果:回复失败
测试用例6: 输入回复内容,点击发送回复
预期结果:回复成功
实际结果:回复成功,回复数量增加
测试用例7: 点击私信按钮, 输入回复内容,点击发送发送
预期结果:发送成功
实际结果:回复发送
3.2.6 个人中心
测试用例1:输入新的昵称进行修改
预期结果:修改成功
实际结果:修改成功
测试用例2:输入新的邮箱进行修改
预期结果:修改成功
实际结果:修改成功
测试用例3:输入新的手机号码进行修改
预期结果:修改成功
实际结果:修改成功
测试用例5:输入原密码,新密码,确认密码后点击提交修改
预期结果:修改成功,跳转到登录页
实际效果:修改成功,跳转到登录页
4.2 自动化脚本
4.2.1 注册测试
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumRegistration:
url = ""
driver = ("")
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-up.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
self.driver.implicitly_wait(3)
def ForumRegist(self):
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("999")
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("999")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("999")
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("999")
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
4.2.2登入测试
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumLogIn:
url=""
driver=("")
def __init__(self):
self.url="http://127.0.0.1:58080/sign-in.html"
self.driver=ForumDriver.driver
self.driver.get(self.url)
def ForumSucLog(self):
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("qwe")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
def ForumFailLog(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("000")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
def ForumRegist(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
4.2.3 论坛首页
from common.Utils import ForumDriver
class ForumFront:
url = ""
driver = ("")
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
self.driver.fullscreen_window()
self.driver.execute_cdp_cmd("Emulation.setPageScaleFactor", {"pageScaleFactor": 0.6 })
self.driver.implicitly_wait(3)
def FroumFrontEdition(self):
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, "#article_post_title").send_keys("99999")
title_label = self.driver.find_element(By.CSS_SELECTOR, "#article_post_title")
title_label.send_keys(Keys.TAB)
ele = self.driver.switch_to.active_element
ele.send_keys("123456")
time.sleep(3)
# self.driver.fullscreen_window()
button_= self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit")
button_.click()
def FroumFrontCenter(self):
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, "#setting_input_nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").send_keys("222")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_nickname").click()
actual = self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").get_attribute("value")
ForumDriver.getScreeShot()
print(actual)
assert actual == "222"
def FroumFrontManage(self):
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").click()
4.2.4 内容管理页
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumContentManage:
url = ""
driver = ("")
def __init__(self):
self.url="http://127.0.0.1:58080/index.html"
self.driver=ForumDriver.driver
self.driver.get(self.url)
def ForumContentTest(self):
self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(1)")
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(2)")
self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(3)")
4.2.5 帖子编辑页
import time
from time import sleep
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumFront:
url = ""
driver = ("")
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
self.driver.fullscreen_window()
self.driver.execute_cdp_cmd("Emulation.setPageScaleFactor", {"pageScaleFactor": 0.6 })
self.driver.implicitly_wait(3)
def FroumFrontEdition(self):
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, "#article_post_title").send_keys("99999")
title_label = self.driver.find_element(By.CSS_SELECTOR, "#article_post_title")
title_label.send_keys(Keys.TAB)
ele = self.driver.switch_to.active_element
ele.send_keys("123456")
time.sleep(3)
self.driver.fullscreen_window()
button_= self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit")
button_.click()
4.2.6 个人中心
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumPersonalCenter:
url = ""
driver = ("")
def __init__(self):
self.url="http://127.0.0.1:58080/index.html"
self.driver=ForumDriver.driver
self.driver.get(self.url)
def ForumPersonalCheck(self):
self.driver.find_element(By.CSS_SELECTOR,"#setting_input_nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").send_keys("222")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_nickname").click()
actual = self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").text
ForumDriver.getScreeShot()
assert actual == "222"
Bug简述
bug1:
版本 0.0.0
环境:Windons11
步骤:进入论坛主页,点击右上角搜索框,输入内容
预期结果:搜索正常,功能正常切换
实际结果:搜索不成功,功能不正常
Bug2:
版本 0.0.0
环境:Windons11
步骤:进入论坛主页,点击头像,点击个人主页,更换头像,
预期结果:更换成功
实际结果:更换失败
Bug3
版本 0.0.0
环境:Windons11
步骤:进入论坛主页,点击帖子列表的帖子,跳转页面, 点击点赞按钮,
预期结果:每个用户只能点赞一次
实际结果:可以无限点赞
测试总结
本次测试覆盖了注册、登陆、论坛主页面、个人中心、帖子编辑页、内容管理页等相关模块功能的测试。从中总结如下:
功能测试:部分模块存在功能未完善或者部分完善的状态,严重影响软件使用
易用性测试:测试过程中,存在较大问题,点击返回页面,直接跳转到登入界面,以及注册没有注册成功标识等
结论:基本功能大部分可以使用、用户体验感较差。应进一步完善。