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

博客系统自动化测试_测试报告

项目背景

开发出一个专属于自己的博客系统,可以完全按照自己的需求来设计,比如:去掉那些花里胡哨的功能和广告,只保留自己真正需要的,比如文章发布、分类、标签、搜索等。可以根据自己的审美设计界面,想要什么风格就做成什么风格,完全由自己掌控。不用担心平台限制或数据丢失,所有内容都保存在自己的服务器或电脑上。以后想加什么功能,都可以随时添加。

简单来说,就是做一个完全符合你心意的博客工具,记录笔记,不用在意写的好与不好,简直是为自己量身定制的创作天地。

项目简介

基于SSM框架实现的个人博客系统,由四个页面构成:用户登录页、博客编辑页、博客列表页以及博客详情页。登录即可查看自己与其他用户已发布的博客,也可以使用自己的账号发布博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对个人博客系统进行测试,测试的核心内容包括用户登录、博客列表、用户信息、查看全文、详情页内容、写博客、删除博客、编辑发布博客、退出账号等。该博客系统可以实现发布个人博客,记录博客发布日期、时间、标题、博客发布者等信息。

功能测试

设计用例测试一般从功能测试,性能测试,界面测试,安全测试,易用性和兼容性测试,但是一下我只对大部分功能和部分界面进行测试,如下图:

 

1.创建浏览器对象

请求URL访问对应的页面,进入到对应的页面之后,执行一系列的测试用例。浏览器对象是每个页面都会调用的,所以把创建浏览器对象单独拿出来放到一个文件中,用来生成测试文件中需要用到的配置内容。有时候我们想要知道每次运行结束前的界面是什么情况,就可以使用屏幕截图来保存当时的情况。

所以我们再第一个python文件中创建一个类

import datetime
import os
import sys

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager

# 创建浏览器对象
class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.EdgeOptions()
        # 添加页面加载策略
        #options.page_load_strategy = 'eager'
        self.driver = webdriver.Edge(service=ChromeService(EdgeChromiumDriverManager().install()),options = options)
        self.driver.implicitly_wait(2)
    def getScreenShot(self):
        #创建屏幕截图
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否存在
        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()

第一个函数是用来存放浏览器对象和其参数配置,第二个函数用来截屏保存日常测试日志

2.登陆界面测试

这其中存放三个测试函数,登录成功和登录失败,登录失败在博客系统中又分为两种情况,分别对警告密码错误和账户不存在。

# 测试博客登录页面
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()
        #time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        #time.sleep(2)
        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")
        BlogDriver.getScreenShot()
        # 返回登录页面
        # self.driver.back()
        #self.driver.quit()
    #异常登陆
    #正确的账号,错误的密码
    def LoginFailTest1(self):
        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, 2)
        wait.until(EC.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "密码错误"
        alert.accept()
        BlogDriver.getScreenShot()
    #错误的账号/错误的账号,错误的密码
    def LoginFailTest2(self):
        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("san")
        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, 2)
        wait.until(EC.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "用户不存在"
        alert.accept()
        BlogDriver.getScreenShot()


#login = BlogLogin()
#login.LoginFailTest1()
#login.LoginFailTest2()
#login.LoginSucTest()

 3.博客首页

在登录成功的情况下,我们能正常的访问到标题内容和博客信息等,但在未登录情况下,访问这些信息是会报错的。

# 博客首页测试用例
from selenium.webdriver.common.by import By

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 LoginListTest(self):
        # 检查博客标题是否存在
        #time.sleep(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.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.container > div.left > div > h3")
        # 添加屏幕截图
        BlogDriver.getScreenShot()

    # 测试首页(未登录状态下)
    def NotLoginListTest(self):
        self.driver.back()
        self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
        self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
        # 如果在未登录的情况下访问博客列表中的博客标题会出现报错,访问不到该元素
        self.driver.find_element("body > div.container > div.right > div:nth-child(1) > div.title")

    # 登录状态下退出账号
    def LoginExitTest(self):
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()
        username = self.driver.find_element(By.CSS_SELECTOR, "#username").text
        password = self.driver.find_element(By.CSS_SELECTOR, "#password").text
        # 断言一下  登录页的账号和密码输入框为空 -- 测试通过
        assert username == ""
        assert password == ""

 4.博客详情页

针对详情页需要测试页面内容是否正常展示即可。

from selenium.webdriver.common.by import By

from common.Utils import BlogDriver

# 博客详情页测试用例
class BlogDetail:
    url = ""
    driver = ""

    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=22231"
        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, "#detail > p")
        # 添加屏幕截图
        BlogDriver.getScreenShot()

5.博客编辑页

编辑一个博客看它是否正常发布

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 __int__(self):
        self.url = "http://8.137.19.140:9090/blog_edit.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)

    def EditSucTestByLogin(self):
        #time.sleep(2)
        #wait = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#title")))
        self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试创建")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        #time.sleep(1)
        actual = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title").text
        assert actual=="自动化测试创建"
        BlogDriver.getScreenShot()

项目bug描述

除内容加载较慢,无明显bug。

测试结论

核心内容包括用户登录、博客列表、用户信息、查看全文、详情页内容、写博客、删除博客、编辑发布博客、退出账号等均可正常使用,可正常实现发布个人博客,记录博客发布日期、时间、标题、博客发布者等信息。

相关文章:

  • OceanBase-obcp-v3考试资料梳理
  • LLMs之Agent:Manus(一款通用人工智能代理)的简介、安装和使用方法、案例应用之详细攻略
  • Redis—01—分布式系统
  • 使用 Docker 部署 RabbitMQ 并实现数据持久化
  • Kubernetes 的正式安装
  • 【数分】Numpy入门及进阶(四)
  • 数据集路径出错.yaml‘ images not found , missing path
  • 【Java线程基础操作详解】
  • SpringBoot3—场景整合:AOT
  • [LeetCode]day34 347.前k个高频元素
  • 使用开源OPUS-MT模型进行文本翻译(python)
  • android中activity1和activity2中接收定时消息
  • (C/S)架构、(B/S)架构
  • 粉尘环境下的智能生产革命 ——助力矿山行业实现高效自动化作业
  • 第九篇《行军篇》
  • 设计模式-单例模式
  • 【Javascript】计算器(Calculator)网页设计案例
  • NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署
  • 【Python项目】基于深度学习的电影评论情感分析系统
  • 机械臂路径规划方法综述(一)
  • 原核试验基地司令员范如玉逝世,从事核试验研究超40年
  • 泽连斯基:俄代表团级别低,没人能做决定
  • 土耳其、美国、乌克兰三边会议开始
  • 四川内江警方通报一起持刀伤人致死案:因车辆停放引起,嫌犯被抓获
  • 讲座预告|以危机为视角解读全球治理
  • 中拉互联网发展与合作论坛在西安开幕