博客系统测试报告

文章目录

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

目录

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

1. 项目背景

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

2. 项目简介

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

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

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

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

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

3. 测试工具

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

4. 测试用例

5. 功能测试

6. 性能测试

7. 弱网测试

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

8. 自动化测试

python 复制代码
# common/Utils.py

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()
        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()
python 复制代码
# tests/BlogLogin.py

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://8.137.19.140:9090/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("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()
python 复制代码
# tests/BlogList.py

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://8.137.19.140:9090/blog_list.html"
        self.driver = BlogDriver.driver
        self.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()
python 复制代码
# tests/BlogDetail.py

from common.Utils import BlogDriver


class BlogDetail:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=46533"
        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")
        # 检查博客内容是否存在
        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()
python 复制代码
# tests/BlogEdit.py

import datetime
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 BlogEdit:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_edit.html"
        self.driver = BlogDriver.driver
        self.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 - 1
        BlogDriver.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.title
        assert 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("博客登陆页"))
python 复制代码
# tests/RunTest.py

from common.Utils import BlogDriver
from tests import BlogLogin, BlogList, BlogDetail, BlogEdit

if __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简述

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

10. 测试结论

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

相关推荐
unity工具人7 小时前
unity 照片墙插件(Pop-up Photo Wall)在触摸屏和红外框设备上的触发Bug
bug
ClouGence8 小时前
不搭 Selenium 或 Playwright,怎么测试公司的内网业务?
selenium·测试
狂师12 小时前
Agent 测评指标怎么选、怎么算?
人工智能·agent·测试
测试界的小码农1 天前
【让 AI 生成的测试用例变成 pytest API 自动化脚本】
人工智能·测试用例·pytest
狂师2 天前
AI 测试 Skill 大全,我日常在用的 27个,夯爆了!
人工智能·测试·全栈
狂师3 天前
我开发了一款免费开源的测试开发刷题学习网站
面试·开源·测试
灼行3 天前
Autosar SecOC 需求场景BUG(需求不一致性)【草稿】
bug
ClouGence3 天前
2026 年 AI 自动化测试工具盘点,哪些真正值得用?
测试
小豆庄5 天前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11