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

个人博客系统-测试报告

目录

一、项目概述

1.1 项目背景

1.2 项目简介

1.3 测试环境

二、测试用例

三、手动测试

四、自动化测试

五、兼容性测试

六、性能测试

七、测试总结


一、项目概述

1.1 项目背景

个人博客系统是一种用于发布、管理和分享个人内容的网络平台。随着互联网的普及,越来越多的人希望拥有一个专属的在线空间,用于记录生活、分享见解或展示专业技能。传统的社交媒体平台虽然提供内容发布功能,但往往缺乏个性化定制和独立性。因此,个人博客系统成为许多用户的首选方案。

1.2 项目简介

该个人博客系统主要实现了以下几个页面的功能:

  1. 登录功能:用户名以及密码已经在后端写入了数据库,没有实现账户注册功能,即:用户名以及密码是已经存在的。登录成功后就会跳转到列表页面。该页面在右上角存在主页和写博客两个按钮,但是在未登录情况下点击主页会跳转到登录页面,点击编辑会跳转至编辑页面面,但编辑页面点击发布还是会回到登录页面。
  2. 列表页面:可以在列表页查看有限数量的博客简介,其包括博客标题、发布时间以及内容概要。在左侧可以看到登录的用户以及文章数、分类数等的模块。在右上角有主页、写博客和注销三个功能:主页即列表页,写博客即博客编辑页,注销即注销用户,回到登录页面。
  3. 详情页面:在列表页面点击“查看全文”按钮就会跳转到详情页,此时就可以看到该篇博客的完整内容。在右上角同样有主页、写博客、注销三个功能,在内容下面还有编辑和删除连个按钮,编辑是跳转至编辑页面,编辑该博客,删除即删除该篇博客,删除之后就会跳转到列表页面,该篇博客就被成功删除。
  4. 写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到列表页。

1.3 测试环境

  1. 操作系统:Windows 11 
  2. 浏览器:Chrome、Edge
  3. 测试工具:Selenium、JMeter、postman

二、测试用例

三、手动测试

实际执行测试的部分操作步骤/截图

1.异常登录会出现警告:

2.正常登录后跳转至博客列表页:

3.写博客测试:

4.发布成功跳转至博客列表页

6.进入详情页,并点击“删除”之后并确认

7.回到博客列表页

7.注销:点击“注销”后回到登录页

四、自动化测试

自动化测试项目代码文件结构:

1.驱动类(Utils.py)

import datetime
import inspect
import os.path
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerclass Driver:driver = ""def __init__(self):# options = webdriver.ChromeOptions()options = webdriver.EdgeOptions()options.page_load_strategy = 'eager'# 启动浏览器并应用配置# self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)self.driver = webdriver.Edge(options=options)self.driver.implicitly_wait(10)def getScreeShot(self):# 创建屏幕截图# 图片文件名称:./2024-05-08-173456.pngdirname = datetime.datetime.now().strftime("%Y-%m-%d")# 判断dirname文件夹是否已经存在,若不存在则创建文件夹# ../images/2024-05-08if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)# 2024-05-08-173456.png# 图片路径:../images/2024-05-08/调用方法-2024-05-08-173456.png# 图片路径:../images/2024-05-08/LoginSucTest-2024-05-08-173456.png# 图片路径:../images/2024-05-08/LoginFailTest-2024-05-08-173456.png# filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"filename = inspect.currentframe().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()

2.博客登录页类(BlogLogin.py)

import time
from time import sleepfrom selenium.webdriver.common.by import Byfrom commom.Utils import BlogDriverclass 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").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()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.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.title")# 屏幕截图BlogDriver.getScreeShot()self.driver.back()# 异常登录测试用例def LoginFailTest(self):# 若连续多次的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("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 检查是否登录失败time.sleep(1)# 有警告截不了图alert = self.driver.switch_to.alertalert.accept()

3.博客列表页类(BlogList.py)

from selenium.webdriver.common.by import Byfrom commom.Utils import BlogDriverclass BlogList:url = ""driver = ""def __init__(self):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: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")# 个人信息-检查昵称是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > h3")# ...# 屏幕截图BlogDriver.getScreeShot()# 未登录状况下def ListTestByNotLogin(self):# 未登录状态下会跳转至登录页面self.driver.find_element(By.CSS_SELECTOR, "#username")

4.博客详情页类(BlogDetail.py)

from selenium.webdriver.common.by import Byfrom commom.Utils import BlogDriverclass BlogDetail: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()# 未登陆状态下博客详情页的测试def DetailTestByNotLogin(self):# 未登录状态下会跳转至登录页面self.driver.find_element(By.CSS_SELECTOR, "#username")

5.博客编辑页类(BlogEdit.py)

import timefrom selenium.webdriver.common.by import Byfrom commom.Utils import BlogDriverclass 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 EditTestByLogin(self):self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试创建")# 找到编辑区域,输入关键词(编辑区域不可操作)# 可点击菜单栏元素再发布博客self.driver.find_element(By.CSS_SELECTOR, "#editor > div.editormd-toolbar > div > ul > li:nth-child(17) > a > i").click()# 休息一下,不然上面一句的点击好像会没点到一样time.sleep(1)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(2) > div.title").text# 这个断言看着来吧,不是自己的系统,如果有人再发博客,那我自动化发的博客不一定是第二篇,标题可能是其他的# assert actual == "自动化测试创建"# 屏幕截图BlogDriver.getScreeShot()# 未登录状况下def EditTestByNotLogin(self):# 未登录状态点击发布下会跳转至登录页面self.driver.find_element(By.CSS_SELECTOR, "#submit").click()self.driver.find_element(By.CSS_SELECTOR, "#username")

6.启动文件(RunTest.py)

from commom.Utils import BlogDriver
from tests.BlogDetail import BlogDetail
from tests.BlogEdit import BlogEdit
from tests.BlogLogin import BlogLogin
from tests.BlogList import BlogListif __name__ == "__main__":BlogLogin().LoginFailTest()# 未登录状态下其他页面的测试BlogList().ListTestByNotLogin()BlogDetail().DetailTestByNotLogin()BlogEdit().EditTestByNotLogin()BlogLogin().LoginSucTest()# 登陆成功之后其他页面的测试BlogList().ListTestByLogin()BlogDetail().DetailTestByLogin()BlogEdit().EditTestByLogin()# 指定浏览器的退出BlogDriver.driver.quit()

五、兼容性测试

测试场景一:在Windows11的Edge浏览器下进入问卷考试系统
预期结果:无异常且一切布局显示功能等与其一致

测试场景二:在Windows11的Chrome浏览器下进入问卷考试系统
预期结果:无异常且一切布局显示功能等与其一致

测试场景三:在Android中的浏览器下进入问卷考试系统
预期结果:无异常且一切布局显示功能等与其一致

六、性能测试

性能测试报告如下:

七、测试总结

本次测试结果功能测试一切正常,但性能测试暴露出系统列表页存在严重的性能瓶颈,如下图所示

可能原因是列表页需要请求所有博客数据,建议优先解决这个接口的性能问题,比如可以做分页,一次只请求一部分博客,不够的话再请求一部分,这样就可以避免数据库的全表查询,减少响应时间。


文章转载自:

http://sB9ci1PZ.jgnjL.cn
http://GLFlaSyL.jgnjL.cn
http://dj4vAcs1.jgnjL.cn
http://mutmGeLa.jgnjL.cn
http://u4AK8lOn.jgnjL.cn
http://PH9mx349.jgnjL.cn
http://z6kBJRxA.jgnjL.cn
http://jjm0nZD1.jgnjL.cn
http://VBtg3Os8.jgnjL.cn
http://hymbOCUZ.jgnjL.cn
http://cghd2Z0U.jgnjL.cn
http://gA6OZLZT.jgnjL.cn
http://CmPOdA3I.jgnjL.cn
http://mDleWsER.jgnjL.cn
http://KflqG2ef.jgnjL.cn
http://MFiK89oU.jgnjL.cn
http://KSZ9Eabt.jgnjL.cn
http://awVpH7TK.jgnjL.cn
http://b76SZy5w.jgnjL.cn
http://Qzyb9qLN.jgnjL.cn
http://xmGe9Y2m.jgnjL.cn
http://Xf25a1wu.jgnjL.cn
http://1RE99Ym1.jgnjL.cn
http://qXaxaB26.jgnjL.cn
http://FpaEVjv9.jgnjL.cn
http://1veSqq5z.jgnjL.cn
http://OzT9exMG.jgnjL.cn
http://Q1YUNoDZ.jgnjL.cn
http://NsAbCFXD.jgnjL.cn
http://dqXx7cBk.jgnjL.cn
http://www.dtcms.com/a/376818.html

相关文章:

  • 生活中的各种造型 参考多图
  • 独家 | 抖音生活服务调整:涂晴接管市场和达人运营,旭凯担任北部大区负责人
  • Spring Bean扫描
  • 第2讲 机器学习 - 导论
  • 【开题答辩全过程】以 基于Android的智慧旅游APP开发为例,包含答辩的问题和答案
  • Linux服务器的系统安全强化超详细教程
  • Dockerfile构建容器需要注意的事项。
  • YOLO 发展前景与创新点
  • 一个基于 .NET 开源、轻便的 Windows 优化工具,适用于 Win7 - Win11 最新版的优化!
  • RL【7-1】:Temporal-difference Learning
  • child_process 和 cluster的区别
  • 第十七篇|优尼塔斯东京校区的教育数据工程:学费函数、国籍网络与升学有向图
  • ES6 面试题及详细答案 80题 (33-40)-- Symbol与集合数据结构
  • DeepResearch(上)
  • 即时通讯小程序
  • Firefox Window 开发详解(二)
  • Chrome性能黑魔法:深入浅出PGO优化与实战指南
  • 【算法专题训练】20、LRU 缓存
  • 66. 加一 (编程基础0到1)(Leetcode)
  • 多任务相关概念
  • ubuntu 18.04 泰山派编译报错
  • 解决apk包体大于2G无法对齐和签名的问题
  • 运筹学——运输问题之表上作业法,西北角法,最小元素法
  • python版本管理和依赖管理的最佳实践,pyenv + uv
  • iPhon 17 推出
  • MySQL的常用命令
  • KEDA/HPA/VPA 三件套:ABP 后台作业的事件驱动伸缩
  • 金融中的异常收益率
  • 模型部署:(三)安卓端部署Yolov8-v6.0目标检测项目全流程记录
  • 阅读|史蒂芬·普拉达《C Primer Plus(第6版)》:数据和C