【项目】博客系统测试报告


🔥个人主页: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) 输入正确的账号和密码:

进入首页:

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

  1. 登录界面按钮测试

① 点击 "主页" 按钮:

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

② 点击 "写博客" 按钮:

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


6.2 博客首页进行测试

1)在登录状态下:(注意:个人信息中文章及分类的信息有误)

点击 "查看全文",实际结果:

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


6.3 博客详情页进行测试

1)在登录状态下:

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

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

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


6.4 博客编辑页进行测试

1)在登录状态下:

① 页面元素检查

② 正常发布博客

③ 异常发布博客

不写标题:(出现弹窗)

不写内容:(出现弹窗)

不写标题及内容:

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

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


七. 自动化测试

7.1 创建公共模块

Utils.py

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 博客登录页

BlogLogin.py

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 博客首页

BlogList.py

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 博客详情页

BlogDetail.py

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 博客编辑页

BlogEdit.py

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 整体运行

RunTest.py

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 秒),响应时间较长。经分析,系由于列表页数据查询逻辑复杂或未优化所致,为系统主要性能瓶颈,需重点优化。
  1. 吞吐量分析

系统整体吞吐量(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 不影响系统核心功能,经产品评估后确认不阻碍上线,系统稳定性与可用性满足预期上线标准


相关推荐
Word码3 小时前
接口自动化测试实战项目
软件测试·python·功能测试·集成测试·实战项目
UTP协同自动化测试1 天前
智能家居中控屏测试:触摸屏操作 + I2C 读取传感器 + UART 与子设备通信 + GPIO 控制
功能测试·单片机·嵌入式硬件·测试工具·智能家居
念越3 天前
蓝桥杯自动化测试模拟1期答案及代码解析(完整版)
自动化测试·软件测试·selenium·蓝桥杯
G皮T3 天前
【OpenClaw】思路转变:从 “传统UI测试” 到 “AI驱动的UI测试”
自动化测试·人工智能·ai·agent·测试·ui测试·openclaw
测试_AI_一辰4 天前
Playwright执行原理拆解(测试视角)
人工智能·功能测试·ai编程
独断万古他化4 天前
【抽奖活动管理平台】完整质量测试报告:功能 / 自动化 / 性能三大维度总结
功能测试·自动化·接口测试·测试报告·ui测试
测试开发技术4 天前
自动生成用例:基于OCR+ LLM的设计方案(附落地指南)
自动化测试·软件测试·自动化·llm·ocr·测试用例·用例自动生成
测试19985 天前
使用Python自动化生成接口测试用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试