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

博客系统测试报告

目录

  • 一.博客相关测试用例
    • 1.1.博客系统功能背景
    • 1.2.博客系统思维导图
  • 二,博客界面测试分析
    • 2.1登录界面测试
  • 三、博客功能测试
    • 3.1.登陆测试
    • 3.2.主页测试
  • 四、博客自动化测试脚本
    • 4.1.配置驱动
    • 4.2.创建浏览器对象
    • 4.3.登陆测试
      • 4.3.1登陆成功测试(LoginSucTest)
      • 4.3.2登陆失败测试(LoginFalTest)
    • 4.4主页测试
      • 4.4.1写博客
      • 4.4.2主页内容编辑(ListEdiTest)
      • 4.4.3主页内容删除
    • 4.5运行代码
    • 五、BUG分析

一.博客相关测试用例

1.1.博客系统功能背景

博客系统通常具备用户注册、登录、文章发布、编辑、管理、评论互动等功能,同时还提供了丰富的模板和插件,让用户可以根据自己的喜好和需求来定制博客的外观和功能。这些软件的出现,大大降低了博客创建的门槛,使得更多人能够轻松地拥有自己的博客空间。

1.2.博客系统思维导图

为了能够在众多软件中脱颖而出,并且能让用户用的安心以此来获得用户的青睐,从而推动公司的发展,因此一款好的软件一定离不开测试人员通过大量的测试案例来对软件进行BUG分析,对于一款软件简单来说可分为六方面的测试:界面测试、功能测试、安全测试、易用性测试、兼容性测试、性能测试

  • 思维导图

测试案例思维导图
而本章主要对功能测试及界面进行分析

二,博客界面测试分析

2.1登录界面测试

在这里插入图片描述
登录界面的登陆框、用户名、密码、提交等内容与我们编写的思维导图基本一致,符合预期效果,并且提交按钮用绿色框格包围使得用户能更加轻松登录博客。

三、博客功能测试

3.1.登陆测试

  1. 输入错误用户名

在这里插入图片描述

  1. 输入正确用户名和错误密码

在这里插入图片描述

  1. 输入错误用户名正确密码

在这里插入图片描述

  1. 输入正确密码

在这里插入图片描述

  1. 输入正确用户名及正确密码

在这里插入图片描述
通过多次测试用例的输入可以直观发现,密码或用户名为空时会弹出账号或密码不能为空的字样弹窗,而输入错误用户名或错误密码则分别显示用户不存在密码错误等字样弹窗,只有在输入正确用户名和正确密码时才能进入博客主页。

3.2.主页测试

  1. 点击查看全文

在这里插入图片描述

  1. 成功跳转曾经所发表的博客文章,再次点击编辑按钮

在这里插入图片描述

  1. 成功跳转博客编辑页面

在这里插入图片描述

  1. 点击更新文章

在这里插入图片描述

  1. 成功更新

在这里插入图片描述

  1. 点击删除

在这里插入图片描述

  1. 跳出弹窗

在这里插入图片描述

  1. 成功删除

在这里插入图片描述

  1. 点击注销
    在这里插入图片描述
  2. 账号退出且登陆信息清除
    在这里插入图片描述
    人为只能测试极其有限的功能,因此测试人员还需编写测试脚本,通过将大量测试用例交给机器来完善软件功能。

四、博客自动化测试脚本

4.1.配置驱动

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
WebDriverManager 是一个开源的 Java 库,用于自动管理 Selenium WebDriver 所需的驱动程序(如 ChromeDriver、GeckoDriver、EdgeDriver 等)。它可以自动下载、设置和维护这些驱动程序,从而简化了 Selenium 测试的配置过程

在pycharm软件的设置中观察是否安装这两个软件包,如果没有可能无法正常驱动打开本地浏览器
在这里插入图片描述

4.2.创建浏览器对象

由于多个功能测试都需要驱动浏览器,因此将其封装成一个类,减少驱动次数造成不必要的浪费,新建一个common文件夹,在untils.py下创建浏览器对象
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
chrome_path = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'
driver_path = 'E:\\python_project\\chromedriver-win64\\chromedriver.exe'


#创建浏览器对象
class Driver:
    driver=""
    def __init__(self):
        options = webdriver.ChromeOptions()
        options.binary_location = chrome_path  # 指定本地 Chrome 浏览器路径
        self.driver = webdriver.Chrome(service=Service(executable_path=driver_path), options=options)
        #截屏功能
    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(f'../images/{dirname}/' +filename)
        #实例化Driver
BlogDriver = Driver() 

4.3.登陆测试

url用于获取博客系统网址,get用于进入博客网址

import time
from datetime import datetime

from selenium.webdriver.common.by import By
#导入驱动浏览器对象
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)

4.3.1登陆成功测试(LoginSucTest)

  1. find_element()函数通过By.CSS_SELECTOR(选择器查找)分别找出用户名及密码输入框元素。

  2. send_keys()分别输入用户名及密码。

  3. 找出提交按钮元素并用click()函数模拟鼠标点击。

  4. time.sleep(2)强制等待2秒,(脚本运行速度过快可能导致还未出现弹窗便进行下一步操作导致)。

  5. back()返回上一步操作(登陆页面)。

    def LoginSucTest(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 > h3")

        self.driver.back()

没有等待的报错
在这里插入图片描述

4.3.2登陆失败测试(LoginFalTest)

  1. 输入用户名及密码操作和登陆成功测试相同,不同的是如何判断登陆失败,一般登陆失败会出现提示弹窗,然而弹窗元素无法定位,必须通过switch_to.alert切换弹窗模式并通过accept()关闭弹窗
  2. 判断登陆失败只需在脚本关闭弹窗后搜索是否登陆界面信息,如通过text()函数获取登陆字样元素文本信息,并通过assert断言是否存在,如不存在则会报错

在这里插入图片描述

    def LoginFalTest(self):
        #用户名正确密码错误
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()

        time.sleep(2)#等待弹窗
        #切换弹窗模式
        alert=self.driver.switch_to.alert
        #关闭弹窗
        alert.accept()

        #获取登陆文本信息
        text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container-login > div > h3").text
        #断言是否还处于登录界面
        assert text=="登陆"

        #清除用户名及密码信息
        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("zhang")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(2)  # 等待弹窗
        # 切换弹窗模式
        alert = self.driver.switch_to.alert
        # 关闭弹窗
        alert.accept()

        # 获取登陆文本信息
        text = self.driver.find_element(By.CSS_SELECTOR, "body > div.container-login > div > h3").text
        # 断言是否还处于登录界面
        assert text == "登陆"

        # 清除用户名及密码信息
        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("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        time.sleep(2)  # 等待弹窗
        # 切换弹窗模式
        alert = self.driver.switch_to.alert
        # 关闭弹窗
        alert.accept()

        # 获取登陆文本信息
        text = self.driver.find_element(By.CSS_SELECTOR, "body > div.container-login > div > h3").text
        # 断言是否还处于登录界面
        assert text == "登陆"
        self.driver.quit()

4.4主页测试

4.4.1写博客

  1. 点击主页写博客按钮
  2. 输入标题,点击发布
  3. 断言是否发布成功
    def ListTest(self):
        self.driver.implicitly_wait(5)
        #点击写博客按钮
        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,"#submit").click()
        text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(60) > div.title").text
        BlogDriver.getScreenShot()
        #断言标题是否发布成功
        assert text=="博客主页测试"

4.4.2主页内容编辑(ListEdiTest)

  1. 选择任意一篇博客内容,点击查看全文,可以对已经发布的博客进行编辑
  2. 找出编辑按钮元素并点击
  3. 更新博客内容并点击发布后,可以通过获取我们更新的博客标题.text,通过断言判断是否更新成功

在这里插入图片描述

 def ListEdiTest(self):
        self.driver.implicitly_wait(2)
         time.sleep(2)#强制等待页面渲染
        #任选一篇博客
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > a").click()
        #点击编辑按钮
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)").click()
        time.sleep(2)#强制等待页面渲染
        #清空原有博客标题
        self.driver.find_element(By.CSS_SELECTOR,"#title").clear()
        #更新博客
        self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys('博客测试')
        #点击提交
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title").text
        time.sleep(1)
        #添加截图
        BlogDriver.getScreenShot()
        #断言是否更新成功
        assert text=='博客测试'

4.4.3主页内容删除

  1. 任选一篇博客内容保存标题
  2. 点击查看全文,查找删除元素并点击
  3. 切换弹窗模式,确定删除博客内容
  4. 断言前后标题是否相同,删除成功
    def ListDelTest(self):
        self.driver.implicitly_wait(2)
        #删除前截屏
        BlogDriver.getScreenShot()
        #删除前标题
        text1 = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title").text
        #点击查看全文
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > a").click()
        #点击删除
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()
        #切换弹窗模式
        alert=self.driver.switch_to.alert
        alert.accept()
        #删除后标题
        text2=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title").text
        #断言是否删除
        assert not text1==text2
        #删除后截屏
        BlogDriver.getScreenShot()

4.5运行代码

from common.utils import BlogDriver
from test import BlogLogin
from test import BlogList
if __name__ == "__main__":
    # 登陆失败
    BlogLogin.BlogLogin().LoginFalTest()
    #成功登陆
    BlogLogin.BlogLogin().LoginSucTest()
    #写博客
    BlogList.BlogList().ListTest()
    #编辑博客
    BlogList.BlogList().ListDelTest()
    #删除博客
    BlogList.BlogList().ListDelTest()
    #退出
    BlogDriver.driver.quit()

五、BUG分析

  1. 虽然用特殊符合隐藏用户密码保证了用户信息安全,但缺少显示密码可见功能,当用户设置的密码比较繁琐时,并不利于用户正确输入密码。
  2. 在写博客并发表后,博客内容更新是从下往上更新不便查找更新内容。
  3. 少数博客发表后出现不可编辑及删除功能。

相关文章:

  • 17. LangChain实战项目2——易速鲜花宣传文案批量生成并导出
  • 探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比
  • 【图像处理与OpenCV:技术栈、应用和实现】
  • 防火墙旁挂组网双机热备负载均衡
  • Storm 踩坑之路
  • Animate Anyone本地部署教程:AI动画生成技术的革命性突破
  • 网卡驱动接收数据----软中断处理数据----socket接收数据
  • 太阳同步轨道的进动速度解析
  • 摄像头应用编程(二):单平面视频采集
  • TCP 连接故障排查与 SYN 洪泛攻击防御
  • 【网络编程】之TCP通信步骤
  • 幸狐picomax SDK 适配 rv1160G2 摄像头
  • CyberRT(apollo) 定时器模块简述及bug分析
  • 【Elasticsearch】索引生命周期管理相关的操作(Index Lifecycle Actions)
  • KVMOVS组网配置案例-4
  • 机器学习:特征提取
  • Linux远程连接vscode
  • MySql面试总结(二)
  • 英码科技携昇腾DeepSeek大模型一体机亮相第三届北京人工智能产业创新发展大会
  • 大数据“调味“ ,智慧“添香“,看永洪科技助力绝味食品数字化新征程
  • 长沙潮宗街内“金丝楠木老屋文旅博物馆”起火:明火已扑灭,无伤亡
  • 图集︱“中国排面”威武亮相
  • 招商蛇口:今年前4个月销售额约498.34亿元
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 央行:中国政府债务扩张仍有可持续性
  • 从上海首个到成片复制,闵行零工市场如何优化劳动就业服务?