博客系统测试报告
目录
- 一.博客相关测试用例
- 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.登陆测试
- 输入错误用户名
- 输入正确用户名和错误密码
- 输入错误用户名正确密码
- 输入正确密码
- 输入正确用户名及正确密码
通过多次测试用例的输入可以直观发现,密码或用户名为空时会弹出账号或密码不能为空的字样弹窗,而输入错误用户名或错误密码则分别显示用户不存在或密码错误等字样弹窗,只有在输入正确用户名和正确密码时才能进入博客主页。
3.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)
-
find_element()函数通过By.CSS_SELECTOR(选择器查找)分别找出用户名及密码输入框元素。
-
send_keys()分别输入用户名及密码。
-
找出提交按钮元素并用click()函数模拟鼠标点击。
-
time.sleep(2)强制等待2秒,(脚本运行速度过快可能导致还未出现弹窗便进行下一步操作导致)。
-
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)
- 输入用户名及密码操作和登陆成功测试相同,不同的是如何判断登陆失败,一般登陆失败会出现提示弹窗,然而弹窗元素无法定位,必须通过switch_to.alert切换弹窗模式并通过accept()关闭弹窗
- 判断登陆失败只需在脚本关闭弹窗后搜索是否登陆界面信息,如通过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写博客
- 点击主页写博客按钮
- 输入标题,点击发布
- 断言是否发布成功
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)
- 选择任意一篇博客内容,点击查看全文,可以对已经发布的博客进行编辑
- 找出编辑按钮元素并点击
- 更新博客内容并点击发布后,可以通过获取我们更新的博客标题.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主页内容删除
- 任选一篇博客内容保存标题
- 点击查看全文,查找删除元素并点击
- 切换弹窗模式,确定删除博客内容
- 断言前后标题是否相同,删除成功
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分析
- 虽然用特殊符合隐藏用户密码保证了用户信息安全,但缺少显示密码可见功能,当用户设置的密码比较繁琐时,并不利于用户正确输入密码。
- 在写博客并发表后,博客内容更新是从下往上更新不便查找更新内容。
- 少数博客发表后出现不可编辑及删除功能。