个人博客系统自动化测试报告
目录
- 一.项目背景
- 二.项目简介
- 三.功能测试
- 四.测试用例
- 五.自动化测试脚本(使用Selenium进行Web自动化测试(Python))
- 1.创建驱动对象
- 2.登录界面
- 3.博客列表界面
- 4.博客详情页
- 5.博客发布界面
- 6.注销测试
- 六.环境准备
- 七.测试总结
一.项目背景
在当今数字化时代,互联网的迅猛发展已深刻改变了人们的生活与交流方式。信息传播的速度与广度达到了前所未有的程度,人们渴望在这个信息洪流中找到一个能够自由表达自我、分享见解与经验的平台。博客作为一种个人或团体发布内容的网络日志形式,应运而生并迅速风靡全球。
二.项目简介
本项目基于SSM框架实现,包含4个界面:登录界面、博客发表界面、博客列表界面以及博客详情界面。
登录后即可查看自己已发布的博客,也可以发布博客,通过使用Selenium定位web元素、对获取到的元素进行操作等,对个人博客系统进行测试,测试的核心内容包括用户登录、博客列表、用户信息、查看全文、详情页内容、发布博客、退出账号等。该博客系统可以实现发布个人博客,记录博客发布日期、时间、标题、博客发布者等信息。
三.功能测试
1. 登录界面
用户名与密码已存储在数据库中,登录成功即可跳转到列表页
在该项目中暂时只存贮了2个用户名和对应的密码:
用户名:zhangsan 密码:123456
用户名:lisi 密码:123456
如果用户名错误
如果密码错误
如果用户名或密码为空
2.博客列表界面
用用户名:zhangsan 密码:123456登录成功后,来到博客列表界面
3.博客详情界面
在博客列表界面中,选择任意一个博客对应的按钮:查看全文,就能进入博客详情界面
4.博客发布界面
在上面3个界面的任意一个界面里点击右上角的按钮“写博客”,就能进入博客发布界面
四.测试用例
五.自动化测试脚本(使用Selenium进行Web自动化测试(Python))
1.创建驱动对象
不管我们要对哪个界面进行自动化测试,第一步就是要打开浏览器,因此我们将打开浏览器这一步放在一个单独的文件(Utils.py)中(这里我们创建的是edge浏览器驱动的对象)。有时我们想知道自动化测试的结果是什么。就可以截图显示
步骤:
- 首先定义一个类Driver
- 定义一个类成员和构造函数以及有关截图的函数
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.登录界面
- 创建博客登录的测试文件BlogLogin.py
- 引入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.博客列表界面
- 创建博客列表的测试文件BlogList.py
- 引入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.博客详情页
- 创建博客列表的测试文件BlogDetail.py
- 引入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.博客发布界面
- 创建博客列表的测试文件BlogDetail.py
- 引入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编写自动化测试脚本,使某些测试任务大幅度缩短测试周期,比手动测试更高效。避免了手动测试中可能出现的人为疏忽和错误。
总而言之,自动化测试是一种有效的测试方法,可以提高测试效率、降低测试成本、提高测试覆盖率。 但是,自动化测试并非万能的,需要根据具体的项目情况选择合适的测试方法,并合理地利用自动化测试工具。