个人博客系统自动化测试报告

一.项目背景

在当今数字化时代,互联网的迅猛发展已深刻改变了人们的生活与交流方式。信息传播的速度与广度达到了前所未有的程度,人们渴望在这个信息洪流中找到一个能够自由表达自我、分享见解与经验的平台。博客作为一种个人或团体发布内容的网络日志形式,应运而生并迅速风靡全球。

二.项目简介

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

三.功能测试

1. 登录界面
用户名与密码已存储在数据库中,登录成功即可跳转到列表页

在这里插入图片描述

在该项目中暂时只存贮了2个用户名和对应的密码:
用户名:zhangsan 密码:123456
用户名:lisi 密码:123456
在这里插入图片描述

如果用户名错误
在这里插入图片描述
如果密码错误
在这里插入图片描述

如果用户名或密码为空
在这里插入图片描述

2.博客列表界面
用用户名:zhangsan 密码:123456登录成功后,来到博客列表界面
在这里插入图片描述

3.博客详情界面
在博客列表界面中,选择任意一个博客对应的按钮:查看全文,就能进入博客详情界面
在这里插入图片描述

4.博客发布界面
在上面3个界面的任意一个界面里点击右上角的按钮“写博客”,就能进入博客发布界面
在这里插入图片描述


四.测试用例

在这里插入图片描述

五.自动化测试脚本(使用Selenium进行Web自动化测试(Python))

1.创建驱动对象

不管我们要对哪个界面进行自动化测试,第一步就是要打开浏览器,因此我们将打开浏览器这一步放在一个单独的文件(Utils.py)中(这里我们创建的是edge浏览器驱动的对象)。有时我们想知道自动化测试的结果是什么。就可以截图显示

步骤:

  1. 首先定义一个类Driver
  2. 定义一个类成员和构造函数以及有关截图的函数
import datetime
import os.path
import sys
import time
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import Service as EdgeService

class Driver:
    driver=""
    def __init__(self):
        self.driver=webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))
        # 隐式等待
        self.driver.implicitly_wait(3)
    
    # 截图
    def getScreenShot(self):
        dirname=datetime.datetime.now().strftime("%Y-%m-%d")
        # 如果不存在../images/dirname,就创建该目录
        if not os.path.exists("../images/"+dirname):
            os.mkdir("../images/"+dirname)
        filename=datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")
        # 能知道调用本接口的接口名
        funcname=sys._getframe().f_back.f_code.co_name+"-"
        # 目标:../images/2025-3-14/接口名-2025-3-14-202101.png
        self.driver.save_screenshot("../images/"+dirname+"/"+funcname+filename+".png")

# 创建Driver对象
BolgDriver=Driver()

创建1个运行文件RunTest(即程序的主入口),运行各个测试类中的函数

if __name__=="__main__":

2.登录界面

  1. 创建博客登录的测试文件BlogLogin.py
  2. 引入Utils文件(需要浏览器驱动)和其它依赖
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from common.Utils import BolgDriver

class BlogLogin:
    url=""
    driver=""
    def __init__(self):
        self.url="http://8.137.19.140:9090/blog_login.html"
        self.driver=BolgDriver.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()
        #查找头像,用户名和github地址
        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 > a")
        #截图
        BolgDriver.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("zhang")
        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(expected_conditions.alert_is_present())
        alert=self.driver.switch_to.alert
        assert alert.text=="用户不存在"
        alert.accept()
        #截图
        BolgDriver.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("zhangsan")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        # 出现警告弹窗:密码错误
        WebDriverWait(self.driver, 3).until(expected_conditions.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "密码错误"
        alert.accept()
        #截图
        BolgDriver.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, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        # 出现警告弹窗:账号或密码不能为空
        WebDriverWait(self.driver, 3).until(expected_conditions.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "账号或密码不能为空"
        alert.accept()
        #截图
        BolgDriver.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("zhang")
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        # 出现警告弹窗:账号或密码不能为空
        WebDriverWait(self.driver, 3).until(expected_conditions.alert_is_present())
        alert = self.driver.switch_to.alert
        assert alert.text == "账号或密码不能为空"
        alert.accept()
        #截图
        BolgDriver.getScreenShot()

RuntTest.py

from tests import BlogLogin

from common.Utils import BolgDriver


if __name__=="__main__":
    BlogLogin.BlogLogin().LoginSucTest()
    BlogLogin.BlogLogin().LoginFailTest()

    BolgDriver.driver.quit()

运行成功
在这里插入图片描述

3.博客列表界面

  1. 创建博客列表的测试文件BlogList.py
  2. 引入Utils文件(需要浏览器驱动)和其它依赖
from selenium.webdriver.common.by import By

from common.Utils import BolgDriver

class BlogList:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_list.html"
        self.driver = BolgDriver.driver
        self.driver.get(self.url)
    # 正常登录
    def BlogListByLogin(self):
        # 查找头像,用户名和github地址
        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 > a")
        # 截图
        BolgDriver.getScreenShot()

    # 异常登录
    def BlogListByNotLogin(self):
        self.driver.back()
        # 截图
        BolgDriver.getScreenShot()
        #如果成功回到登录界面,那么找不到头像
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > img")

RuntTest.py

from common.Utils import BolgDriver
from tests import BlogLogin
from tests import BlogList

if __name__=="__main__":
    BlogLogin.BlogLogin().LoginSucTest()
    BlogList.BlogList().BlogListByLogin()

    BolgDriver.driver.quit()

运行成功
在这里插入图片描述

4.博客详情页

  1. 创建博客列表的测试文件BlogDetail.py
  2. 引入Utils文件(需要浏览器驱动)和其它依赖
from selenium.webdriver.common.by import By

from common.Utils import BolgDriver

class BlogDetail:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=24712"
        self.driver = BolgDriver.driver
        self.driver.get(self.url)
    def BlogDeatilByLogin(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)")
        # 截图
        BolgDriver.getScreenShot()

RuntTest.py

from common.Utils import BolgDriver
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail

if __name__=="__main__":
    BlogLogin.BlogLogin().LoginSucTest()
    BlogList.BlogList().BlogListByLogin()
    BlogDetail.BlogDetail().BlogDeatilByLogin()

    BolgDriver.driver.quit()

运行成功
在这里插入图片描述

5.博客发布界面

  1. 创建博客列表的测试文件BlogDetail.py
  2. 引入Utils文件(需要浏览器驱动)和其它依赖
from selenium.webdriver.common.by import By

from common.Utils import BolgDriver

class BlogPublish:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_edit.html"
        self.driver = BolgDriver.driver
        self.driver.get(self.url)
    # 正常登录
    def BlogPublishByLogin(self):
        # 填写博客标题,按“发布文章“按钮
        self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("aa")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        # 如果博客列表的最下面的博客标题是”aa“,说明发布成功
        text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(792) > div.title").text
        assert text=="aa"
        # 截图
        BolgDriver.getScreenShot()
	
	# 异常登录
    def BlogPublishByNotLogin(self):
        self.driver.back()
        # 截图
        BolgDriver.getScreenShot()
        # 如果成功回到登录界面,那么找不到头像
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > img")

RuntTest.py:正常登录时

from common.Utils import BolgDriver
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
from tests import BlogPublish

if __name__=="__main__":
    BlogLogin.BlogLogin().LoginSucTest()
    BlogList.BlogList().BlogListByLogin()
    BlogDetail.BlogDetail().BlogDeatilByLogin()
    BlogPublish.BlogPublish().BlogPublishByLogin()

    BolgDriver.driver.quit()

运行成功
在这里插入图片描述

RuntTest.py:异常登录时,返回登录界面

from common.Utils import BolgDriver
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
from tests import BlogPublish

if __name__=="__main__":
    BlogLogin.BlogLogin().LoginSucTest()
    BlogPublish.BlogPublish().BlogPublishByNotLogin()

    BolgDriver.driver.quit()

运行失败在这里插入图片描述

6.注销测试

from selenium.webdriver.common.by import By

from common.Utils import BolgDriver

class LogOut:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=24713"
        self.driver = BolgDriver.driver
        self.driver.get(self.url)
    def LogOutTest(self):
        # 点击右上角的“注销”按钮
        self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()
        # 如果当前页面的网址是登陆界面的网址,说明注销成功
        curUrl=self.driver.current_url
        assert curUrl=="http://8.137.19.140:9090/blog_login.html"

RuntTest.py

from common.Utils import BolgDriver
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
from tests import BlogPublish
from tests import Logout

if __name__=="__main__":
    BlogLogin.BlogLogin().LoginSucTest()
    BlogDetail.BlogDetail().BlogDeatilByLogin()
    Logout.LogOut().LogOutTest()

    BolgDriver.driver.quit()

在这里插入图片描述

六.环境准备

系统:windows11

浏览器:版本 122.0.2365.92 (正式版本) (64 位)

测试工具:
PyCharm Community Edition 2024.3.4、
​​​Selenium4.9.0 、
WebDriver-manager 4.0.2

七.测试总结

Selenium 支持多种主流浏览器,如 Chrome、Firefox、Safari、Edge 等。 这意味着我们可以使用相同的测试脚本在不同的浏览器上执行测试。本次测试对个人的博客系统的登录,查看全文,发布博客、注销登录等核心功能进行测试。并用selenium编写自动化测试脚本,使某些测试任务大幅度缩短测试周期,比手动测试更高效。避免了手动测试中可能出现的人为疏忽和错误。

总而言之,自动化测试是一种有效的测试方法,可以提高测试效率、降低测试成本、提高测试覆盖率。 但是,自动化测试并非万能的,需要根据具体的项目情况选择合适的测试方法,并合理地利用自动化测试工具。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值