【测试报告】个人博客系统测试报告(功能测试、自动化测试、Bug描述)

个人博客系统测试报告

一、报告概述

1.项目背景

本博客系统是一个基于Web的轻量级内容发布与管理平台。它旨在为用户提供一个简洁、易用的在线写作与分享环境。系统核心功能围绕文章的创建、发布、管理及用户互动展开,是个人记录、知识分享和思想表达的理想工具。
系统包含以下核心页面和功能:

模块 功能
登录页 未登录不可访问其他页面
博客列表页 显示每篇博客的标题、发表时间等,提供"查看全文"入口
博客详情页 查看博客详细内容
博客更新页 支持已发布的博客修改
发布博客页 提供富文本编辑器,可编辑博客,发布博客之后,会在列表显示该博客

2.测试目的

本次测试的核心方向为:一方面确认博客系统各功能模块的功能完整性与可用状态,另一方面保障用户登录、用户注销、博客列表页、博客详情页、博客更新页、发布博客页等核心页面的实际表现,符合预设的需求规范。

3.测试环境

  • 操作系统 : Windows 11
  • 浏览器:Chrome、Edge
  • 测试工具:Selenium

二、测试用例

三、功能测试

1.用户管理功能

1.1登录功能

1.1.1测试场景一:页面打开正常

预期结果:页面打开正常,文字、logo等信息显示正常

1.1.2测试场景二:登录成功并跳转到系统首页(用户名:zhangsan,密码:123456)

预期结果:登录成功,跳转到博客系统首页

1.1.3测试场景三:登录失败(用户名:zhangsan,密码:空)

预期结果:弹出"账号或密码不能为空"弹窗

1.1.4测试场景四:登录失败(用户名:空,密码:123456)

预期结果:弹出"账号或密码不能为空"弹窗

1.1.5测试场景五:登录失败(用户名:空,密码:空)

预期结果:弹出"账号或密码不能为空"弹窗

1.1.6测试场景六:登录失败(输入不存在的用户名,密码:123456)

预期结果:弹出"用户名不存在"弹窗

1.1.7测试场景七:登录失败(用户名:zhangsan,输入错误的密码:123)

预期结果:弹出"密码错误"弹窗

1.2注销功能

1.2.1测试场景一:点击注销,注销成功

预期结果:返回用户登录

2.博客管理功能

2.1查看博客列表

2.1.1测试场景一:页面正常打开,用户登录状态下

预期结果:显示个人信息,博客列表(标题,发布时间,内容),"查看全文"按钮

2.2查看博客详情

2.2.1测试场景一:页面正常打开,用户登录状态下,点击"查看全文"按钮

预期结果:显示个人信息,博客详细内容(标题,发布时间,内容)

2.3编辑博客

2.3.1测试场景一:页面正常打开,用户登录状态下,点击"编辑"按钮

预期结果:显示标题、正文输入框,编辑器,"更新文章"按钮

2.3.2测试场景二:更新成功,输入标题,内容,点击"更新文章"按钮

预期结果:返回列表页,保留原始的发布时间,显示更新后的博客标题、内容

2.3.3测试场景三:更新失败,标题为空,点击"更新文章"按钮

预期结果:出现警告弹窗

2.3.4测试场景四:更新失败,内容为空,点击"更新文章"按钮

预期结果:出现警告弹窗

2.3.5测试场景五:更新失败,标题和内容都为空,点击"更新文章"按钮

预期结果:弹出警告弹窗

2.3.6测试场景六:更新失败,输入博客标题和内容,未点击"更新文章"按钮

预期结果:页面没有变化

2.4删除博客

2.4.1测试场景一:删除按钮正常点击

预期结果:弹出"确定删除?"弹窗

2.4.2测试场景二:删除失败,选择取消

预期结果:返回当前页面

2.4.3测试场景三:删除成功,选择确定

预期结果:博客删除成功,返回列表页,博客已被删除

2.5发布博客

2.5.1测试场景一:页面正常打开,用户登录状态下,点击"写博客"

预期结果:显示标题、正文输入框,编辑器,"发布文章"按钮

2.5.2测试场景二:发布成功,输入标题,内容,点击"发布文章"按钮

预期结果:返回列表页,置顶显示的博客标题、内容和发布时间

2.5.3测试场景三:发布失败,标题为空,点击"发布文章"按钮

预期结果:弹出警告弹窗

2.5.4测试场景四:发布失败,内容为空,点击"发布文章"按钮

预期结果:弹出警告弹窗

2.5.5测试场景五:发布失败,标题和内容都为空,点击"发布文章"按钮

预期结果:弹出警告弹窗

2.5.6测试场景六:发布失败,输入博客标题和内容,未点击"发布文章"按钮

预期结果:页面没有变化

3.功能测试结果总结

自动化测试无法涉及到的功能均已通过手动测试补充测试,用例全部通过,个人信息修改功能、注册功能不能实现,暂不影响用户核心使用流程,后续会添加。

四、自动化测试

1.驱动类

python 复制代码
import sys
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import datetime
import os

#创建一个浏览器对象
class Driver:
    driver = ""
    def __init__(self):
        options=webdriver.EdgeOptions()
        edge_driver_path=r"F:\Python\msedgedriver.exe"  # 修改为实际路径
        self.driver=webdriver.Edge(service=Service(edge_driver_path),options=options)
        # self.driver.implicitly_wait(2)
        self.driver.implicitly_wait(3)  # 等待元素最多10秒
    def getScreenShot(self):
        #获取屏幕截图
        #当前的文件夹,格式:./2026-01-12
        driname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断是否存在,不存在则重新创建该文件夹
        if not os.path.exists("../images/"+driname):
            os.mkdir("../images/"+driname)
        #保存的图片路径:../images/2026-01-12/调用方法-2026-01-12-121708.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/"+driname+"/"+filename)

BlogDriver =Driver()

2.登录界面

python 复制代码
from common.Utils import BlogDriver
from selenium.webdriver.common.by import By
import time

#测试博客登录页面
class BlogLogin:
    url=""
    driver=""
    def __init__(self):
        self.url="http://47.108.157.13:8090/blog_login.html"
        self.driver =BlogDriver.driver
        self.driver.get(self.url)
        time.sleep(2)
    #成功登录的测试用例
    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")
        # 添加屏幕截图
        # BlogDriver.getScreenShot()
        print(f"登录成功!")
        # # 退出网站
        # self.driver.quit()


    #失败登录的测试用例
    def LoginFailTest(self):
        #(1)正确的账号,错误的密码
        # # 需要先清除输入框里面的内容
        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("123")
        self.driver.find_element(By.CSS_SELECTOR,'#submit').click()
        #因为弹窗出来的时间比较慢,所以需要加上强制等待时间
        time.sleep(2)
        # 关闭登录失败产生的弹窗
        # 使用switch_to.alert
        alert = self.driver.switch_to.alert
        # 接受或关闭弹窗
        alert.accept()  # 点击确定按钮

        # 添加屏幕截图
        BlogDriver.getScreenShot()
        print(f"登录失败!")

        # 需要先清除输入框里面的内容
        self.driver.find_element(By.CSS_SELECTOR, '#username').clear()
        self.driver.find_element(By.CSS_SELECTOR, '#password').clear()

        #(2)错误的账号,错误的密码
        self.driver.find_element(By.CSS_SELECTOR, '#username').send_keys("zhang")
        self.driver.find_element(By.CSS_SELECTOR, '#password').send_keys("123")
        self.driver.find_element(By.CSS_SELECTOR, '#submit').click()
        time.sleep(2)
        # 关闭登录失败产生的弹窗
        # 使用switch_to.alert
        alert = self.driver.switch_to.alert
        # 接受或关闭弹窗
        alert.accept()  # 点击确定按钮
        # 添加屏幕截图
        BlogDriver.getScreenShot()
        print(f"登录失败!")
        time.sleep(2)
        # 需要先清除输入框里面的内容
        self.driver.find_element(By.CSS_SELECTOR, '#username').clear()
        self.driver.find_element(By.CSS_SELECTOR, '#password').clear()

        #(3)错误的账号,正确的密码
        self.driver.find_element(By.CSS_SELECTOR, '#username').send_keys("zhang")
        self.driver.find_element(By.CSS_SELECTOR, '#password').send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, '#submit').click()
        time.sleep(2)
        #关闭登录失败产生的弹窗
        # 使用switch_to.alert
        alert = self.driver.switch_to.alert
        # 接受或关闭弹窗
        alert.accept()  # 点击确定按钮
        # 或者使用 dismiss() 点击取消按钮
        # alert.dismiss()
        # 添加屏幕截图
        # BlogDriver.getScreenShot()
        print(f"登录失败!")
        # 返回登录页面
        # self.driver.back()

# 单个模块测试时可用下面两行代码
# login=BlogLogin()
# login.LoginFailTest()
# login.LoginSucTest()

3.博客首页

python 复制代码
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver


#测试博客首页
class BlogList:
    url=" "
    driver=" "
    def __init__(self):
        self.url = "http://47.108.157.13:8090/blog_login.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
        time.sleep(2)
    #测试页面(登录情况下)
    def ListTestByLoginSuc(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()
        time.sleep(2)

        #测试个人信息
        #头像
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > img")
        #昵称
        #查找昵称时,代码报错
        # self.driver.find_element(By.CSS_SELECTOR,"<h3>zhangsan</h3>")
        #分类
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")
        #文章
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")

        #测试博客列表
        #博客标题
        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.date")
        #博客内容
        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.nav > a:nth-child(4)")
        #写博客
        self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)")
        #注销
        self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)")

        #添加屏幕截图
        # BlogDriver.getScreenShot()
        print(f"博客首页(已登录)测试完成!")
        # 返回登录页面
        self.driver.back()

    #测试页面(未登录状态)
    def ListTestByLoginFail(self):

        #不需要登录,只需要查看未登录页面的元素是否正确
        #测试登录界面框
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container-login > div")

        #测试顶部功能框
        # 主页
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(4)")
        # 写博客
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)")

        # 添加屏幕截图
        # BlogDriver.getScreenShot()
        print(f"博客首页(未登录)测试完成!")
        # 返回登录页面
        self.driver.back()
        time.sleep(2)
        # # 退出浏览器
        # BlogDriver.driver.quit()


# # 单个模块测试时可用下面代码
# login=BlogList()
# login.ListTestByLoginSuc()
# login.ListTestByLoginFail()

4.博客详情页

python 复制代码
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver


#测试博客详情页面
class BlogDetail:
    url=" "
    driver=" "
    def __init__(self):
        self.url = "http://47.108.157.13:8090/blog_login.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
        time.sleep(2)

    def DetailTestByLoginSuc(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()
        time.sleep(2)

        #点击一篇博客的"查看全文"按键
        self.driver.find_element(By.CSS_SELECTOR, 'body > div.container > div.right > div:nth-child(1) > a').click()
        time.sleep(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, "#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()
        print(f"测试详情页完毕!")
        # 返回登录页面
        self.driver.back()
#        #退出浏览器
#        self.driver.quit()
#
# login=BlogDetail()
# login.DetailTestByLoginSuc()

5.博客编辑页

python 复制代码
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver


#测试博客详情页面
class BlogEdit:
    url=" "
    driver=" "
    def __init__(self):
        self.url = "http://47.108.157.13:8090/blog_login.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)
        time.sleep(2)

    #测试博客编辑页(只有登录状态)
    def EditTestByLoginSuc(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()
        # time.sleep(2)

        # 点击一篇博客的"写博客"按键
        self.driver.find_element(By.CSS_SELECTOR, 'body > div.nav > a:nth-child(5)').click()
        time.sleep(2)

        # 博客页面元素测试
        # 标题输入框
        self.driver.find_element(By.CSS_SELECTOR,"#title")
        # 内容输入框
        self.driver.find_element(By.CSS_SELECTOR, "#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll")
        # 点击发布按钮
        self.driver.find_element(By.CSS_SELECTOR, "#submit")
        # 功能界面框
        self.driver.find_element(By.CSS_SELECTOR, "#editor > div.editormd-toolbar > div > ul")


        # 正常发布博客测试
        # 在标题框内写入内容,在内容框内写入内容,点击发布按钮
        # 标题输入框
        self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试")
        # 内容输入框
        self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll").send_keys("你好你好")
        # 点击发布按钮
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        # 如果正常发布博客成功,则会返回博客首页,此时会出现个人信息。
        # 只需要查找是否存在个人头像即可,存在则说明正常发布博客成功
        # 头像
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > img")

        # 异常发布博客测试
        # 不写标题写内容
        # 点击一篇博客的"写博客"按键
        self.driver.find_element(By.CSS_SELECTOR, 'body > div.nav > a:nth-child(5)').click()
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#title").clear()
        self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll").send_keys("你好你好")
        # 点击发布按钮
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        #此时会出现弹窗,把弹窗关掉
        # 只需查找"发布博客"按键是否存在即可,若存在,说明异常发布博客
        time.sleep(2)
        alert = self.driver.switch_to.alert
        alert.accept()
        self.driver.find_element(By.CSS_SELECTOR, "#submit")

        #不写内容写标题
        # #因为内容框采用的是一个插件,所以不能对其进行清空,故该情况不能算作异常发布博客
        # self.driver.find_element(By.CSS_SELECTOR, 'body > div.nav > a:nth-child(5)').click()
        # time.sleep(2)
        # self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试")
        # # self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll").clear()
        # self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        # time.sleep(2)
        # alert = self.driver.switch_to.alert
        # alert.accept()
        # self.driver.find_element(By.CSS_SELECTOR, "#submit")

        #不点击发布按钮
        self.driver.find_element(By.CSS_SELECTOR, 'body > div.nav > a:nth-child(5)').click()
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#title").clear()
        self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll").send_keys("你好你好")
        # 由于没有点击发布按钮,故此时仍然存在该按钮,且没有返回博客首页
        self.driver.find_element(By.CSS_SELECTOR, "#submit")

        # 添加屏幕截图
        # BlogDriver.getScreenShot()
        print(f"测试博客编辑页完毕!")
        #退出浏览器
        # self.driver.quit()

# login=BlogEdit()
# login.EditTestByLoginSuc()

6.启动文件

python 复制代码
from common.Utils import BlogDriver
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
from tests import BlogEdit


#总测试模块
if __name__ == "__main__":
    #测试异常登录
    BlogLogin.BlogLogin().LoginFailTest()
    #测试正常登录
    BlogLogin.BlogLogin().LoginSucTest()
    #测试博客首页(登录状态)
    BlogList.BlogList().ListTestByLoginSuc()
    # 测试博客首页(未登录状态)
    BlogList.BlogList().ListTestByLoginFail()
    #博客详情页测试(只有登录状态)
    BlogDetail.BlogDetail().DetailTestByLoginSuc()
    #博客编辑页测试(只有登录页面)
    BlogEdit.BlogEdit().EditTestByLoginSuc()
    #指定浏览器退出
    BlogDriver.driver.quit()

7.自动化测试总结

本次基于Selenium框架的博客系统测试,覆盖登录、列表页、详情页、更新、编辑发布模块及未登录/登录两种状态,通过脚本执行功能验证、关键节点截图、断言与弹窗处理确保结果有效,测试全部通过。

五、兼容性测试

1.测试场景一:在Edge浏览器下进入问卷考试系统

预期结果:无异常且一切布局显示功能等与其一致



2.测试场景二:在Chrome浏览器下进入问卷考试系统

预期结果:无异常且一切布局显示功能等与其一致


3.测试场景三:在手机浏览器下进入问卷考试系统

预期结果:无异常且一切布局显示功能等与其一致

实际结果:界面不美观,功能能正常使用


六、测试总结

1.Bug描述

使用手机自带的浏览器打开博客系统时,界面并不美观,界面较大,建议适应于手机页面大小。

2.总结

博客系统的测试涵盖功能测试、自动化测试:

  • 功能测试验证了登录、博客列表查看、详情浏览、更新及编辑发布等核心功能,未登录权限控制与异常场景(空标题、错误账号)处理均符合预期。

  • 自动化测试基于 Selenium 框架与 Edge 浏览器/Chrome浏览器实现全流程脚本执行,关键节点截图留存,测试效率与可追溯性良好。

该博客系统能为用户提供一个简洁、易用的在线写作与分享环境,能满足用户的基本需求。

相关推荐
单车少年ing7 小时前
一个编码BUG
算法·bug
bdy_y98 小时前
自动化|selenium+python||通过cookies登录CSDN失败原因总结
爬虫·selenium·自动化
测试19988 小时前
自动化测试:selenium详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
霍格沃兹测试学院-小舟畅学11 小时前
AI系统功能测试怎么做?从“正确性断言”到“上下文边界”的测试范式转移
人工智能·功能测试
爆更小哇11 小时前
自动化测试避坑:iframe 嵌套页面定位元素失败问题全解析
selenium·自动化·测试用例
悦心无谓11 小时前
C++负载均衡式在线OJ测试报告
开发语言·c++·selenium·测试工具·负载均衡·编程语言·后端开发
Zwj-c12 小时前
【测试报告】学评一体化平台测试报告(功能测试、自动化测试、Bug描述)
python·功能测试·selenium·测试用例·bug
构建的乐趣12 小时前
visual studio监视的有效方法【bug调试】
bug
维齐洛波奇特利(male)13 小时前
IDEA 实例类多开bug:勾选后还是只能运行一个类
java·bug·intellij-idea