博客系统UI自动化测试报告
博客系统UI自动化测试
- 一,报告概述
- 1.项目背景
- 2.测试目的
- 3.测试环境
- 二,测试用例
- 三,手动测试
- 1.登录页面功能
- 2.系统首页功能
- 1)个人信息页面功能
- 2) 博客列表页面功能
- 3) 主页页面功能
- 4)写博客页面功能
- 5)注销页面功能
- 四,兼容性测试
- 五,自动化测试
- 1.驱动类(Untils.py)
- 2.登录页面测试类(BlogLoginTest.py)
- 3.系统首页测试类(BlogListTest.py)
- 4.博客编辑页面测试类(BlogEditTest.py)
- 六,BUG描述
- 七,测试总结
一,报告概述
1.项目背景
博客系统是一款基于Web的在线测评平台,主要用于:创建和集中管理用户的技术博客。该系统面向全体技术人员,提供博客创建,编写,发布,保存的全流程解决方案。
2.测试目的
- 功能验证:
①确保所有核心功能符合需求规格说明书要求
②验证用户注册/登录流程的正确性
③确认博客创建、编辑、发布的完整流程
④检查博客管理功能完整性
⑤验证博客管理功能的可用性 - 用户体验优化
①评估界面布局的合理性和易用性
②测试导航逻辑是否符合用户习惯
③验证错误提示信息的清晰度
④检查响应式设计在不同设备上的表现 - 系统稳定性保障
①评估系统在高并发场景下的稳定性
②测试长时间运行的性能表现
③验证异常情况(网络中断、服务器错误)下的系统行为
④检查数据一致性和完整性 - 安全性加固
①防止未授权访问和数据泄露
②验证用户认证和授权机制
③测试SQL注入、XSS等常见Web攻击防护
④检查敏感数据加密存储和传输 - 兼容性确认
①确保主流浏览器兼容性
②验证不同操作系统下的运行表现
③测试多种设备类型和分辨率的适配情况
3.测试环境
- 操作系统:Windows 11 / Windows 10
- 浏览器:Chrome、Edge
- 测试工具:Selenium、Pycharm
二,测试用例
三,手动测试
1.登录页面功能
测试场景一:输入正确用户名和密码点击登录
预期结果:登录成功,直接跳转到博客系统首页
测试场景二:输入错误的用户名和密码点击登录
预期结果:提示错误的用户名和密码
测试场景三:输入用户名但不输入密码点击登录
预期结果:账号或密码不能为空
测试场景四:不输入用户名但输入密码点击登录
预期结果:提示账号或密码不能为空
测试场景四:输入正确的用户名和输入错误的密码
预期结果:密码错误
测试场景五:输入错误的用户名和输入正确的密码
预期结果:提示用户名不存在
2.系统首页功能
1)个人信息页面功能
测试场景一:测试昵称是否正确
预期结果:能正确打印昵称
测试场景二:点击“Github地址“按钮
预期场景:跳转到GitHub个人页面
测试场景三:测试文章篇数是否正确
预期结果:能正确显示文章篇数
测试场景四:测试分类是否正确
预期结果:能正确显示文章分类数
2) 博客列表页面功能
测试场景一:点击”查看全文“按钮
预期场景:进入博客详情页
3) 主页页面功能
测试场景一:点击”主页“按钮
预期场景:进入博客主页
4)写博客页面功能
测试场景一:点击“写博客”按钮
预期场景:进入写博客界面
测试场景二:进入写博客界面后,编写博客,测试标题按钮能否写标题
预期场景:标题按钮可以写标题
测试场景三:点击“发布文章”按钮
预期场景:博客文章成功发送
5)注销页面功能
测试场景一:点击“注销”按钮
预期场景:下次登录时,无此注销的用户
四,兼容性测试
测试场景一:在Chrome浏览器下进入博客系统
预期结果:无异常且一切布局显示功能等与其一致
测试场景二:在Edge浏览器下进入博客系统
预期结果:无异常且一切布局显示功能等与其一致
1
测试场景三:在IE浏览器下进入博客系统
预期结果:无异常且一切布局显示结果等与其一致
1
五,自动化测试
1.驱动类(Untils.py)
#创建浏览器对象,请求url访问对应的页面
import datetime
import os
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Optionsclass Driver:#创建驱动对象driver = ""def __init__(self):chrome_options = Options()# 禁用密码保存提示chrome_options.add_experimental_option("prefs", {"credentials_enable_service": False,"profile.password_manager_enabled": False})self.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()),options=webdriver.ChromeOptions())def getScreenShot(self):#创建屏幕截图#根据每天的日期进行分类,当天运行的自动化图片放在当天的文件夹下#图片名称优化:被执行的方法名+2025-09-20-152364.png#生成文件夹的名称dirname = datetime.datetime.now().strftime("%Y-%m-%d")#判断dirname文件夹是否已经存在,若不存在则创建文件夹if not os.path.exists("../images/"+dirname):os.makedirs("../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()
2.登录页面测试类(BlogLoginTest.py)
#测试博客登录页面
import timefrom selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECfrom common.Untils import BlogDriver
class BlogLoginTest:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver = BlogDriver.driverself.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()BlogDriver.getScreenShot()WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "body > div.container > div.left > div > h3")))#验证,能够找到博客首页用户的昵称,表示登录成功self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > h3")############################################################################################################异常登录的测试用例def LoginFailTest2(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("zhangsa")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#添加屏幕截图BlogDriver.getScreenShot()# 出现弹窗alert = WebDriverWait(self.driver, 10).until(EC.alert_is_present())alert = self.driver.switch_to.alertalert.accept()###############################################################################################输入用户名但不输入密码点击登录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("zhangsa")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()alert = WebDriverWait(self.driver, 10).until(EC.alert_is_present())# 出现弹窗alert = self.driver.switch_to.alertalert.accept()##################################################################################################不输入用户名但输入密码点击登录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()alert = WebDriverWait(self.driver, 10).until(EC.alert_is_present())# 出现弹窗alert = self.driver.switch_to.alertalert.accept()######################################################################################################输入正确的用户名和输入错误的密码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("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()alert = WebDriverWait(self.driver, 10).until(EC.alert_is_present())# 出现弹窗alert = self.driver.switch_to.alertalert.accept()################################################################################################ 输入错误的用户名和输入正确的密码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("zhangsa")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()alert = WebDriverWait(self.driver, 20).until(EC.alert_is_present())# 出现弹窗alert = self.driver.switch_to.alertalert.accept()#####################################################################################################Login = BlogLoginTest()
Login.LoginSucTest()
Login.LoginFailTest2()
3.系统首页测试类(BlogListTest.py)
#博客首页测试用例
import time
import unittestfrom selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitfrom common.Untils import BlogDriverclass BlogListTest: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 ListByLogin(self):#测试博客标题是否存在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.desc")#测试按钮是否存在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) > a").click()BlogDriver.getScreenShot()self.driver.back()
##################################################################################################################################测试个人信息列表#测试昵称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 > div:nth-child(4) > span:nth-child(1)")#测试分类self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")#测试点击“GitHup"进入跳转页面self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > a").click()BlogDriver.getScreenShot()####################################################################################################################################未登录状态下def ListByLoginFail(self):self.driver.get(self.url)time.sleep(3)
4.博客编辑页面测试类(BlogEditTest.py)
import timefrom selenium.webdriver.common.by import Byfrom common.Untils import BlogDriver#博客编辑页面
class BlogEditTest:url = ""driver = ""def __init__(self):self.driver = BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_edit.html"self.driver.get(self.url)#测试博客的编辑页面def EditBlogSuc(self):self.driver.get(self.url)self.driver.implicitly_wait(10)#找到编辑区域(编辑区域不可以操作,可以通过点击菜单栏)self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll")#测试发布博客self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("hh")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(3)#屏幕截图BlogDriver.getScreenShot()
六,BUG描述
1.博客系统无注册功能,不符合测试说明书
2.“登录”写成“登陆”
3.用户未登录状态下可以进入博客主页
4.文章篇数对不上(实际文章篇数超过两篇,却未更新)
七,测试总结
1.本次项目测试发现了4个bug,有3个严重级别的Bug,有1个一般级别的bug。
2.遗留问题
1)编辑博客页插入makedown插件,目前无法测试。
2)低优先级Bug,由于还未上报,推迟到下一版主进行修复。
……(性能测试目前不测)