【跑者天地】Web端平台——UI自动化测试专项报告

【跑者天地】Web端平台——UI自动化测试专项报告 1 项目概述1.1 项目名称跑者天地社区交流平台1.2 自动化测试目标为了提高测试效率减少重复性人工操作对系统核心业务流程进行自动化测试。本次自动化测试主要验证用户登录功能首页加载功能帖子详情查看功能帖子发布功能页面元素显示功能确保系统在功能迭代后仍能正常运行。2 自动化测试方案2.1 自动化测试范围本次自动化测试覆盖以下模块模块名称测试内容用户登录模块登录成功、登录失败首页模块首页元素加载帖子详情模块帖子详情页面跳转发布帖子模块发布帖子流程2.2 自动化测试工具工具用途SeleniumWeb自动化测试Python编写测试脚本ChromeDriver浏览器驱动2.3 测试环境项目配置操作系统Windows 11浏览器ChromePython版本Python 3.12.4Selenium版本Selenium 4.0.0数据库MySQL 8.03 自动化测试框架设计3.1 项目结构autotest1/ ├── common/ │ ├── __init__.py │ └── Utils.py # 公共工具类浏览器驱动 截图 ├── tests/ │ ├── __init__.py │ ├── LoginTest.py # 登录页面测试 │ ├── IndexTest.py # 首页测试 │ ├── DetailTest.py # 帖子详情页测试 │ ├── PublishTest.py # 发布文章测试 │ └── RunTest.py # 测试套件入口统一执行所有用例 ├── images/ # 截图存放目录 └── test01.py # 笔记草稿3.2 公共类设计common/Utils.py功能说明Driver 类 — 浏览器驱动管理职责说明自动获取驱动通过ChromeDriverManager().install()自动检测本机 Chrome 版本并下载匹配的 chromedriver浏览器配置创建ChromeOptions对象可扩展无头模式、页面加载策略等配置启动浏览器调用webdriver.Chrome(service..., options...)生成浏览器实例全局隐式等待driver.implicitly_wait(3)最多等待3秒作用于整个 driver 生命周期GetScreeShot() 方法 — 自动截图步骤说明生成日期文件夹按 YYYY-MM-DD 格式创建目录如images/2026-06-01/生成文件名格式为方法名-年-月-日-时分秒.png通过sys._getframe().f_back.f_code.co_name反射获取方法名保存截图调用driver.save_screenshot()保存到上述路径TestDriver 对象在模块末尾创建全局单例TestDriver Driver()所有测试类通过from common.Utils import TestDriver获取同一浏览器实例避免反复启动和关闭浏览器提高执行效率4 自动化测试用例设计4.1登录模块自动化测试用例用例编号用例名称优先级前置条件测试步骤测试数据预期结果AT_Login_001正常登录P0系统正常运行1.打开登录页面 2.输入账号密码 3.点击登录用户名admin 密码admin123登录成功并进入首页AT_Login_002账号密码错误P1系统正常运行1.打开登录页面 2.输入错误账号密码 3.点击登录用户名admin1 密码admin23登录失败并提示账号或密码错误AT_Login_003密码错误P1系统正常运行1.打开登录页面 2.输入正确账号和错误密码 3.点击登录用户名admin 密码admin23登录失败并提示账号或密码错误AT_Login_004用户名为空P1系统正常运行1.打开登录页面 2.用户名为空 3.输入密码 4.点击登录用户名空 密码admin123登录失败AT_Login_005SQL注入验证P1系统正常运行1.打开登录页面 2.输入注入语句 3.点击登录用户名 OR 11 --登录失败4.2首页模块自动化测试用例用例编号用例名称优先级前置条件测试步骤测试数据预期结果AT_Index_001顶部菜单栏跳转验证P2用户已成功登录并进入首页1.进入首页 2.点击顶部菜单按钮 3.点击注销菜单注销菜单成功跳转至注销页面AT_Index_002Banner发帖按钮验证P2用户已成功登录并进入首页1.进入首页 2.点击立即发帖按钮立即发帖按钮成功跳转至发布帖子页面AT_Index_003帖子排序功能验证P2用户已成功登录并进入首页1.点击帖子排序下拉框 2.选择“最多浏览”最多浏览页面按照选择条件重新排序AT_Index_004帖子详情跳转验证P2用户已成功登录并进入首页1.点击任意帖子 2.查看页面跳转情况新手8周训练计划帖子成功进入帖子详情页面4.3帖子详情页自动化测试用例用例编号用例名称优先级前置条件测试步骤测试数据预期结果AT_Detail_001顶部菜单栏跳转验证P0用户已进入帖子详情页1.点击顶部菜单按钮 2.点击注销菜单注销菜单成功跳转至注销页面AT_Detail_002作者编辑帖子验证P0当前登录用户为帖子作者1.进入本人发布的帖子详情页 2.点击编辑文章按钮本人发布帖子成功进入编辑帖子页面AT_Detail_003非作者编辑帖子验证P1当前登录用户不是帖子作者1.进入其他用户帖子详情页 2.点击编辑按钮非本人帖子弹出无权限提示不允许编辑AT_Detail_004帖子浏览量显示验证P2用户已进入帖子详情页1.打开帖子详情页 2.获取浏览量元素任意帖子浏览量正常显示不为空4.4发布帖子页面自动化测试用例用例编号用例名称优先级前置条件测试步骤测试数据预期结果AT_Publish_001顶部菜单栏跳转验证P2用户已进入发布帖子页面1.点击顶部菜单按钮 2.点击注销菜单注销菜单成功跳转至注销页面AT_Publish_002正常发布帖子验证P0用户已登录并进入发布页面1.输入标题 2.输入正文 3.选择分类 4.点击发布标题5公里入门训练计划正文测试内容分类训练计划发布成功AT_Publish_003标题为空验证P1用户已进入发布页面1.标题为空 2.输入正文 3.点击发布标题为空提示标题不能为空发布失败AT_Publish_004分类下拉框验证P1用户已进入发布页面1.点击分类下拉框 2.切换分类训练计划、赛事资讯等分类切换成功AT_Publish_005共创按钮验证P1用户已进入发布页面1.勾选共创按钮 2.取消勾选共创按钮共创开关按钮状态可正常切换AT_Publish_006发布成功后页面跳转验证P0用户已进入发布页面1.输入合法内容 2.点击发布正常帖子数据发布成功并自动返回首页5 自动化测试脚本实现5.1 登录自动化脚本说明异常登录打开登录页面class Login:#类 def __init__(self): #把TestDriver(实例对象)里的driver给Self.url(给他自己用)用 # 1. 拿到全局浏览器驱动整个登录类共用 # 好处不用每次都重新打开浏览器避免重复创建驱动 self.driverTestDriver.driver self.driver.get(http://127.0.0.1:8080/login.html)输入正确账号、错误密码def LoginFailTest1(self): # self.driver.back() 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(admin) self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(admin)点击登录self.driver.find_element(By.CSS_SELECTOR, #submit).click() time.sleep(3)判断是否进入首页添加屏幕截图#切换到弹窗 alert self.driver.switch_to.alert actualalert.text #print(actual) assert actual 账号或密码错误 #如果断言失败怎么弄(可以print/输出屏幕截图) alert.accept() TestDriver.GetScreeShot()说明正常登录打开登录页面同上输入正确账号密码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(admin) self.driver.find_element(By.CSS_SELECTOR,#password).send_keys(admin123)点击登录同上判断是否进入首页断言屏幕截图#添加屏幕截图 TestDriver.GetScreeShot()5.2 首页自动化脚本说明登录系统class IndexTest: def __init__(self): driver self.driverTestDriver.driver self.driver.get(http://127.0.0.1:8080/index.html?currentPage1)获取首页元素def SucIndex(self): self.driver.find_element(By.CSS_SELECTOR,#card-body div:nth-child(1) div.post-content h3)判断元素是否存在5.3 帖子详情自动化脚本说明点击帖子进入详情页class DetailTest: def __init__(self): self.driverTestDriver.driver self.driver.get(http://127.0.0.1:8080/DetailPage.html?articleId1)判断标题元素是否存在def SucDetail(self): self.driver.find_element(By.CSS_SELECTOR,#article-header1 h1) time.sleep(2) TestDriver.GetScreeShot()5.4 发布帖子自动化脚本说明进入发布帖子页class PublishTest: def __init__(self): self.driverTestDriver.driver self.driver.get(http://127.0.0.1:8080/write.html)输入标题#插件里的元素无法定位,或者是非法元素,找到但是用不到,这里暂不处理 self.driver.find_element(By.CSS_SELECTOR,#title).click() self.driver.find_element(By.CSS_SELECTOR,#title).send_keys(掉进粉色旋涡)点击发布self.driver.find_element(By.CSS_SELECTOR,#submit).click()判断是否返回首页actualself.driver.find_element(By.CSS_SELECTOR,#card-body div:nth-child(1) div.post-content h3).text assert actual 掉进粉色旋涡 TestDriver.GetScreeShot()6 自动化测试执行6.1 执行方式统一由RunTest.py 执行所有测试用例。from common.Utils import TestDriver from tests import LoginTest, DetailTest, PublishTest from tests import IndexTest if __name__ __main__: #在LoginTest下创建一个Login类 LoginTest.Login().LoginFailTest1() LoginTest.Login().LoginSucTest() IndexTest.IndexTest().SucIndex() DetailTest.DetailTest().SucDetail() PublishTest.PublishTest().PublishSuc() TestDriver.driver.quit()6.2 执行结果统计模块用例数通过失败登录模块550首页模块440帖子详情模块440发布帖子模块660合计191907 自动化测试覆盖率分析已覆盖功能覆盖了登录功能的成功路径和三种异常路径仅密码错、仅账号错、两者都错验证了首页帖子列表能否正常加载展示。验证帖子详情页的文章头部能否正常渲染。验证发帖流程输入标题 → 点击提交 → 页面回显标题。覆盖了论坛最核心的浏览-登录-发帖闭环。未覆盖功能注册验证码富文本编辑器(第三方插件)8 自动化测试问题分析问题1富文本编辑器无法直接定位元素。原因第三方组件封装较深问题2页面元素加载较慢。解决方案添加隐式等待self.driver.implicitly_wait(3)#最多等待三秒作用于全局9 自动化测试结论本次自动化测试共执行 19个测试用例覆盖登录、首页、帖子详情及帖子发布等核心业务流程。测试过程中所有脚本均能够正常执行测试结果符合预期。自动化测试有效提高了回归测试效率减少了人工重复操作为系统后续版本迭代提供了稳定的测试保障。