信息管理展示平台测试项目
博客系统是一款基于Web的内容创作与交流平台,主要用于用户注册登录、文章发布与管理、评论互动及内容搜索。该系统面向个人用户、团队以及内容运营者,提供从文章撰写、发布、阅读到互动的完整流程支持。随着功能的逐步完善和上线需求的推进,需要通过系统化的测试验证其功能的正确性、性能的稳定性以及在不同浏览器和终端下的兼容性,从而保障用户在实际使用过程中的良好体验系统包含下面四个核心模块(1) 登录页面(2)
感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
😎😎😎 C语言
🐿️🐿️🐿️ C语言例题
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐱👓🐱👓🐱👓 Linux
🐣🐣🐣 python
😎😎😎 软件测试
🏀🏀🏀 笔试练习题
🐱👤🐱👤🐱👤 秋招准备算法题
🐱🚀🐱🚀🐱🚀 高并发内存池项目
🚀🚀🚀 C++面试题
👍👍👍 Linux基础面试题
🐥🐥🐥 软件测试面试题
🐿️🐿️🐿️ 文章链接目录
报告概述
项目背景
博客系统是一款基于Web的内容创作与交流平台,主要用于用户注册登录、文章发布与管理、评论互动及内容搜索。该系统面向个人用户、团队以及内容运营者,提供从文章撰写、发布、阅读到互动的完整流程支持。随着功能的逐步完善和上线需求的推进,需要通过系统化的测试验证其功能的正确性、性能的稳定性以及在不同浏览器和终端下的兼容性,从而保障用户在实际使用过程中的良好体验
系统包含下面四个核心模块
(1) 登录页面
(2) 个人首页
(3) 博客详情页
(4) 博客编辑页
测试目的
功能验证
①确保所有核心功能符合需求规格说明书及设计文档要求
②验证用户注册、登录、注销等流程的正确性
③确认文章的创建、编辑、发布、删除、浏览的完整性
④验证标签、分类、搜索功能的可用性与准确性
⑤测试图片、附件等多媒体上传与展示的功能
用户体验优化
①评估页面布局与交互设计的合理性和一致性
②测试导航逻辑是否清晰、符合用户使用习惯
③验证提示信息、错误反馈、成功状态信息的准确性与友好性
④检查响应式设计在PC、平板、移动端的适配情况
⑤测试文章编辑器的易用性与稳定性(如Markdown/富文本支持)
⑥评估加载速度、页面跳转的流畅性
⑦检查用户在常见操作中的点击步骤和效率
系统稳定性保障
①评估系统在高并发访问、批量数据请求下的稳定性
②测试长时间运行下的内存消耗与性能表现
③验证异常情况(网络中断、服务器宕机、请求超时)下的容错能力
④检查文章、评论、用户数据在多场景下的一致性和完整性
⑤验证日志记录与异常处理机制的有效性
⑥测试备份与恢复机制,确保数据在极端情况下可恢复
安全性加固
①防止未授权访问、恶意操作和用户数据泄露
②验证用户认证、授权机制的安全性与健壮性
③测试防御SQL注入、XSS、CSRF等常见Web攻击的能力
④检查用户密码、隐私数据加密存储与传输的安全性
⑤验证文件上传安全策略(限制文件类型、大小、防止木马)
⑥检查会话管理的安全性(如Session超时、Token机制)
兼容性确认
①确保系统在主流浏览器(Chrome、Edge)下正常运行
②验证不同操作系统(Windows、Android)的兼容表现
③测试不同设备类型(PC、手机)的页面适配情况
④检查不同分辨率和屏幕尺寸下的界面显示效果
⑤验证在弱网环境下的可用性与加载表现
测试环境
操作系统:Windows 11
浏览器:Chrome、Edge
测试工具:Selenium
测试用例
手动测试
登录页面功能
账号和密码
正常登录
测试场景一:输入正确的用户名及正确的密码
预期结果:登录成功并跳转到博客首页
实际结果:登录成功并跳转到博客首页
异常登录
测试场景二:输入正确的用户名及错误的密码
预期结果:提示密码错误
实际结果:提示密码错误
测试场景三:输入错误的用户名及正确的密码
预期结果:提示用户名不存在或者密码错误
实际结果:提示用户名不存在或者密码错误
测试场景四:输入错误的用户名及错误的密码
预期结果:提示用户名不存在或者密码错误
实际结果:提示用户名不存在或者密码错误
测试场景五:不输入用户名及密码
预期结果:提示用户及密码未输入
实际结果:提示账号或密码不能为空
测试场景六:输入正确用户名及不输入密码
预期结果:提示密码未输入
实际结果:提示账号或密码不能为空
测试场景七:输入错误的用户名及不输入密码
预期结果:提示用户名不存在或密码未输入
实际结果:提示账号或密码不能为空
测试场景八:不输入用户名及输入正确的密码
预期结果:提示用户名未输入
实际结果:提示账号或密码不能为空
测试场景九:不输入用户名输入错误的密码
预期结果:提示用户名未输入或密码错误
实际结果:提示账号或密码不能为空
页面按钮
测试场景一:在未登录情况下点击主页
预期结果:无法跳转到主页并提示用户未登录
实际结果:将登录页面重新刷新了一次但未提示用户未登录
测试场景二:在未登录情况下点击写博客
预期结果:无法跳转到博客编辑页并提示用户未登录
实际结果:跳转到博客编辑页未提示用户未登录
个人首页功能
页面按钮
测试场景一:点击注销按钮
预期结果:跳转回博客登录页面且需重新输入账号和密码
实际结果:跳转回博客登录页面且需重新输入账号和密码
测试场景二:点击写博客按钮
预期结果:跳转到博客编辑页面
实际结果:跳转到博客编辑页面
测试场景三:点击主页按钮
预期结果:页面刷新
实际结果:页面刷新
测试场景四:点击查看全文按钮
预期结果:跳转到博客详情页面
实际结果:跳转到博客详情页面
测试场景六:点击GitHub
预期结果:能够跳转到用户的GitHub
实际结果:跳转到gitee上
测试场景七:点击文章按钮
预期结果:跳转到文章页面
实际结果:未跳转到文章页面且文章显示数量与实际数量不匹配
测试场景八:点击分类按钮
预期结果:跳转到文章分类页面
实际结果:未跳转到文章分类页面
个人信息
测试场景一:查看头像显示
预期结果:头像正确显示
测试结果:头像正确显示
测试场景二:查看用户的名字
预期结果:名字与输入用户名相同
测试结果:名字与输入用户名相同
页面信息
测试场景一:博客标题
预期结果:博客标题能够正常显示
实际结果:博客标题能够正常显示
测试场景二:博客发布时间
预期结果:博客发布时间能够正常显示
实际结果:博客发布时间能够正常显示
测试场景三:博客内容
预期结果:博客内容能够正常查看
实际结果:博客内容能够正常查看
博客详情页功能
页面按钮
测试场景一:点击一篇已发布文章中的编辑按钮
预期结果:跳转到博客编辑页
实际结果:跳转到博客编辑页
测试场景二:点击一篇已发布文章中的删除按钮
预期结果:出现提示弹窗询问是否删除,删除后在主页中无法找到该文章
实际结果:出现提示弹窗询问是否删除,删除后在主页中无法找到该文章
页面信息
测试场景三:查看页面博客标题 发表时间 博客内容
预期结果:信息能够正常显示
实际结果:信息能够正常显示
博客编辑页
正常发布博客
测试场景一:输入标题和内容,点击发布博客
预期结果:博客正常发布
实际结果:博客正常发布
异常发布博客
测试场景一:不写标题,点击发布博客
预期结果:提示标题未输入
实际结果:提示内容未空
测试场景二:不写内容,点击发布博客
预期结果:提示内容未输入
实际结果:提示内容为空
测试场景三:不点击发布按钮
预期结果:内容未发布
实际结果:内容未发布
页面元素检查
测试场景一:在已经写好的文章中测试文本小工具如撤消 粗体 标题
预期结果:小工具能正常点击且能在文本中有所体现
测试结果:小工具能正常点击且能在文本中有所体现
测试场景二:点击链接按钮并输入链接及链接名
预期结果:点击链接按钮后会弹出添加链接地址,输入后点击确定能够在文章中看到链接,点击链接会跳转到指定界面
实际结果:点击链接按钮后会弹出添加链接地址,输入后点击确定能够在文章中看到链接,点击链接会跳转到指定界面
测试场景三:点击链接按钮输入连接名但不输入链接
预期结果:提示未输入链接
实际结果:提示未输入链接
测试场景四:点击连接按钮输入链接但不输入链接名
预期结果:文章中只显示链接,且点击链接可以跳转
实际结果:文章中只显示链接,且点击链接可以跳转
测试场景五:点击链接输入不存在的地址
预期结果:提示地址错误
实际结果:未进行任何提示
测试场景六:点击添加图片
预期结果:弹出输入图片链接界面,输入链接后文章内容会出现图片
实际结果:输入链接后并没有出现图片
测试场景七:点击行内代码
预期结果:输入的内容呈现形式与其他的不一样
实际结果:输入的内容呈现形式与其他的不一样
测试场景八:点击添加表情
预期结果:能够选择各种标签
实际结果:点击添加表情后会弹出告诉settings.emoji == false
自动化测试
测试环境
系统:windows11
浏览器:139.0.7258.128(正式版本) (64 位)
语言:python
模块:selenium4.0
软件:pyCharm2024.1.7
创建浏览器对象Utils.py
#创建浏览器对象
import os
import sys
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
#创建一个类叫Driver
class Driver:
# 类里面的一个成员叫driver初始情况为空
driver = ""
# 用init构造函数给driver创建一个浏览器对象
def __init__(self):
options=webdriver.ChromeOptions()
# 通过使用构造函数给driver创建一个浏览器对象,需要处理两个参数service通过什么服务打开谷歌 options表示添加浏览器配置
self.driver=webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)
#设置隐式等待的时间
self.driver.implicitly_wait(2)
#创建一个屏幕截图的对象
def getScreeShot(self):
#创建屏幕截图,要求图片文件名称./2025-08-17-111.png
#图片路径:../images/2025-08-17/2025-08-17-111.png
dirname=datetime.datetime.now().strftime("%Y-%m-%d")
#判断../images/这个路径下是否存在../images/2025-08-17这个文件夹
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"
#不能直接传文件名,要将这个文件名保存到"../images/"+dirname+"/"这个路径下
self.driver.save_screenshot("../images/"+dirname+"/"+filename)
BlogDriver=Driver()
博客登录页面BlogLogin.py
测试前准备
#测试博客登录页面
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
import unittest
class BlogLogin:
url=""
driver=""
def __init__(self):
self.url=" "
# 取BlogDriverw对象的driver成员赋值给当前类对象的driver
self.driver=BlogDriver.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")
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
time.sleep(3)
self.driver.back()
异常登录
def LoginFailTest(self):
#不能连续输入账号和密码,要把之前的账号和密码清空,否则第二次输入时会进行尾插
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(3)
#得到屏幕上出现的信息
actual=self.driver.find_element(By.CSS_SELECTOR,"body").text
#将屏幕截图添加到指定路径下
BlogDriver.getScreeShot()
# 判断屏幕是否会出现用户名或密码错误!
assert actual=="用户名或密码错误!"
self.driver.quit()
博客首页BlogList.py
#博客首页
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogList:
url=""
driver=""
def __init__(self):
self url="http://8.137.19.140:9090/blog_list.html"
self.driver=BlogDriver.driver
self.driver.get(self.url)
#测试首页
#登录情况下
def ListTestByLogin(self):
#查找标题是否存在
self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > div.title")
#查看内容是否存在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.desc")
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a")
博客详情页BlogDetail.py
#测试博客详情页
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogDeail:
url=""
driver =""
def __init__(self):
self.url="http://8.137.19.140:9090/blog_detail.html?blogId=158477"
self.driver=BlogDriver.driver
self.driver.get(self.url)
#登录状态下
def DetailTestByLogin(self):
#检查标题
self.driver.find_element(By.Css_SELECTOR,"body > div.container > div.right > div > div.title")
#检查时间
self.driver.find_element(By.Css_SELECTOR, "body > div.container > div.right > div > div.date")
#检查内容
self.driver.find_element(By.CSS_SELECTOR,"#detail > p")
#屏幕截图
BlogDriver.getScreeShot()
博客编辑页BlogEdit.py
#博客编辑页面
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogEdit:
url=""
driver=""
def __init__(self):
self.url="http://8.137.19.140:9090/blog_edit.html"
self.driver=BlogDriver.driver
self.driver.get(self.url)
#测试登录状态下编辑页面
def EditSucTestBlogin(self):
#找到标题
self.driver.find_element(By.CSS_SELECTOR,"#title").send_kedys("MrGaomq")
#找到编辑区,因为编辑区域为空,无法直接在编辑区域里写数据,所以可以选择点击菜单栏的横线给里面加入内容
#菜单栏出现bug,菜单栏里面的元素是非法的,导致无法点击,因为横线有许多标签,试了这些标签依然会抱错,所以这个菜单栏的元素虽然可以点击但是无法定位的
self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(21) > a").click()
#直接点击发布按钮发布博客 这里需要主要因为点击按钮会导致页面进行跳转,因为页面跳转需要加载时间,可能会出现代码执行速度比页面渲染更快导致元素查找不到,所以需要添加等待,这里添加的隐式等待,建议添加隐式等待,因为隐式等待作用域是在driver整个生命周期
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
actual=self.driver.find_element(By.CSS_SELECTOR,"#body > div.container > div.right > div:nth-child(1) > div.desc").text
assert actual=="MrGaomq"
BlogDriver.getScreeShot()
博客首页测试脚本RunTest.py
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
from tests import BlogEdit
from common.Utils import BlogDriver
#if __name__ == "__main__"表示程序的执行入口
if __name__ == "__main__":
BlogLogin.BlogLogin().LoginFailTest()
BlogLogin.BlogLogin().LoginSucTest()
#登录成功后调用博客首页测试首页用例
BlogList.BlogList().ListTestByLogin()
BlogDetail.BlogDeail().DetailTestByLogin()
BlogEdit.BlogEdit().EditSucTestBlogin()
BlogList.driver.quit()
兼容性测试
测试场景一:使用安卓手机测试博客系统
预期结果:博客系统各功能能够在安卓手机正常使用
实际结果:博客系统各功能能够在安卓手机正常使用
.
测试场景二:使用Edge浏览器测试博客系统
预期结果:博客系统各功能能够在Edge浏览器正常使用
实际结果:博客系统各功能能够在Edge浏览器正常使用
.
测试场景三:使用谷歌浏览器测试博客系统
预期结果:博客系统各功能能够在谷歌浏览器正常使用
实际结果:博客系统各功能能够在谷歌浏览器正常使用
安全测试
密码隐藏
测试场景一:输入密码加密
预期结果:输入的密码会在页面中以 .号显示
实际结果:输入的密码会在页面中以 .号显示
SQL注入
万能登录
测试场景一:对用户名输入' OR'1'='1 密码输入' OR '1'='1
预期结果:系统应提示错误,不应直接登录成功
实际结果:系统应提示错误,未直接登录成功
注释截断
测试场景二:对用户名输入admin' -- 密码随意输入
预期结果:系统应提示错误,不应绕过密码登录
实际结果:系统应提示错误,未绕过密码登录
错误回显
测试场景三:对用户名输入' OR 1=1# 密码输入test
预期结果:页面应提示统一错误,不应显示 SQL 报错信息
实际结果:页面应提示统一错误,未显示 SQL 报错信息
Bug描述
1:登录页面->页面按钮->点击主页按钮
bug级别:一般
bug出现频率:高
bug描述:在登录页面中点击主页按钮页面会刷新,但是不会进入个人主页以及并未提示用户未登录
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:在登录页面中点击主页按钮
2:登录页面->页面按钮->点击写博客按钮
bug级别:一般
bug出现频率:高
bug描述:在登录页面中点击写博客按钮页面会跳转到博客编辑页,点击发布文章后页面会跳回登录页面但是不会提示用户未登录
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:在登录页面中点击写博客按钮
3:个人首页->页面按钮->点击GitHub链接
bug级别:严重
bug出现频率:高
bug描述:个人主页中点击GitHub地址会跳转到非GitHub网页,缺少对跳转链接审核
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:在个人页面中点击GitHub地址
4:个人首页->页面按钮->点击文章按钮
bug级别:严重
bug出现频率:高
bug描述:个人主页中点击文章按钮未跳转到文章页面
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:在个人页面中点击文章按钮
5:个人首页->页面按钮->点击分类按钮
bug级别:严重
bug出现频率:高
bug描述:个人主页中点击文章按钮未跳转到文章分类页面
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:在个人页面中点击分类按钮
6:个人首页->页面信息->文章数量
bug级别:严重
bug出现频率:高
bug描述:个人首页中文章数量与实际数量不匹配
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:个人首页观察文章数量
7:个人首页->页面信息->文章分类
bug级别:严重
bug出现频率:高
bug描述:个人首页中文章分类数量与实际数量不匹配
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:个人首页观察文章分类数量
8:博客编辑页->异常发布博客->不写标题,点击发布博客
bug级别:严重
bug出现频率:高
bug描述:博客编辑页面中不写标题发布博客提示内容未空
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:博客编辑页面中不写标题,点击发布博客
9:博客编辑页->异常发布博客->不写内容,点击发布博客
bug级别:严重
bug出现频率:高
bug描述:博客编辑页面中不写标题发布博客提示内容未空
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:博客编辑页面中不写标题,点击发布博客
10:博客编辑页->文本小工具->链接->输入不存在的链接
bug级别:严重
bug出现频率:高
bug描述:博客编辑页面中输入不存在的链接未进行任何提示
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:博客编辑页面点击链接,输入不存在的链接
11:博客编辑页->文本小工具->图片
bug级别:严重
bug出现频率:高
bug描述:博客编辑页面中输入图片地址和链接后未出现图片
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:博客编辑页面点击图片,输入图片地址和链接
12:博客编辑页->文本小工具->表情
bug级别:严重
bug出现频率:高
bug描述:博客编辑页面中无法使用表情按钮
测试环境:windows11 谷歌139.0.7258.128(正式版本) (64 位)
复现步骤:博客编辑页面点击表情后出现错误弹窗
更多推荐
所有评论(0)