一、项目介绍
1.1 项目背景
近些年来,伴随着电子商务市场体量不断扩大以及应用场景不断拓展,健身器材的线上销售模式随之出现,且逐渐变成促进整个行业数字化转型的力量之一。以跑步机等为主的运动设备在线购物服务,信息化时代有明显的优势,主要表现在冲破了传统的线下零售方式时间、空间上的束缚上。从消费者的角度来讲,线上平台可以用户在任何时间、地点上都可以查看产品的各种信息、技术参数,并且可以对这些产品进行综合比较和评估,进而提高消费者的决策过程和购物便利性;对于商家来说,借助于智能化的管理软件系统,可以使得订单的处理、库存的管理以及客服的支持等方面实现自动化运行,进而缩减人力支出并极大提升整个企业的经营效益。
1.2 测试目的
为了确保系统基础功能完善可用,本次测试通过四个方面展开:
1.2.1 功能正确性与数据准确性
- 验证依据:根据功能需求进行验证,确定功能实现是否符合预期。
- 验证核心:商品管理(上下架、库存提示、详情展示)、用户管理(注册登录、权限控制、资料维护)、全链路购物流程(商品浏览→多维度筛选 / 关键词搜索→加入购物车(修改数量 / 删除)→订单创建(地址 / 支付方式选择)→支付结算→商品查看)
- 各模块功能逻辑无缺失、节点衔接无断点,且符合用户实际购物习惯,无 “反常识” 业务逻辑缺陷(如未付款订单长期占用库存、已退款订单仍显示 “待支付”)。
- 库存:下单扣减、取消 / 退款后准确恢复;订单金额:数量品类加减计算无误。
1.2.2用户体验与易用性
- 优化核心: 贴合目标用户购物习惯,优化界面布局、信息架构与操作路径,实现 “直观化” 操作。
- 验证要点: 注册 / 忘记密码:能通过验证码完成,步骤不超过 2 步,避免强制填写非必要信息(如生日)。
- 下单支付:地址默认带常用选项,支付方式一目了然,避免 “选规格→加购→下单” 中反复跳转。
- 反馈信息:确定商家端能够及时收到消息。
- 及时性:操作后反馈弹窗 / 提示在 1 秒内出现,无延迟。
1.2.3 UI一致性
- 验证交互:测试所有按钮、输入框、弹窗、提示框等交互元素在不同状态(默认、悬停、聚焦、点击、禁用)下的样式与反馈符合设计预期,无遗漏、错位。
- 验证内容:校验所有页面显示的文本、价格、数字、提示信息等内容是否准确,无错别字、无歧义、无内容缺失或重叠。
- 验证导航:验证主导航、页脚、页面跳转逻辑是否正确,用户是否能清晰地知道自己所在的位置以及如何到达想去的地方。
1.2.4 兼容性
- 目标: 实现全平台兼容,确保不同浏览器、操作系统、终端设备上,功能逻辑正常、界面交互适配,用户体验一致。
- 覆盖范围:主流浏览器:Chrome、Firefox、Edge、Safari(均为最新版);操作系统:Windows、macOS、Android、iOS;终端设备:台式机、笔记本、平板、手机。
1.3 测试环境
操作系统:Windows 11
浏览器:Chrome、Edge
测试工具:Selenium
二、设计测试用例
测试用例设计锚定需求分析,结合等价类划分(覆盖有效 / 无效输入)与边界值分析(验证临界场景),再通过场景测试模拟用户实际操作,最终保障测试既全面覆盖关键场景,又具备贴合实际使用的实用性。
商场首页:
用户注册:
用户登录:
个人中心:
商品列表:
我的购物车:
易用性测试:
界面测试:
兼容性测试:
三、手动测试
注册页面功能
注册成功
注册失败
登陆页面功能
登陆成功
登陆失败
系统首页功能
收藏
加入购物车
点击资讯
个人中心功能
编辑信息
修改密码
收货地址
联系商家
商品收藏
商品列表功能
搜索
筛选
收藏
加入购物车
查看评论
购物车功能
增减
单选
全部结算
我的订单功能
四、自动化测试
自动化测试代码设计:
我们用的到工具是Pycharm以及selenium库,在自动化测试这里我们根据系统功能的不同,分功能编写测试脚本,分为登录页面、商城首页、商品界面、购物车界面这几个页面,我们根据不同的页面来针对性的设计自动化测试代码:
整体common放通用配置,images放截图图片,tests放不同界面和总体测试文件:
登录界面:
#配置登录界面 import time from selenium.webdriver.common.by import By from common.Utils import BuyDriver class BuyLogin: url = "" driver = "" def __init__(self): self.url = "http://172.18.46.29:8080/#/login" self.driver = BuyDriver.driver self.driver.get(self.url) #登陆成功 def LoginSucces(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("1234567") self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234567") self.driver.find_element(By.CSS_SELECTOR,"#app > main > div > form > button.submit-btn").click() time.sleep(1) alert = self.driver.switch_to.alert alert_text = alert.text assert alert_text == "登录成功" alert.accept() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR,"#app > nav > div > ul > li:nth-child(6) > div > span") self.driver.refresh() #BuyDriver.getScreenshot() #self.driver.back() def LoginFail(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("1234567") self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > form > button.submit-btn").click() time.sleep(1) alert = self.driver.switch_to.alert alert_text = alert.text assert alert_text == "用户名或密码错误" alert.accept() self.driver.refresh() #BuyDriver.getScreenshot() #self.driver.quit() def Back(self): self.driver.back() def Out(self): self.driver.quit()首页界面:
import time from selenium.webdriver.common.by import By from common.Utils import BuyDriver class buylist: url = "" driver = "" def __init__(self): self.url = "http://172.18.46.29:8080/login#/" self.driver = BuyDriver.driver self.driver.get(self.url) def ListLogin(self): time.sleep(2) self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div") self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div > ul > li:nth-child(1) > a") self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div > ul > li:nth-child(6) > div > span") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > section:nth-child(1)") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > section:nth-child(2)") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > section:nth-child(3)") def ListNoLogin(self): time.sleep(2) self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div") self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div > ul > li:nth-child(1) > a") self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div > ul > li:nth-child(6) > a") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > section:nth-child(1)") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > section:nth-child(2)") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > section:nth-child(3)") def Back(self): self.driver.back() def Out(self): self.driver.quit()商品界面:
import time from selenium.webdriver.common.by import By from common.Utils import BuyDriver class Show: driver = "" url = "" def __init__(self): self.url = "http://172.18.46.29:8080/login#/product-list" self.driver = BuyDriver.driver self.driver.get(self.url) def findadd(self,string): time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div > ul > li:nth-child(6) > div > span") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div.search-section > div.search-container > input").send_keys(string) self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div.product-grid > div:nth-child(2) > div.product-image > button").click() self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div.product-grid > div:nth-child(1) > div.product-info > div > button.btn-secondary").click() time.sleep(1) alert = self.driver.switch_to.alert alert_text = alert.text assert alert_text == "已成功加入购物车" alert.accept() def Back(self): self.driver.back() def Out(self): self.driver.quit()购物车界面:
import time from selenium.webdriver.common.by import By from common.Utils import BuyDriver class Cart: url = "" driver = "" def __init__(self): self.url = "http://172.18.46.29:8080/login#/cart" self.driver = BuyDriver.driver self.driver.get(self.url) def cartbuy(self): time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#app > nav > div > ul > li:nth-child(6) > div > span") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div > table > tbody > tr > td:nth-child(6) > button.checkout-single-btn").click() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div > div:nth-child(1) > div > div.address-item.active > div.address-actions > button.select-btn") self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div > div:nth-child(5) > button").click() time.sleep(1) alert = self.driver.switch_to.alert alert_text = alert.text assert alert_text == "订单提交成功!" alert.accept() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div > div.payment-actions > button.btn-primary").click() time.sleep(2) self.driver.find_element(By.CSS_SELECTOR, "#app > main > div > div > div.success-actions > a.btn-secondary").click() def Back(self): self.driver.back() def Out(self): self.driver.quit()总测试:
from tests import buylist, show, cart from tests import buylogin if __name__ == '__main__': buylogin.BuyLogin().LoginSucces() buylist.buylist().ListLogin() buylist.buylist().Back() show.Show().findadd("a") show.Show().Back() cart.Cart().cartbuy() cart.Cart().Out()五、BUG分析
注册界面:
手机号没有验证真伪:
修改密码没有查看密码功能:
商品列表:
不存在的热门词条,且没有修改途径:
购物车界面:
全选逻辑有问题:
空订单可以支付:
没有取消订单、退货选项:
个人中心:
编辑修改信息没有用户名查重:
六、测试总结
本次对健身器材电商平台进行了全面的测试,覆盖功能、用户体验、UI一致性、兼容性等多个维度。通过手动测试与自动化测试相结合的方式,验证了系统核心业务流程的完整性与稳定性,同时也发现了若干需要改进的问题。
6.1 测试成果概述
1. 功能测试覆盖全面:完成了注册、登录、商品浏览、搜索筛选、购物车管理、订单创建与支付等核心业务流程的测试,各主要功能模块均能正常运行,业务流程衔接顺畅。
2. 自动化测试框架搭建:基于 Python + Selenium 构建了自动化测试框架,实现了登录、首页浏览、商品搜索加入购物车、购物车结算等关键场景的自动化验证,提升了回归测试效率。
3. 用户体验基本达标:界面布局清晰,操作路径符合常规电商平台习惯,主要功能操作反馈及时,整体用户体验良好。
6.2 发现的主要问题
在测试过程中,我们发现了以下需要关注的问题:
- 数据验证不严谨:注册环节手机号未进行真实性校验,存在安全风险。
- 功能逻辑缺陷:购物车“全选”逻辑存在异常,且空订单仍可进入支付流程。
- 用户体验细节待优化:修改密码界面缺少“显示密码”功能;个人中心编辑信息时缺少用户名查重机制。
- 内容管理问题:商品列表页存在无效的“热门词条”,且无后台管理入口进行修改。
- 订单功能不完善:订单详情页缺少“取消订单”、“申请退货”等售后操作入口。
6.3 改进建议
- 加强数据校验:注册手机号应增加格式验证与短信验证码校验。
- 修复业务逻辑:修正购物车全选功能,并增加订单商品数量非空校验。
- 优化交互细节:在密码输入框旁增加“显示/隐藏”开关;在编辑个人信息时增加用户名唯一性校验。
- 完善后台管理:为运营人员提供管理后台,用于配置首页推荐词、广告位等内容。
- 补充售后流程:在订单状态页面增加取消订单、申请退货/退款等功能入口。
6.4 总结
总体而言,该健身器材电商平台核心功能稳定,具备了上线运营的基础。本次测试不仅验证了现有功能的正确性,更重要的是通过发现的问题为后续迭代优化指明了方向。建议开发团队优先修复数据安全类(如手机号验证)和核心业务逻辑类(如空订单支付)的高优先级缺陷,随后逐步优化用户体验细节,并规划后台管理系统的开发,以支撑平台的长期运营与发展。