【基于个人博客系统】---测试报告
【基于个人博客系统】---测试报告
- 一、项目背景
- 二、项目功能
- 三、项目测试
- 1、测试用例的思维导图
- 2、登录界面测试(手动测试)
- 3、博客列表页面测试(手动测试)
- 4、自动化测试
- 配置驱动环境
- 创建浏览器驱动对象
- (1)Utils类
- (2)登录页面测试类
- (3)博客列表页面测试类
- (4)博客详情页面测试类
- (5)博客编辑页面测试类
- (6)聚合启动测试类
- 四、项目不足
- 五、测试总结
一、项目背景
博客系统通常具备用户注册、登录、文章发布、编辑、管理、评论互动等功能,同时还提供了丰富的模板和插件,让用户可以根据自己的喜好和需求来定制博客的外观和功能。这些软件的出现,大大降低了博客创建的门槛,使得更多人能够轻松地拥有自己的博客空间。
二、项目功能
-
登录功能
-
博客列表页功能
-
写博客并发布博客功能
-
删除博客功能
-
注销退出功能
三、项目测试
对于一款软件的测试一般可以简单分为6个方面:
功能测试
性能测试
界面测试
易用性测试
安全性测试
兼容性测试
1、测试用例的思维导图
而本篇主要以:功能测试
和界面测试
为主
2、登录界面测试(手动测试)
1、界面测试
看看这个登录框是否居中,字体颜色大小是否显眼合适,背景是否符合预期
2、登录界面测试
1)正确的用户名+错误的密码
2)错误的用户名+正确的密码
3)错误的用户名+错误的密码
4)正确的用户名+正确的密码:成功登录!
通过多次测试用例的输入可以直观发现,密码或用户名为空时会弹出账号或密码不能为空的字样弹窗,而输入错误用户名或错误密码则分别显示用户不存在或密码错误等字样弹窗,只有在输入正确用户名和正确密码时才能进入博客主页。
3、博客列表页面测试(手动测试)
- 点击查看全文
成功跳转曾经所发表的博客文章,再次点击编辑按钮
更新文章内容成功,如下:
2、编辑博客功能、发布文章功能正常:
发布成功
3、点击删除,删除功能正常:
人为只能测试极其有限的功能,因此测试人员还需编写测试脚本,通过将大量测试用例交给机器来完善软件功能。
4、自动化测试
配置驱动环境
Selenium
是一个用于Web应用程序
测试的工具
WebDriverManager
是一个开源的 Java 库,用于自动管理 Selenium WebDriver 所需的驱动程序,它可以自动下载、设置和维护这些驱动程序,从而简化了 Selenium 测试
的配置过程
在pycharm软件的设置中观察是否安装这两个软件包,如果没有可能无法正常驱动打开本地浏览器
这里的测试版本:selenium:4.0.0 webdriver-manager: 4.0.2
创建浏览器驱动对象
由于多个功能测试都需要驱动浏览器,因此将其封装成一个类,减少驱动次数造成不必要的浪费,新建一个common文件夹
,在untils.py
下创建浏览器对象
(1)Utils类
import datetime
import os.path
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.driver import Driver# 1. 创建浏览器配置项 -- 这部分我建议你找个文档存储下。 从这里
chrome_options = Options()
chrome_options.add_argument("--remote-allow-origins=*")
chrome_options.binary_location = r"C:\Program Files (x86)\Qoom\Chrome\chrome.exe"
# 2. 自动下载安装驱动并创建 WebDriver 对象
driver = webdriver.Chrome(service=Service(ChromeDriverManager(driver_version="132.0.6827.0").install()), options=chrome_options)
# 截止到这儿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")# 判断dirname文件是否存在,如不存在,创建if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)# 格式:2025-08-14-094032.png# 图片路径:../images/LoginSucTest-2025-08-14/2025-08-14-094032.png# 图片路径:../images/LoginFailTest-2025-08-14/2025-08-14-104032.pngfilename = 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()class BlogDriver:pass
(2)登录页面测试类
url用于获取博客系统网址,get用于进入博客网址
from selenium.webdriver.common.by import Byfrom Common.Utils import BlogDriverclass BlogLogin:url=""driver=""def __init__(self, BlogDriver=None):self.url="http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driverself.driver.get(self.url)# 1)登录成功的测试用例:实际上,正确的username就是zhangsan,密码:123456def LoginSucTest(self):self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#password").clear()# 1、先清空,在输入,再点击登录!self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)# 如何判定是否登陆成功?如果在click之后,能找到昵称,就是登陆成功self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > h3")# 添加屏幕截图BlogDriver.getScreeShot()# 返回到登陆页面self.driver.back()# 2)异常登陆的测试用例def LoginFailTest(self):# 若连续多次的send_keys则会出现关键词拼接,而不是替换。若要替换需要先clear!!!!~self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# 1、输入正确的usename,但是是错误的passwordself.driver.find_element(By.CSS_SELECTOR,"#usename").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()# 检查是否登录失败actual=self.driver.find_element(By.CSS_SELECTOR,"body").text#添加屏幕截图BlogDriver.getScreeShot()# 断言检测一下是否符合预期assert actual == "用户名或密码错误!"login=BlogLogin()login.LoginSucTest()login.LoginFailTest()
登陆成功测试(LoginSucTest)
- 通过find函数以选择器的方式来定位元素!
- 先clear
- 再输入username和password
- 找出提交按钮元素并用click()函数模拟鼠标点击。
- 进而通过元素定位的方式:看看能不能定位到界面中的昵称(
如果登录成功就会访问到昵称!
) - time.sleep(2)强制等待2秒,(脚本运行速度过快可能导致还未出现弹窗便进行下一步操作导致)。
- back()返回上一步操作(登陆页面)。
登陆失败测试(LoginFalTest)
- 输入用户名及密码操作和登陆成功测试相同,不同的是如何判断登陆失败,一般登陆失败会出现提示弹窗,然而弹窗元素无法定位,必须通过
switch_to.alert
切换弹窗模式并通过accept()
关闭弹窗 - 判断登陆失败只需在脚本关闭弹窗后搜索是否登陆界面信息,如通过text()函数获取登陆字样元素文本信息,并通过assert断言是否存在,如不存在则会报错
(3)博客列表页面测试类
- 测试首页(在登陆的情况下)
- 博客标题是否存在
- 博客内容是否存在
- 测试按钮是否存在
- 检查个人信息-昵称等是否存在!
#博客首页测试用例
from selenium.webdriver.common.by import Byfrom Common.Utils import BlogDriverclass BlogList:url = ""driver = ""def __init__(self):self.url="http://8.137.19.140:9090/blog_list.html"self.driver=BlogDriver.driverself.driver.get(self.url)#测试首页(在登陆的情况下)def ListTestByLogin(self):# 1)博客标题是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title")
# 2)博客内容是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.desc")
# 3)测试按钮是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a")
# 4)检查个人信息-昵称等是否存在!self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")# 添加屏幕截图BlogDriver.getScreeShot()
(4)博客详情页面测试类
- 登陆状态下博客详情页的测试
- 检查标题
- 检查时间
- 检查内容
#登陆状态下博客详情页的测试
from selenium.webdriver.common.by import Byfrom Common.Utils import BlogDriver#测试博客详情页
class BlogDeail:url = ""driver = ""def __init__(self):self.url ="http://8.137.19.140:9090/blog_detail.html?blogId=161559"self.driver = BlogDriver.driverself.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")# 屏幕截图BlogDriver.getScreeShot()
(5)博客编辑页面测试类
- 选择任意一篇博客内容,点击查看全文,可以对已经发布的博客进行编辑
- 找出编辑按钮元素并点击
- 更新博客内容并点击发布后,可以通过获取我们更新的博客标题.text,通过断言判断是否更新成功
# 测试博客的编辑页面
import timefrom selenium.webdriver.common.by import Byfrom Common.Utils import BlogDriverclass EditTest:url=""driver=""def __init__(self):self.url="http://8.137.19.140:9090/blog_edit.html"self.driver=BlogDriver.driver# 在登录状态下正确的去编辑+发布博客def EditSucTestByLogin(self):self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试创建")# 找到编辑区域,输入关键词(编辑区域不可操作)# 菜单栏无法元素无法定位# 博客系统编辑区域默认情况下就不为空,可以暂不处理# 直接点击发布按钮来发布博客self.driver.find_element(By.CSS_SELECTOR,"#submit").click()# 点击完成之后出现页面的跳转,页面跳转需要加载时间,可能会出现代码执行的速度比页面渲染的速度要快,导致元素查找不到,因此可以添加等待# 添加隐式等待和显示等待都可以,任选择一个time.sleep(2)actual=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title").textassert actual == "自动化测试创建"# 屏幕截图BlogDriver.getScreeShot()
(6)聚合启动测试类
封装
from Common.Utils import BlogDriver
from Tests import BlogDetail, BlogEdit
from Tests.BlogList import BlogList
from Tests.BlogLogin import BlogLoginif __name__ == "__main__":# 1、看看是否登陆成功?BlogLogin.BlogLogin().LoginFailTest()BlogLogin.BlogLogin().LoginSucTest()# 登陆成功之后就可以# 2、首页测试(登陆状态)BlogList.BlogList().ListTestByLogin()# 3、博客详情页测试BlogDetail.BlogDeail().DetailTestByLogin()# 4、博客编辑页面BlogEdit.BlogEdit().EditSucTestByLogin()# 5、浏览器退出BlogDriver.driver.quit()
四、项目不足
- 虽然用特殊符合隐藏用户密码保证了用户信息安全,但缺少显示密码可见功能,当用户设置的密码比较繁琐时,并不利于用户正确输入密码
- 没有注册功能
- 在写博客并发表后,博客内容更新是从下往上更新不便查找更新内容。(不便于查找!)
- 对于所有的文章,没有“分类功能”,没有“专栏”,没有统计博客的“数量”
五、测试总结
此次测试主要对个人博客系统的主要功能进行了测试,并用Selenium编写了测试脚本进行了自动化测试。
1、个人博客系统还需对首页的个人信息栏部分进行优化,
2、文章的数量要与用户发布的数量同步起来,
3、在弹窗提示上也需要更详细些,为用户提供有用的弹窗信息,这样才能给用户提供一个良好的体验。