5月30日
软件测试
功能测试报告
信2205-3
郑盾
目 录
一、前言(课设目的及内容)
1.1 测试目的
1.2 测试内容
二、测试计划及测试需求
2.1 测试原理分析
2.2 测试流程图 3
2.3 测试计划设计
2.4 测试需求分析
2.5 测试环境搭建 6
三、测试用例的设计 7
3.1 测试用例设计说明 7
3.2 测试用例列表 7
3.3 测试代码实现 7
四、测试过程 9
4.1测试脚本(手动): 9
4.2测试脚本(Selenium自动进行功能测试): 12
五、测试结果 13
六、课设小结及心得体会 14
七、参考文献 14
一、前言(课设目的及内容)
本次课程设计旨在通过实际项目开发,掌握 Web 应用自动化测试技术,特别是 Selenium 框架的使用。通过开发一个仓储管理系统的自动化测试套件,实现以下目标:
深入理解 Web 自动化测试的原理和方法
掌握 Selenium WebDriver 的使用技巧
学习测试用例的设计和实现
提高软件测试的效率和可靠性
1.1 测试目的
深入理解 Web 自动化测试的原理和方法
掌握 Selenium WebDriver 的使用技巧
学习测试用例的设计和实现
提高软件测试的效率和可靠性
1.2 测试内容
本次测试主要针对仓储管理系统的以下功能模块:
1.用户认证模块:
用户登录功能
登录状态验证
登录失败处理
2.商品管理模块:
添加新商品
商品信息验证
商品列表显示
3.库存管理模块:
库存更新操作
库存变更验证
库存记录查看
4.系统功能验证:
页面导航
数据展示
错误处理
响应时间
二、测试计划及测试需求
2.1 测试原理分析
2.1.1 Selenium 工作原理
- WebDriver 架构:
- 客户端(测试脚本)通过 WebDriver 协议与浏览器驱动通信
- 浏览器驱动控制实际浏览器执行操作
- 采用 JSON Wire Protocol 进行通信
2 元素定位机制:
- 支持多种定位策略(XPath、CSS、ID、Name等)
- 使用 WebDriverWait 实现显式等待
- 通过 JavaScript 执行器处理特殊操作
3 测试执行流程:
- 初始化浏览器环境
- 加载测试页面
- 定位和操作页面元素
- 验证操作结果
- 生成测试报告
2.1.2 测试框架设计
- 测试用例组织:
- 采用类的方式组织测试用例
- 使用 pytest 框架管理测试执行
- 实现测试用例的模块化和可重用性
2 测试数据管理:
- 使用动态生成的数据(如时间戳)
- 实现测试数据的独立性
- 确保测试用例的可重复执行
3 异常处理机制:
- 实现重试机制
- 详细的错误日志记录
- 优雅的测试失败处理
2.2测试流程图
根据测试原理的分析以及Selenium测试的基本步骤可以设计如图2-1的测试流程图。
图2-1 测试流程图
·2.3 测试计划设计
根据测试原理分析与测试思想设计,设计如图2-2所示的测试过程计划流程图。
图2-2 测试计划流程图
2.4 测试需求分析
2.4.1 功能需求
用户登录测试:
验证正确的用户名和密码登录
验证登录失败的错误处理
验证登录后的页面跳转
商品管理测试:
验证添加商品表单的完整性
验证商品信息的正确保存
验证商品列表的显示
库存管理测试:
验证库存更新操作
验证库存变更记录
验证库存历史记录查看
2.4.2 非功能需求
性能需求:
页面加载时间控制
操作响应时间要求
测试执行效率优化
可靠性需求:
测试用例的稳定性
错误恢复能力
测试报告的可读性
兼容性需求:
浏览器兼容性(Chrome)
操作系统兼容性(Windows)
屏幕分辨率适配
2.4.3 测试环境需求
硬件环境:
处理器:支持多线程
内存:至少 4GB
存储:足够的磁盘空间
软件环境:
Python 3.10.11
Chrome 浏览器 122.0.6261.131
Selenium WebDriver
pytest 测试框架
网络环境:
稳定的网络连接
本地服务器环境
适当的网络延迟容忍度
2.5 测试环境搭建
Python 3.10.11
Windows 10 (10.0.22631-SP0)
Chrome 浏览器 (122.0.6261.131)
pytest 7.4.3
Selenium WebDriver
三、测试用例的设计
3.1. 测试用例设计说明
登录测试是系统测试的基础,确保用户能够正确访问系统功能。测试用例设计采用等价类划分和边界值分析方法。
3.2 测试用例列表
| 测试用例ID | 测试项 | 测试输入 | 预期结果 | 测试步骤 ||------------|--------|----------|-----------|-----------|| TC001 | 正常登录 | 用户名:testuser<br>密码:testpass123 | 1. 登录成功<br>2. 跳转到首页<br>3. 显示欢迎信息 | 1. 访问登录页面<br>2. 输入用户名<br>3. 输入密码<br>4. 点击登录按钮<br>5. 验证页面跳转 || TC002 | 错误用户名 | 用户名:wronguser<br>密码:testpass123 | 1. 登录失败<br>2. 显示错误提示<br>3. 停留在登录页面 | 1. 访问登录页面<br>2. 输入错误用户名<br>3. 输入正确密码<br>4. 点击登录按钮<br>5. 验证错误提示 || TC003 | 错误密码 | 用户名:testuser<br>密码:wrongpass | 1. 登录失败<br>2. 显示错误提示<br>3. 停留在登录页面 | 1. 访问登录页面<br>2. 输入正确用户名<br>3. 输入错误密码<br>4. 点击登录按钮<br>5. 验证错误提示 || TC004 | 空用户名 | 用户名:空<br>密码:testpass123 | 1. 登录失败<br>2. 显示错误提示<br>3. 停留在登录页面 | 1. 访问登录页面<br>2. 不输入用户名<br>3. 输入正确密码<br>4. 点击登录按钮<br>5. 验证错误提示 || TC005 | 空密码 | 用户名:testuser<br>密码:空 | 1. 登录失败<br>2. 显示错误提示<br>3. 停留在登录页面 | 1. 访问登录页面<br>2. 输入正确用户名<br>3. 不输入密码<br>4. 点击登录按钮<br>5. 验证错误提示 |
3.3 测试代码实现
def _login(self, driver, retry_count=0):
"""登录测试实现"""
print(f"\n=== 开始登录过程 (尝试 {retry_count + 1}/{self.MAX_RETRIES}) ===")
try:
# 访问登录页面
driver.get("http://localhost:5000/login")
# 填写登录表单
username_input = self._wait_for_element(driver, By.NAME, "username")
username_input.clear()
username_input.send_keys(self.TEST_USERNAME)
password_input = self._wait_for_element(driver, By.NAME, "password")
password_input.clear()
password_input.send_keys(self.TEST_PASSWORD)
# 点击登录按钮
submit_button = self._wait_for_element(driver, By.XPATH, "//button[@type='submit']")
submit_button.click()
# 验证登录结果
current_url = driver.current_url.lower()
if "login" in current_url:
# 检查错误消息
error_messages = driver.find_elements(By.CLASS_NAME, "alert-danger")
if error_messages:
raise Exception("登录失败:" + error_messages[0].text)
raise Exception("登录失败:无法确定原因")
# 验证登录成功标志
success_indicators = ["仓储管理系统", "欢迎", "商品列表", "库存管理"]
page_source = driver.page_source.lower()
found_indicators = [ind for ind in success_indicators if ind.lower() in page_source]
if not found_indicators:
raise Exception("登录后未能确认登录状态")
return True
except Exception as e:
if retry_count < self.MAX_RETRIES - 1:
time.sleep(self.RETRY_DELAY)
return self._login(driver, retry_count + 1)
raise
四、测试过程
4.1测试脚本(手动):
仓库管理系统登录页面:
商品列表页面:
添加商品页面:
库存记录页面:
测试页面(此为手动):
4.2测试脚本(Selenium自动进行功能测试):
终端运行:py -3.10 test_selenium.py
运行视频流程见本文件夹附带视频
五、测试结果
运行结果(报告):
六、课设小结及心得体会
在本次软件测试综合课程设计中,我深入学习了 Web 自动化测试技术,特别是 Selenium 框架的应用。通过开发仓储管理系统的自动化测试套件,我不仅掌握了 Python 编程和 Selenium WebDriver 的使用技巧,更重要的是培养了系统化的测试思维。在测试环境搭建过程中,我成功配置了 Python 3.10.11、Selenium WebDriver、Chrome 浏览器和 pytest 测试框架,为后续的测试开发打下了坚实基础。
在测试用例开发阶段,我实现了用户登录、商品管理、库存管理等核心功能的自动化测试,虽然遇到了元素定位、页面交互等挑战,但通过实现显式等待、重试机制等解决方案,最终完成了测试套件的开发。测试执行结果显示,在 52 秒内完成了 3 个测试用例的执行,通过率达到 66.7%,主要问题出现在更新库存按钮的点击操作上,这让我深刻认识到 Web 自动化测试中元素交互的复杂性。
通过这次课程设计,我不仅提升了自动化测试技能,还学会了如何设计测试用例、分析测试结果、生成测试报告。在解决各种技术难题的过程中,我的问题分析和解决能力得到了显著提高。特别是在处理元素定位和页面同步问题时,我学会了使用 JavaScript 执行器、优化等待时间等方法,这些经验对今后的测试工作都很有帮助。同时,我也认识到测试代码的可维护性和可读性的重要性,通过模块化设计和完善的错误处理机制,使测试代码更加健壮和易于维护。
这次课程设计让我深刻体会到软件测试不仅是一项技术工作,更是一种质量保证的思维方式。在测试过程中,需要不断思考各种可能的场景和异常情况,这培养了我的系统思维和细节关注能力。虽然测试执行时间较长、浏览器兼容性等问题还有待改进,但这些问题也为我指明了今后的学习方向。我相信,通过持续学习和实践,我能够将这次课程设计中学到的知识和经验应用到实际工作中,为软件质量保证做出更大的贡献。
七、参考文献
[1] Selenium自动化测试工具的介绍与使用Selenium自动化测试工具的介绍与使用-CSDN博客
[2] Selenium 实战项目 Selenium 实战项目 | 菜鸟教程