
🔥个人主页:K 旺仔小馒头
🍉学习方向:C/C++方向学习者
📖个人专栏:《C语言》《数据结构与算法》《C++知识分享》《C语言实战编程》《算法题从优选到贪心的解题技巧》《测试报告》
⭐️人生格言:"何时葡萄先熟透,你要静候再静候"

目录
[一. 项目背景](#一. 项目背景)
[二. 项目简介](#二. 项目简介)
[三. 测试用例](#三. 测试用例)
[四. 测试工具](#四. 测试工具)
[五. 设计到的测试动作/类型](#五. 设计到的测试动作/类型)
[5.1 功能测试](#5.1 功能测试)
[5.2 自动化测试](#5.2 自动化测试)
[5.3 性能测试](#5.3 性能测试)
[六. 功能测试](#六. 功能测试)
[6.1 登录页面进行测试](#6.1 登录页面进行测试)
[6.2 博客首页进行测试](#6.2 博客首页进行测试)
[6.3 博客详情页进行测试](#6.3 博客详情页进行测试)
[6.4 博客编辑页进行测试](#6.4 博客编辑页进行测试)
[七. 自动化测试](#七. 自动化测试)
[7.1 创建公共模块](#7.1 创建公共模块)
[7.2 博客登录页](#7.2 博客登录页)
[7.3 博客首页](#7.3 博客首页)
[7.4 博客详情页](#7.4 博客详情页)
[7.5 博客编辑页](#7.5 博客编辑页)
[7.6 整体运行](#7.6 整体运行)
[八. 性能测试](#八. 性能测试)
[8.1 测试目的](#8.1 测试目的)
[8.2 测试环境](#8.2 测试环境)
[8.3 测试结果分析](#8.3 测试结果分析)
[九. 项目测试bug简述](#九. 项目测试bug简述)
[十. 测试结论](#十. 测试结论)
前言:
本次测试旨在验证博客系统功能完整性与运行稳定性,重点覆盖登录、内容展示、编辑发布等核心流程。通过系统性测试识别潜在缺陷,本报告将记录测试详情与评估结果,为系统上线使用提供专业数据支撑。
一. 项目背景
本博客系统核心用于个人学习笔记、技术资料、经验心得的统一存储与规范化管理。依托登录页 保障个人内容安全私密,通过编辑页 完成笔记新增、修改与归档存储;再借助首页 聚合展示、详情页完整阅览,解决了以往内容零散存于备忘录、截图、本地文件,查找困难、难以复盘复用的问题,方便个人长期沉淀与日常管理。
二. 项目简介
该博客系统主要实现了用户登录、博客列表展示、博客详情查看、博客编辑与发布等功能。
1. 登录功能
系统使用预先在数据库中设置好的账号和密码进行登录,不提供用户注册功能。输入正确的用户名和密码,登录成功后跳转到博客首页。
2. 博客首页(列表页)
登录后进入博客首页,页面展示所有博客的标题、发布时间和内容简介。页面右上角有主页、写博客、注销三个按钮:
- 主页:返回博客列表页面
- 写博客:进入博客编辑页面
- 注销:退出当前登录状态,返回登录页面
3. 博客详情页
在首页点击 "查看全文",可以进入博客详情页,查看博客的完整内容。页面右上角同样有主页、写博客、注销按钮,方便进行页面切换。
4. 博客编辑与发布功能
在登录状态下,点击任意页面的 "写博客",进入博客编辑页面。可以输入博客标题和正文内容,编辑完成后点击 "发布文章",文章会保存并发布,发布成功后跳回博客首页,新博客会显示在列表中。
三. 测试用例

四. 测试工具
- Chrome + F12:手工功能测试与接口调试
- Postman:接口功能与权限验证
- JMeter:接口并发与性能测试
- Selenium:UI自动化回归测试
- XMind / Excel:测试用例设计与思路梳理
五. 设计到的测试动作/类型
功能测试、性能测试、自动化测试
5.1 功能测试
- 覆盖范围:用户登录 / 注销、权限控制(未登录访问拦截)、博客列表 / 详情页查看、文章发布 / 编辑 / 删除等。
- 问题发现:共发现 2 个问题,包括未登录发布操作无提示、博客首页内文章及分类信息有误。
5.2 自动化测试
- 覆盖范围:登录、查看列表、访问详情、发布文章的核心流程自动化用例。
- 问题发现:无功能异常,可稳定执行回归校验。
5.3 性能测试
- 覆盖范围:登录接口、博客列表查询接口的并发与响应时间测试。
- 问题发现:无严重性能瓶颈,接口响应稳定,符合预期。
六. 功能测试
6.1 登录页面进行测试
1) 输入正确的账号和密码:

进入首页:

- 若输入错误的账号和正确的密码:(会有弹窗出现)

- 若输入正确的账号和错误的密码:(会有弹窗出现)

- 若输入错误的账号和错误的密码:(会有弹窗出现)

- 若输入账号和密码为空:(会有弹窗出现)

- 登录界面按钮测试
① 点击 "主页" 按钮:

实际结果:(自动跳转到登录界面)

② 点击 "写博客" 按钮:

实际结果:(能打开编辑页,能填写内容,但点击发布无任何效果,无法保存,无法上架文章)

6.2 博客首页进行测试
1)在登录状态下:(注意:个人信息中文章及分类的信息有误)

点击 "查看全文",实际结果:
2)在未登录状态下:(自动跳转到登录界面)

6.3 博客详情页进行测试
1)在登录状态下:

① 点击 "编辑",实际结果:


② 点击 "删除",实际结果:


2)在未登录状态下:(自动跳转到登录界面)

6.4 博客编辑页进行测试
1)在登录状态下:
① 页面元素检查

② 正常发布博客


③ 异常发布博客
不写标题:(出现弹窗)

不写内容:(出现弹窗)

不写标题及内容:

不点击发布按钮:(发不出去文章)

2)在未登录状态下:(能打开编辑页,能填写内容,但点击发布无任何效果,无法保存,无法上架文章)

七. 自动化测试
7.1 创建公共模块
python
# 创建一个浏览器对象
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class Driver:
driver = ""
def __init__(self):
options = webdriver.ChromeOptions()
# ChromeDriverManager().install()
# D:\\chromedriver-win64\\chromedriver.exe
self.driver=webdriver.Chrome(service=Service("D:\\chromedriver-win64\\chromedriver.exe"),options=options)
self.driver.implicitly_wait(2) #隐式等待
def getScreeShot(self):
# 创建屏幕截图
# 图片文件名称:./2026-03-25-133256.png
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
# 判断dirname文件夹是否已经存在,若不存在则创建文件夹
# ../images/2026-03-25
if not os.path.exists("../images/"+dirname):
os.mkdir("../images/"+dirname)
# 2026-03-25-133256.png
# 图片路径:../images/2026-03-25/调用方法-2026-03-25-133256.png
# 图片路径:../images/2026-03-25/LoginSucTest-2026-03-25-133256.png
# 图片路径:../images/2026-03-25/LoginFailTest-2026-03-25-133256.png
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()
7.2 博客登录页
python
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from common.Utils import BlogDriver
# 测试博客登录页面
class BlogLogin:
url = ""
driver = ""
def __init__(self):
self.url = "http://49.235.61.184:19090/blog_login.html"
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")
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
wait = WebDriverWait(self.driver,3)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"body > div.container > div.left > div > h3")))
# alert = self.driver.switch_to.alert
# alert.accept()
# 能够找到博客首页用户的昵称,说明登录成功,否则登录失败
# self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
# time.sleep(3) #调试完之后一定要给它关掉
# 添加屏幕截图
BlogDriver.getScreeShot()
# 返回到登录页面
# self.driver.back()
# 异常登录的测试用例
def LoginFailTest1(self):
# time.sleep(2)
# 若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
# 错误的密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
# time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# time.sleep(2)
# 检查是否登录失败
wait = WebDriverWait(self.driver, 3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
# 添加屏幕截图
BlogDriver.getScreeShot()
# self.driver.quit()
def LoginFailTest2(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("")
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("")
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
wait = WebDriverWait(self.driver,3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
BlogDriver.getScreeShot()
def LoginCheckTest(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
wait = WebDriverWait(self.driver,3)
try:
user = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"#username")))
# print("账号框正常")
except:
print("账号框异常")
try:
pwd = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"#password")))
# print("密码框正常")
except:
print("密码框异常")
try:
sbt = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#submit")))
# print("提交按钮正常")
except:
print("提交按钮异常")
try:
home = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)")))
# print("主页按钮正常")
except:
print("主页按钮异常")
try:
write = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)")))
# print("写博客按钮正常")
except:
print("写博客按钮异常")
# login = BlogLogin()
# login.LoginSucTest()
# login.LoginFailTest1()
# login.LoginFailTest2()
# login.LoginTest()
7.3 博客首页
python
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from common.Utils import BlogDriver
# 博客首页测试用例
class BlogList:
url = ""
driver = ""
def __init__(self):
self.url = "http://49.235.61.184:19090/blog_list.html"
self.driver = BlogDriver.driver
self.driver.get(self.url)
# 测试首页(登录情况下)
# def ListTestByLogin(self):
# time.sleep(2)
# # 测试博客标题是否存在
# self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title")
# # 测试博客内容是否存在
# self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.desc")
# # 测试按钮是否存在
# self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > a")
#
# # 个人信息-检查昵称是否存在
# self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
#
# # 添加屏幕截图
# BlogDriver.getScreeShot()
def ListCheckTestByLogin(self):
wait = WebDriverWait(self.driver,3)
try:
pho = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"body > div.container > div.left > div > img")))
# print("头像正常")
except:
print("头像异常")
try:
name = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.left > div > h3")))
# print("昵称正常")
except:
print("昵称异常")
try:
atc = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")))
# print("文章正常")
except:
print("文章异常")
try:
tag = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")))
# print("分类正常")
except:
print("分类异常")
try:
title = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(2) > div.title")))
# print("博客标题正常")
except:
print("博客标题异常")
try:
date = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(2) > div.date")))
# print("博客发表时间正常")
except:
print("博客发表时间异常")
try:
cot = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(2) > div.desc")))
# print("博客内容正常")
except:
print("博客内容异常")
try:
view = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(2) > a")))
# print("查看全文按钮正常")
except:
print("查看全文按钮异常")
try:
home = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)")))
# print("主页按钮正常")
except:
print("主页按钮异常")
try:
write = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)")))
# print("写博客按钮正常")
except:
print("写博客按钮异常")
try:
out = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")))
# print("注销按钮正常")
except:
print("注销按钮异常")
# 测试首页(未登录情况下)
def ListFailTestByLogin(self):
# self.driver.back()
time.sleep(2)
# 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,"body > div.container-login > div > div:nth-child(2) > span")
self.driver.find_element(By.CSS_SELECTOR,"body > div.container-login > div > div:nth-child(3) > span")
self.driver.find_element(By.CSS_SELECTOR,"#submit")
BlogDriver.getScreeShot()
7.4 博客详情页
python
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from common.Utils import BlogDriver
#测试博客详情页
class BlogDetail:
url = ""
driver = ""
def __init__(self):
self.url = "http://49.235.61.184:19090/blog_detail.html?blogId=34004"
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")
# # 检查内容
# # time.sleep(1)
# self.driver.find_element(By.CSS_SELECTOR,"#h2--321321")
# # 屏幕截图
# # time.sleep(2)
# BlogDriver.getScreeShot()
def DetailCheckTestByLogin(self):
wait = WebDriverWait(self.driver, 3)
try:
title = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.right > div > div.title")))
# print("博客标题正常")
except:
print("博客标题异常")
try:
date = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.container > div.right > div > div.date")))
# print("博客发表时间正常")
except:
print("博客发表时间异常")
try:
cot = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#h2--321321")))
# print("博客内容正常")
except:
print("博客内容异常")
try:
edit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.container > div.right > div > div.operating > button:nth-child(1)")))
# print("编辑按钮正常")
except:
print("编辑按钮异常")
try:
dele = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.container > div.right > div > div.operating > button:nth-child(2)")))
# print("删除按钮正常")
except:
print("删除按钮异常")
try:
home = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.nav > a:nth-child(4)")))
# print("主页按钮正常")
except:
print("主页按钮异常")
try:
write = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)")))
# print("写博客按钮正常")
except:
print("写博客按钮异常")
try:
out = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")))
# print("注销按钮正常")
except:
print("注销按钮异常")
def DetailFailTestByLogin(self):
# self.driver.back()
# self.driver.back()
# self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "body > div.container-login > div > div:nth-child(2) > span")
self.driver.find_element(By.CSS_SELECTOR, "body > div.container-login > div > div:nth-child(3) > span")
self.driver.find_element(By.CSS_SELECTOR, "#submit ")
BlogDriver.getScreeShot()
7.5 博客编辑页
python
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# 模拟键盘导入两个包
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from common.Utils import BlogDriver
# 测试博客编辑页面
class BlogEdit:
url = ""
driver = ""
def __init__(self):
self.url = "http://49.235.61.184:19090/blog_edit.html"
self.driver = BlogDriver.driver
self.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()
# 点击完成之后出现页面的跳转,页面跳转需要加载时间,可能会出现代码执行的速度比页面渲染的速度要快,导致元素查找不到,因此可以添加等待
# 添加隐式等待和显示等待都可以,任选择一个
# 隐式等待:创建浏览器对象之后就可以加上,因为隐式等待的作用域在driver整个生命周期
# 显示等待:可以作用在当前代码中
time.sleep(2)
actual = self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(27) > div.title").text
assert actual == "自动化测试创建"
# 屏幕截图
BlogDriver.getScreeShot()
# 不写标题 写内容
def EditErrTestByLogin1(self):
self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
wait = WebDriverWait(self.driver, 3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
# 写标题 不写内容
def EditErrTestByLogin2(self):
# 模拟键盘
inputElement = self.driver.find_element(By.CSS_SELECTOR, "#title")
action = ActionChains(self.driver)
action.send_keys_to_element(inputElement, "啦啦啦").send_keys(Keys.TAB).send_keys(Keys.TAB).perform()
time.sleep(2)
# self.driver.switch_to.active_element
action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).send_keys(Keys.DELETE).perform()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
wait = WebDriverWait(self.driver, 3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
# 不写标题及内容 第一种写法
def EditErrTestByLogin3(self):
inputElement = self.driver.find_element(By.CSS_SELECTOR, "#title")
action = ActionChains(self.driver)
action.send_keys_to_element(inputElement, "").send_keys(Keys.TAB).send_keys(Keys.TAB).perform()
# time.sleep(2)
# self.driver.switch_to.active_element
action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).send_keys(Keys.DELETE).perform()
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
wait = WebDriverWait(self.driver, 3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
# 不写标题及内容 第二种写法(这种也可以运行出来)
def EditErrTestByLogin5(self):
self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("")
# inputElement = self.driver.find_element(By.CSS_SELECTOR, "#title")
action = ActionChains(self.driver)
#
# action.send_keys_to_element(inputElement, "啦啦啦").send_keys(Keys.TAB).send_keys(Keys.TAB).perform()
time.sleep(2)
# self.driver.switch_to.active_element
action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).send_keys(Keys.DELETE).perform()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
wait = WebDriverWait(self.driver, 3)
wait.until(EC.alert_is_present())
self.driver.switch_to.alert.accept()
# 不点击发布按钮
def EditErrTestByLogin4(self):
# time.sleep(2)
# 模拟键盘
inputElement = self.driver.find_element(By.CSS_SELECTOR, "#title")
action = ActionChains(self.driver)
action.send_keys_to_element(inputElement,"啦啦啦").send_keys(Keys.TAB).send_keys(Keys.TAB).perform()
# time.sleep(2)
self.driver.switch_to.active_element.send_keys("你可以!")
# time.sleep(2)
def EditCheckTestByLogin(self):
wait = WebDriverWait(self.driver, 3)
try:
title = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"#title")))
# print("博客标题输入框正常")
except:
print("博客标题输入框异常")
try:
con = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span")))
# print("博客内容输入区域正常")
except:
print("博客内容输入区域异常")
try:
arc = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#submit")))
# print("发布文章按钮正常")
except:
print("发布文章按钮异常")
try:
home = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)")))
# print("主页按钮正常")
except:
print("主页按钮异常")
try:
write = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)")))
# print("写博客按钮正常")
except:
print("写博客按钮异常")
try:
out = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")))
# print("注销按钮正常")
except:
print("注销按钮异常")
def EditFailTestByLogin(self):
# time.sleep(2)
# #submit 这个在前端里面是id选择器,每个页面是唯一的,同一个页面中没有重复的就行
# 不同的页面有重复的id选择器没什么问题,一个是登录页中的,另一个是发布博客页中的
# #submit:发布文章按钮
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.container-login > div > div:nth-child(2) > span")
self.driver.find_element(By.CSS_SELECTOR, "body > div.container-login > div > div:nth-child(3) > span")
# #submit:提交按钮
self.driver.find_element(By.CSS_SELECTOR, "#submit")
BlogDriver.getScreeShot()
7.6 整体运行
python
from tests import BlogList
from tests import BlogLogin
from tests import BlogDetail
from tests import BlogEdit
from common.Utils import BlogDriver
if __name__ == "__main__":
BlogLogin.BlogLogin().LoginFailTest1()
BlogLogin.BlogLogin().LoginFailTest2()
BlogList.BlogList().ListFailTestByLogin()
BlogDetail.BlogDetail().DetailFailTestByLogin()
BlogEdit.BlogEdit().EditFailTestByLogin()
BlogLogin.BlogLogin().LoginSucTest()
BlogLogin.BlogLogin().LoginCheckTest()
#
# # 登录成功之后就可以调用博客首页测试首页的用例(登录状态)
# BlogList.BlogList().ListTestByLogin()
BlogList.BlogList().ListCheckTestByLogin()
# 测试登录状态下的博客详情页
# BlogDetail.BlogDetail().DetailTestByLogin()
BlogDetail.BlogDetail().DetailCheckTestByLogin()
# 博客编辑页面
BlogEdit.BlogEdit().EditSucTestByLogin()
BlogEdit.BlogEdit().EditErrTestByLogin1()
BlogEdit.BlogEdit().EditErrTestByLogin2()
BlogEdit.BlogEdit().EditErrTestByLogin3()
BlogEdit.BlogEdit().EditErrTestByLogin4()
BlogEdit.BlogEdit().EditErrTestByLogin5()
BlogEdit.BlogEdit().EditCheckTestByLogin()
# 执行浏览器的退出
BlogDriver.driver.quit()
自动化测试脚本链接(已放入Gitee,可点击查看):博客系统自动化脚本
八. 性能测试
8.1 测试目的
本次性能测试针对博客系统核心页面(登录页、列表页、详情页、编辑页),验证系统在并发场景下的响应性能、稳定性与错误率,排查潜在性能瓶颈,确保系统满足日常用户访问需求。
8.2 测试环境
- 测试工具:Apache JMeter 5.5
- 被测系统:博客系统 Web 端
8.3 测试结果分析
本次性能测试共执行987 次请求,整体错误率 0.00%,系统运行稳定,核心指标分析如下:

1. 稳定性与通过率:
所有接口 / 页面的 Error% 均为 0.00%,证明系统在并发访问下功能逻辑正确,无崩溃、无异常中断,服务稳定性良好。
2. 响应时间分析:
- 登录、详情、编辑、用户信息页面 :平均响应时间均低于 260ms,其中详情页响应最快(约 118ms),用户体验极佳。
- 博客列表页 :平均响应时间为 6457.63ms(约 6.4 秒),响应时间较长。经分析,系由于列表页数据查询逻辑复杂或未优化所致,为系统主要性能瓶颈,需重点优化。
- 吞吐量分析:
系统整体吞吐量(Throughput)维持在 2.23 ~ 2.78 TPS 之间,说明系统能够正常处理并发请求,满足日常博客访问的业务需求。
趋势图:

九. 项目测试bug简述
本次项目测试发现了 2 个bug,有 0 个崩溃级别的bug,有 0 个严重级别的bug,有 2 个一般级别的bug。
|----------------|----------------------------------------------------------------------------------------------------------------------------------------|-----|
| bug标题 | bug链接 | 报告人 |
| 未登录发布操作无提示 | ++http://49.235.61.184:19090/blog_edit.html++ | 妍妍 |
| 博客首页内文章及分类信息有误 | ++http://49.235.61.184:19090/blog_list.html++ | 妍妍 |
十. 测试结论
测试覆盖功能、接口、性能及 UI 自动化场景,通过多工具交叉验证,完成核心流程与边界用例测试,发现的 2 个一般级 bug 不影响系统核心功能,经产品评估后确认不阻碍上线,系统稳定性与可用性满足预期上线标准。



