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

博客系统测试

一、项目概述

1.项目背景

该博客系统的研发背景,核心是为用户提供一个简单、可落地的内容管理与分享工具,适配基础的博客使用场景需求。从登录页呈现的“主页、写博客、登录”核心入口来看,其研发背景可进一步明确:一方面,针对有基础博客需求的用户(如个人记录、简单内容分享),避免复杂系统的使用门槛,以极简功能模块(登录验证、内容创作、首页浏览)快速实现核心需求。

2.项目核心功能

3.测试目的

测试该博客系统的目的是验证其核心功能的完整性、可用性与稳定性,确保用户能顺畅完成“登录-创作-浏览-退出”的全流程操作。
 具体来说,需通过测试确认:

3.1 功能测试


 登录功能:账号(zhangsan)和密码(123456)能正常验证,保障用户身份识别的准确性;
 写博客功能:可对博客标题、内容进行编辑,满足用户创作内容的基础需求;
 主页功能:能正确列出所有编辑且发布过的博客,实现内容展示的完整性;
 退出登录功能:点击注销可成功退出,保障账号使用的安全性。

3.2 性能测试

目的是验证系统在高并发、大数据量场景下的响应速度与稳定性。例如,模拟多个用户同时登录、创作博客,测试系统是否出现页面卡顿、超时;验证大量博客内容加载时主页的渲染速度,确保用户浏览体验不受影响。

3.3 安全性测试
 

重点检测系统的账号安全与数据防护能力。比如,尝试输入错误账号密码时的防暴力破解机制(如多次错误后锁定);检查“退出登录”后是否彻底清除会话,防止账号被冒用;验证博客内容是否存在XSS注入风险(如在内容中插入恶意脚本是否被过滤)。


 
3.4 界面测试


 确保系统界面的视觉一致性与交互合理性。例如,登录页、写博客页、主页的布局是否清晰,按钮、输入框等元素的样式是否统一;点击“写博客”“主页”等入口时的跳转是否流畅,无界面错位、文字乱码等问题。


 
3.5 兼容性测试


验证系统在不同浏览器(Chrome、Firefox、Edge等)、不同设备(PC端、移动端)上的适配性。比如,在手机浏览器中访问系统,检查登录页、写博客界面的显示是否正常,功能是否可用;测试不同浏览器下博客内容的排版是否一致。


 
3.6 易用性测试


 评估系统操作的便捷性。例如,登录流程是否简洁(账号密码输入后是否一键登录);写博客时标题、内容编辑区域的交互是否直观,是否有清晰的操作提示;主页博客列表的信息展示是否易懂,用户能否快速找到目标内容。

二、测试用例

若以上图片不清晰,可打开以下链接,下载观看。

https://gitee.com/tgxqqcom/test/commit/b1af5d15893d9e246385921e8e51b2fbf0a50262

三、手动测试

1.登录

1.1 打开方式

1.2 登录成功

1.3 登录失败

账号和(或)密码为空:

账户和密码非空(错误的账号和正确的密码)

账户和密码非空(正确的账户和错误的密码):

账户和密码非空(错误的账户,错误的密码):

2.主页

2.1 打开方式

2.2 查看博客全文

查看别人发布的博客:

查看自己发布的博客

查看自己发布的博客(编辑更新成功):

查看自己发布的博客(编辑更新失败):

查看自己发布的博客(删除成功):

查看自己发布的博客(删除不成功):

3.写博客

3.1 编辑发布成功

3.2 编辑发布失败:

未填写标题:

未点击发布文章:

4.退出登录

四、自动化测试

Utills.py

#创建一个浏览器对象
from datetime import datetimefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerclass Driver:Driver=""def __init__(self):self.driver = webdriver.Chrome(service=Service(ChromDriverManager().install()),options=options)
def getScreeShot(self):#创建屏幕截图#图片名称dirname=datetime.datetime.now().strftime("%Y-%m-%d")#判断dirname文件夹是否已经存在,若不存在则创建文件夹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)BlogDriver=Driver()

BlogLogin.py:

from m selenium.webdriver.common.by import By
from common.Utils import BlogDriver
import time#测试博客登录页面
class BlogLogin:url=""driver=""def __init__(self):self.url="http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driverself.driver.get(self.url)#成功登录的测试用例
def LoginSucTest(self):self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#能够找到博客主页用户的昵称,说明登录成功,否则登录失败self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")#self.driver.quit()login=BlogLogin()
login.LoginSucTest()#登录失败的测试用例
#错误的账号和正确的密码
def LoginFailTest(self):time.sleep(2)#若连续多次的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("zhang")time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#检查是否登录失败actual=self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > img")#断言检测一下是否符合预期assert actual == self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > img")self.driver.quit()

RunTest.py

from tests import BlogLogin
from tests import BlogList
from common.Utils import BlogDriver
from tests.BlogDetailTest import BlogDeailif __name__ == '__main__':BlogLogin.BlogLogin().LoginFailTest()BlogLogin.BlogLogin().LoginSucTest()#登录成功之后就可以调用博客主页测试主页(列表页)的用例(登录状态)BlogList.BlogList().ListTestByLogin()#登录成功后,调用博客详情页BlogDeail.BlogDeail().DetailTestBylogin()#指定浏览器退出BlogDriver.driver.quit()

BlogList.py

from common.Utils import  BlogDriver#博客主页测试用例
class BlogList:url = ""driver = ""def __init__(self, url):self.url = "http://8.137.19.140:9090/blog_list.html"self.driver = BlogDriver.driverself.driver.get(self.url)#测试首页(登录情况下)def ListTestByLogin(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")#添加屏幕截图BlogDriver.getScreeShot()

BlogDetail.py

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.driverself.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 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.driverself.driver.get(self.url)#正确发布博客(登录状态下)def EditSucTestByLogin(self):self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试创建")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(10)actual = self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > div.title").textassert actual == "自动化测试创建"#屏幕截图BlogDriver.getScreeShot()

五、兼容性测试

1.浏览器兼容

2.操作系统兼容性

3.设备兼容性

笔记本:

手机:

平板:

4.分辨率兼容性

六、性能测试

1.博客登录页

1.1 postman下发送请求

1.2 jmeter下发送请求

2.博客列表页

2.1 postman发送请求:

2.2 jmeter 下发送请求

3.博客用户信息

3.1 postman下接口请求

3.2 jmeter下接口请求

4.博客详情页

4.1 postman下接口请求

4.2 jmeter下接口请求

场景一:写的博客删除了,虽然详情页请求虽然成功,响应数据有问题

我们就可以提取用户列表中的博客ID,加入信息头管理器。

场景二:我们需要把博客详情页的博客ID写死,当有若干详情页时,我们总不能去一个一个改吧,

5.博客编辑页

5.1 postman 下的接口请求

5.2  jmeter 下接口请求

6.压力测试

6.1 每秒事务数(TPS)监控

6.2 随时间变化的响应时间监控

6.3 随时间变化的活跃线程数监控

6.4 聚合报告

6.5 步进线程组

七、bug描述

bug级别:严重

bug 复现:点开浏览器开发者工具,login接口的负载中,账户和密码,密码明文显示。

风险点:登录请求中密码以明文形式(123456)在网络中传输,若被攻击者通过抓包工具(如浏览器开发者工具、Wireshark等)拦截,可直接获取用户账号密码,进而非法登录系统、篡改用户博客数据,甚至可能通过该账号信息横向攻击用户其他关联平台(如用户复用密码的情况)。
安全合规性:违反了密码传输的保密性原则,不符合《网络安全法》《个人信息保护法》中关于用户敏感信息(密码属于核心敏感信息)“加密传输、安全存储”的要求,存在用户数据泄露的重大风险。

改进建议:
1. 传输层加密:启用HTTPS协议,通过SSL/TLS加密通信链路,避免明文数据被中间人窃取。
2. 密码存储与传输双加密:前端可对密码进行对称加密(如AES)后传输,后端再通过哈希算法(如BCrypt、SHA-256加盐哈希)存储密码,确保传输和存储环节均无明文风险。
3. 增加安全校验:如登录时加入验证码、风控策略(异常登录IP拦截)等,进一步降低撞库、暴力破解风险。

八、总结

该博客系统测试从功能、性能、安全、兼容性、易用性等多维度开展。功能测试覆盖登录、博客增删改查、分类管理等核心流程,确保功能完整;性能测试关注并发、响应时间等,保障系统负载下稳定;安全性存在问题;兼容性测试适配多浏览器、设备,实现全域访问;易用性测试优化界面交互,提升操作体验。多维度测试确保系统功能稳定、性能达标、用户体验良好,为用户打造顺畅的博客创作与浏览环境。

http://www.dtcms.com/a/491478.html

相关文章:

  • 高德地图电子围栏/地图选区/地图打点
  • 自己动手建设网站过程dede珠宝商城网站源码
  • Git的分支
  • 基础拓展
  • 手机微网站建设河南网站建设的详细策划
  • 剧本杀小程序系统开发:内容生态与商业模式的双轮驱动
  • 网站备案表不会写引流网站怎么做
  • 【系统分析师】写作框架:数据灾务技术与应用
  • 香港云服务器域名无法访问的原因
  • 荆门网站建设服务上海网站制作网络推广方法
  • 系统那个网站好什么是网站平台开发
  • 网站管理后台地址深圳做网站排名
  • 软件测试及 AI+测试
  • oj字符串,求助讨论帖
  • 鸿蒙app开发中 class类中的 访问修饰符和静态修饰符 等这些命名的含义 以及用法
  • 大模型-AIGC技术在文本生成与音频生成领域的应用
  • 国内产品网站1688利用腾讯云建设网站
  • 下载免费网站模板下载移动网站建设机构
  • 公司网站怎么建温泉网站建设
  • error: can‘t find Rust compiler
  • 关于力扣第 167 场双周赛的赛后总结 第三四题
  • 网站开发h5技术两学一做网站源码
  • SpringBoot-自动配置原理
  • AI应用开发001-Conda和Jupyter Lab介绍
  • 在 Android Shell 终端上直接运行 OPENPPP2 网关路由配置指南
  • debug - MDK - arm-none-eabi - 从MDK工程做一个makefile工程出来
  • 郑州外贸网站建设商家内网网站开发报价
  • xxl-job pg数据库适配
  • OSPF路由协议重点总结
  • QT6中QToolBox功能与应用