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

博客系统测试报告

文章目录

  • 目录
    • 1. 项目背景
    • 2. 项目简介
    • 3. 测试工具
    • 4. 测试用例
    • 5. 功能测试
    • 6. 性能测试
    • 7. 弱网测试
    • 8. 自动化测试
    • 9. bug简述
    • 10. 测试结论

目录

  • 项目背景
  • 项目简介
  • 测试工具
  • 测试用例
  • 功能测试
  • 性能测试
  • 弱网测试
  • 自动化测试
  • bug简述
  • 测试结论

1. 项目背景

为了将平时自己写的笔记、知识点进行记录和保存,从而编写了一个个人博客系统,这样就可以将个人笔记保存在网上,便于随时进行查看和复习。

2. 项目简介

博客系统共分为四个页面:博客登录页、博客列表页、博客详情页、博客编辑页。

在博客登录页,可以通过输入正确的账号和密码进行登录。

在博客列表页,我们可以查看用户信息和发布的博客。

在博客详情页,我们可以查看博客标题、博客发布时间、博客内容、编辑按钮、删除按钮。

在博客编辑页,我们可以通过填写标题和内容并点击发布按钮来发布博客。

3. 测试工具

在进行性能测试时,我们会用到jmeter工具;在进行弱网测试时,我们会用到fiddler工具;在进行自动化测试时,我们会用到PyCharm以及selenium库来编写自动化脚本。

4. 测试用例

测试用例

5. 功能测试

错误密码

错误账号

博客列表页

博客详情页

博客编辑页

6. 性能测试

性能测试

性能测试报告(1)

性能测试报告(2)

性能测试报告(3)

性能测试报告(4)

性能测试报告(5)

7. 弱网测试

弱网测试

在弱网情况下,博客列表页加载会变慢,先加载出用户信息,再加载出博客列表,但页面并不会出现错误。

弱网下的博客列表页(1)

弱网下的博客列表页(2)

8. 自动化测试

自动化测试

# common/Utils.pyimport datetime
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()self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)self.driver.implicitly_wait(2)def getScreenShot(self):dirname = datetime.datetime.now().strftime("%Y-%m-%d")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()
# tests/BlogLogin.pyfrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom common.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("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()WebDriverWait(self.driver,3).until(EC.title_is("博客列表页"))BlogDriver.getScreenShot()self.driver.back()def LoginFailTest(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("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()WebDriverWait(self.driver,3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()BlogDriver.getScreenShot()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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()WebDriverWait(self.driver, 3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()BlogDriver.getScreenShot()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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()WebDriverWait(self.driver, 3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()BlogDriver.getScreenShot()
# tests/BlogList.pyfrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom common.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.left > div > img")# 检查昵称是否存在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.left > div > div:nth-child(5) > span:nth-child(1)")# 检查分类数量是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(5) > span:nth-child(2)")# 检查博客标题是否存在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, "body > div.container > div.right > div > div.desc")# 检查查看全文按钮是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > a")BlogDriver.getScreenShot()def ListTestByNotLogin(self):WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))BlogDriver.getScreenShot()
# tests/BlogDetail.pyfrom common.Utils import BlogDriverclass BlogDetail:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=46533"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,"#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2")# 检查博客编辑按钮是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)")# 检查博客删除按钮是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)")BlogDriver.getScreenShot()def DetailTestByNotLogin(self):WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))BlogDriver.getScreenShot()
# tests/BlogEdit.pyimport datetime
import timefrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom common.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 EditSucTestByLogin(self):self.driver.get("http://8.137.19.140:9090/blog_list.html")# 计算博客数量elementsbegin = self.driver.find_elements(By.CSS_SELECTOR,"body > div.container > div.right > div")countbegin = len(elementsbegin)# 返回博客编辑页self.driver.back()# 清空标题self.driver.find_element(By.CSS_SELECTOR,"#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 点击发布按钮self.driver.find_element(By.CSS_SELECTOR,"#submit").click()# 计算博客数量elementsend = self.driver.find_elements(By.CSS_SELECTOR, "body > div.container > div.right > div")countend = len(elementsend)assert countbegin == countend - 1BlogDriver.getScreenShot()# 返回博客编辑页self.driver.back()def EditFailTestByLogin(self):# 不写标题# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 点击发布按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出现弹窗,点击确定关闭弹窗WebDriverWait(self.driver,3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()# 屏幕截图BlogDriver.getScreenShot()# 不写内容# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 点击发布按钮time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出现弹窗,点击确定关闭弹窗WebDriverWait(self.driver, 3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()# 屏幕截图BlogDriver.getScreenShot()# 不点击发布按钮# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 检查是否还在当前页面title = self.driver.titleassert title == "博客编辑页"# 屏幕截图BlogDriver.getScreenShot()def EditTestByNotLogin(self):# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 点击发布按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 检查是否返回博客登陆页WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))
# tests/RunTest.pyfrom common.Utils import BlogDriver
from tests import BlogLogin, BlogList, BlogDetail, BlogEditif __name__ == "__main__":# 未登录状态BlogLogin.BlogLogin().LoginFailTest()BlogList.BlogList().ListTestByNotLogin()BlogDetail.BlogDetail().DetailTestByNotLogin()BlogEdit.BlogEdit().EditTestByNotLogin()# 登录状态BlogLogin.BlogLogin().LoginSucTest()BlogList.BlogList().ListTestByLogin()BlogDetail.BlogDetail().DetailTestByLogin()BlogEdit.BlogEdit().EditFailTestByLogin()BlogEdit.BlogEdit().EditSucTestByLogin()BlogDriver.driver.quit()

9. bug简述

在功能测试时发现博客列表页的文章数量显示是一个固定值,不会随着博客数量的变化而变化。

bug

10. 测试结论

通过对博客系统进行测试,可以得出博客系统功能方面存在一个bug;在性能方面也可以达到标准,在并发较多时不会出现异常,可靠性较好,响应时间在正常范围内,吞吐量可以达标;在弱网状态下,页面也不会发生错误;界面美观;用户使用简单易上手;可以兼容不同浏览器;在输入密码时有掩码行为,可以很好的保护用户隐私。

http://www.xdnf.cn/news/297793.html

相关文章:

  • 在命令行终端中快速打开npm包官网
  • MySQL从入门到精通(二):Windows和Mac版本MySQL安装教程
  • 【STM32项目实战】一文了解单片机的SPI驱动外设功能
  • (十)深入了解AVFoundation-采集:录制视频功能的实现
  • HTTP 与 HTTPS 的深度剖析:差异、原理与应用场景
  • Day17 聚类算法(K-Means、DBSCAN、层次聚类)
  • MacOS+VSCODE 安装esp-adf详细流程
  • Three.js和WebGL区别、应用建议
  • 【奔跑吧!Linux 内核(第二版)】第1章:Linux 系统基础知识
  • 【测试开发】概念篇 - 从理解需求到认识常见开发、测试模型
  • 第二节:Vben Admin 最新 v5.0 对接后端登录接口(上)
  • 用OMS从MySQL迁移到OceanBase,字符集utf8与utf8mb4的差异
  • 如何保障服务器租用中的数据安全?
  • 基于 Trae 的单细胞 RNA 测序分析与可视化
  • Linux下的好玩的命令
  • Linux:进程间通信---命名管道共享内存
  • Android组件化 -> Debug模式下,本地构建module模块的AAR和APK
  • Nginx安全防护与HTTPS部署
  • 如何搭建spark yarn模式集群的集群
  • OpenKylin安装Elastic Search8
  • 多线程“CPU 飙高”问题:如何确保配置的线程数与CPU核数匹配(Java、GoLang、Python )中的最佳实践解决方案
  • 数据分析指标体系
  • 深度剖析:可视化如何重塑驾驶舱信息交互模式
  • [Linux]多线程(一)充分理解线程库
  • 天文探秘学习小结
  • 【Linux系统】探索进程等待与程序替换的奥秘
  • Java引用RabbitMQ快速入门
  • 2025 后端自学UNIAPP【项目实战:旅游项目】1、创建项目框架
  • Linux之基础开发工具二(makefile,git,gdb)
  • react naive 网络框架源码解析