个人博客系统——测试报告
一 、项目介绍
本项目对“个人博客系统”进行功能、兼容性测试,并编写selenium自动化测试脚本对其进行自动化测试。测试的核心内容包括对用户登录页,博客列表页,博客详情页,博客编辑页,博客发布页进行测试。
二、测试
(1)功能测试
- 测试环境:Windows 10
- Chrome版本: 136.0.7091.2 (正式版本) (64 位)
- 测试方式:手动测试
1. 用户登录页面
测试步骤:
1.输入正确的用户名和密码,点击提交
2.输入错误的用户名/密码,点击提交
3. 用户名/密码为空,点击提交
期望结果:
1.成功登录,进入博客首页
2.登录失败,弹窗显示“密码错误”
3.登录失败,弹窗显示“账号或密码不能为空”
实际结果:
1.与期望结果一致,测试通过
2.与期望结果一致,测试通过
3.与期望结果一致,测试通过
测试案例展示:
测试步骤2:输入错误的用户名/密码,点击提交
2. 博客列表页
测试步骤:
进入博客列表页后,查看博客列表是否加载成功,以及博客发布时间是否正确,标题、文章内容是否正确显示
期望结果:博客列表加载成功,博客发布时间,标题、文章内容正确显示
实际结果:与期望结果一致,测试通过
3. 博客详情页
测试步骤:
打开某博客详情页,查看博客标题、时间、内容等信息是否正确显示
期望结果:博客标题、时间、内容等信息正确显示
实际结果:与期望结果一致,测试通过
4. 博客发布页
测试步骤:
1.标题、内容不为空,点击发布文章
2.标题/内容为空,点击发布文章
期望结果:
1.成功发布博客
2.博客发布失败,弹窗警告
实际结果:
1.与期望结果一致,测试通过
2.与期望结果一致,测试通过
测试案例展示
测试步骤2:标题/内容为空,点击发布文章
5. 博客编辑页
测试步骤:
在博客详情页中点击“编辑”,进入博客编辑页,修改博客标题/内容,点击“更新文章
期望结果:博客成功修改
实际结果:与期望结果一致,测试通过
6. 删除文章
测试步骤:
1.进入博客详情页,点击”删除“按钮,弹窗“确定删除?”,点击”确定”
2. 进入博客详情页,点击”删除“按钮,弹窗“确定删除?”,点击”取消”
期望结果:
1.跳转博客首页,博客不存在,删除博客成功
2.博客保留
实际结果:
1.与期望结果一致,测试通过
2.与期望结果一致,测试通过
(2)兼容性测试
测试博客系统页面在不同浏览器上能否正常显示:
Chrome浏览器:
Edge浏览器:
测试结果:博客系统页面在两个浏览器上各个页面均正常显示
(3)自动化测试
1.新建公共包和测试包
commom用来编写公共属性,tests用来编写各个页面的测试用例
]
Utils.py:
1.生成一个公用浏览器驱动对象,减少文件多次创建浏览器对象的消耗
2.提供公共函数
images:
1.用于存放不同日期生成的截图
Tests:
1.每个页面编写一个测试类,测试类中编写不同的测试用例
2.创建公共脚本Utils.py
- 创建公用浏览器驱动对象
- 创建公用屏幕截图方法
#创建一个驱动对象,避免频繁创建驱动
from selenium import webdriver
import datetime
import os.path
import sysclass Driver:driver=""def __init__(self):#这里可以添加浏览器参数options=webdriver.ChromeOptions()path = "C:\\Users\\Hasee\\Downloads\\chromedriver-win64\\chromedriver.exe"self.driver = webdriver.Chrome(executable_path=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('../images/'+dirname+'/'+filename)BlogDriver=Driver()
3.博客登录页自动化测试
- 测试用例
1.测试成功登录(loginSucTest)
2.测试登录失败(loginFailTest)
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
import timeclass BlogLogin:driver=""url=""def __init__(self):self.url="http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driverself.driver.get(self.url)#封装“清空 登录输入框内容”函数def InputClear(self):self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()def loginSucTest(self):time.sleep(2)self.InputClear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")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 > img" )BlogDriver.getScreenShot()self.driver.back()time.sleep(2)#错误的用户名/密码#用户名/密码为空def loginFailTest(self):#(1).错误的用户名,正确的密码self.InputClear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("list")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(2)expect="用户不存在"alert=self.driver.switch_to.alertalert_text=alert.textprint(alert_text)assert expect==alert_texttime.sleep(2)alert.accept()#(2).正确的用户名,错误的密码self.InputClear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("111")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(2)expect = "密码错误"alert = self.driver.switch_to.alertalert_text = alert.textprint(alert_text)assert expect == alert_texttime.sleep(2)alert.accept()
4.博客列表页自动化测试
- 测试用例
1.测试 博客列表页(loginSucTest)
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriverclass BlogList:driver=""url=""def __init__(self):self.driver=BlogDriver.driverself.url="http://8.137.19.140:9090/blog_login.html"self.driver.get(self.url)def ListLogin(self):#进入博客主页self.driver.forward()time.sleep(2)#检查昵称是否存在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.right > div:nth-child(1) > a")#检查博客标题,发布时间是否存在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.date")BlogDriver.getScreenShot()
5.博客详情页自动化测试
- 测试用例
1.测试 当前用户的详情页(DetailTestSelf)
2.测试 访问其他用户的详情页(DetailTestOther)
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriverclass BlogDetail:driver=""url=""def __init__(self):self.driver=BlogDriver.driverself.url="http://8.137.19.140:9090/blog_detail.html?blogId=42491"self.driver.get(self.url)def DetailTestSelf(self):time.sleep(2)#检查文章标题是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")#检查文章内容框是否存在self.driver.find_element(By.CSS_SELECTOR,"#detail")#检查文章发布时间是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")time.sleep(2)BlogDriver.getScreenShot()#返回博客主页self.driver.back()def DetailTestOther(self):#访问其他用户的博客详情页self.driver.get("http://8.137.19.140:9090/blog_detail.html?blogId=42498")time.sleep(2)#检查是否为其他用户的文章text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").textprint(text)assert text=="zhangsan"# 检查文章标题是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")#检查文章内容框是否存在self.driver.find_element(By.CSS_SELECTOR,"#detail")#检查文章发布时间是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")#返回博客主页self.driver.back()
6.博客编辑页自动化测试
- 测试用例
1.测试 博客编辑页(EditTest)
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogEdit:driver=""url=""def __init__(self):self.driver=BlogDriver.driverself.url="http://8.137.19.140:9090/blog_update.html?blogId=42491"self.driver.get(self.url)def EditTest(self):# 检查博客编辑页的“更新文章”键是否存在self.driver.find_element(By.CSS_SELECTOR,"#submit")#测试能否正确编辑发布文章(编辑标题)#博客系统中编辑区域是第三方插件,不能通过元素定位time.sleep(2)self.driver.find_element(By.CSS_SELECTOR,"#title").clear()time.sleep(2)self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试")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.right > div:nth-child(1) > div.desc")#返回到博客列表页BlogDriver.getScreenShot()
三、项目bug
(1)用户登录页面
bug①:
bug出现的步骤:进入用户登录页面
预期结果:没有”主页“和”写博客“按钮
实际结果:页面右上角有”主页“和”写博客“按钮,属于冗余操作
(2)博客列表页
bug①:
bug出现的步骤:登录,进入博客列表页,点击左侧“文章”
预期结果:点击“文章”可以查看用户的全部博客
实际结果:“文章”为文本形式,不可点击
bug②:
bug出现的步骤:登录,进入博客列表页
预期结果:博客部分内容折叠,用户点击“展开”按钮后才能查看全部内容。
实际结果:博客内容为全文显示,浏览博客列表时被大量内容淹没,影响用户体验
(3)博客详情页
bug①:
bug出现的步骤:点击“查看全文”进入博客详情页
预期结果:博客详情页包含作者信息
实际结果:博客详情页不包含作者信息,影响用户体验
(4)博客发布页
bug①:
bug出现的步骤:进入博客发布页,编辑内容,点击“发布文章”
预期结果:发布博客后,文章数增加1
实际结果:发布博客后,文章数没有变化
(5)博客编辑页
bug①:
bug出现的步骤:编辑博客内容后,点击“更新文章”
预期结果:编辑后博客修改时间改变
实际结果:编辑后博客修改时间不变
四、测试总结
待完善