博客系统测试
一、项目概述
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拦截)等,进一步降低撞库、暴力破解风险。
八、总结
该博客系统测试从功能、性能、安全、兼容性、易用性等多维度开展。功能测试覆盖登录、博客增删改查、分类管理等核心流程,确保功能完整;性能测试关注并发、响应时间等,保障系统负载下稳定;安全性存在问题;兼容性测试适配多浏览器、设备,实现全域访问;易用性测试优化界面交互,提升操作体验。多维度测试确保系统功能稳定、性能达标、用户体验良好,为用户打造顺畅的博客创作与浏览环境。