商城系统测试报告
项结果被测系统TPshop(Pshop)多商户商城测试范围用户管理、商品、购物车、订单、支付、兼容性、帮助中心共 8 大模块用例规模累计 80+ 场景,含 65 个功能场景、15 个兼容与异常场景自动化脚本13 个 PageObject 类 + 1 个运行入口(Python3+Selenium4)运行环境Win11 + Chrome 120/Edge 119 + 模拟移动端(414×896)截图证
一 项目简介
Pshop(TPshop)是由深圳搜豹网络开源的一套基于ThinkPHP
MVC的多商户商城系统,支持自营+招商入驻,可一次搭建PC、微商城、iOS/Android
App四大终端;后台采用模块化插件架构,功能丰富、扩展灵活,方便企业与个人快速上线并二次开发。1. 用户登入注册界面
- 支持微信登录
- qq登录
- 手机号注册
- 邮箱注册
2. 用户个人信息界面
- 显示个人信息及修改(头像 名称 联系方式)
- 收货地址管理(增加 删除 修改收货地址 默认收货地址设置)
- 订单信息管理(显示相关订单信息 对是否收货进行分类 删除)
- 账户安全设置 (账户安全评分 密码修改 设置密保问题)
3. 购物车结算界面
- 添加商品进入购物车
- 全选或部分选择商品进行结算
- 能够修改商品的数量与规格
- 能够批量删除选中的商品
- 能够自动显示支付费用(最优惠)
4. 订单界面
- 能够选择配送方式
- 能够选择收货人和收货地址
- 选择合适的支付方式
- 自动显示可用的优惠卷和积分
5. 商品搜索界面
- 能够通过关键词找到最合适的商品
- 显示市场价与实际价格
- 商品视频与图片多方位展示
- 购买用户评论
- 商品参数与规格信息
二 测试环境
- 操作系统:Win11
- 浏览器: Google Chrome
- 测试工具:selenium+webdriver+pycharm
- 硬件环境:确保服务器、网络设备和客户端设备的配置满足测试需求
- 技术栈:采用了编程语言Python以及自动化测试框架Selenium
三 测试目的与范围
为确保商城系统上线后能稳定运行,为用户提供安全、便捷、流畅的购物体验,全方位验证系统功能、性能、兼容性及安全性,制定本测试方案,明确测试目的与范围。
测试目的
1.用户管理:精准校验用户注册、登录、密码找回、信息修改等流程,确保各环节逻辑正确、数据准确,杜绝账号异常、信息泄露等问题。
2.商品管理:全面测试商品上架、下架、信息编辑、库存调整等功能,保障商品信息实时更新、库存数据精准。
3.购物流程:细致模拟用户选购商品、加入购物车、结算下单、支付、退换货等操作,核验流程顺畅性、订单数据准确性。
4.订单管理:严格测试订单生成、状态跟踪、物流信息同步、异常处理等环节,保障订单全流程可控、可查。
5.浏览器兼容:全面适配主流浏览器(Chrome、Edge等),测试不同浏览器内核、版本下商城系统页面展示、功能交互是否正常,解决浏览器兼容性问题,拓宽用户访问渠道。
6.设备兼容:覆盖手机、平板、电脑等多元设备,针对不同屏幕尺寸、分辨率、操作系统进行测试,满足用户跨设备购物需求。
7.系统兼容:适配Windows等主流操作系统,检验商城系统在不同系统环境下的运行稳定性、数据交互准确性,为不同用户群体提供一致服务。
测试范围
(一)用户管理模块
- 注册流程:涵盖手机号注册、邮箱注册、第三方账号快捷注册等途径,测试注册信息验证机制、账号唯一性校验、注册成功与异常提示等环节。
- 登录认证:包括账号密码登录、短信验证码登录、扫码登录、第三方账号授权登录等方式,验证登录成功率、密码错误处理、账号锁定策略、登录状态保持等特性。
- 信息维护:涉及用户基本信息(姓名、性别、生日等)编辑、头像更换、密码修改、收货地址管理、支付密码设置等操作,测试信息修改实时生效性、数据准确性、合法性校验等。
(二)商品管理模块
- 商品展示:从商品列表页、详情页、搜索结果页等多维度,测试商品图片展示、价格显示、库存数量、详情描述、规格参数等信息呈现准确性,确保用户获取商品信息无误。
- 商品搜索:模拟用户关键词搜索、筛选条件组合(价格区间、品牌、类别等)搜索,验证搜索结果相关性、精准度、排序合理性,提升用户查找效率。
- 商品评价:测试用户发表评价、晒单、点赞、举报评价等流程,核验评价内容审核机制、展示规则,保障评价信息真实、合规,为其他用户提供购物参考。
(三)购物流程模块
- 购物车操作:全面测试商品加入购物车、数量增减、规格更换、删除商品、清空购物车等功能,实时计算商品总价、优惠金额,确保购物车数据精准、操作便捷。
- 订单生成:从购物车结算、直接购买等多入口模拟下单,测试订单信息(商品明细、收货地址、配送方式、支付方式等)生成准确性,提供订单预览、修改、拆分、合并等灵活性操作。
- 支付流程:对接支付宝、微信支付、银行卡支付等多元支付方式,测试支付接口稳定性、支付成功与失败处理、支付回调准确性,保障用户支付顺畅、资金安全。
(四)订单管理模块
- 订单状态跟踪:实时监测订单从待付款、待发货、待收货、已完成到已取消等各状态流转,验证状态更新及时性、准确性,用户可随时掌握订单动态。
- 物流信息同步:与主流物流平台对接,测试物流单号生成、物流轨迹实时同步、异常物流状态提醒等功能,让用户对商品配送过程了如指掌。
- 退换货处理:模拟用户申请退货、换货场景,测试退换货流程合理性、审核机制、退款时效性,妥善处理用户售后诉求,提升用户满意度。
(五)兼容性测试
- 浏览器兼容测试:选取不同版本、不同内核的主流浏览器,全面测试商城系统页面渲染、功能交互、样式布局等是否正常,针对兼容性问题进行代码优化、样式调整,确保用户在任何浏览器上都能获得优质体验。
- 设备兼容测试:覆盖各类手机、平板、电脑等设备,针对不同屏幕尺寸、分辨率、操作系统进行细致测试,优化响应式布局、触控响应、性能表现,满足用户跨设备无缝购物需求。
- 系统兼容测试:在Windows、macOS、Linux等主流操作系统环境下,测试商城系统安装部署、运行稳定性、数据交互准确性,为不同用户群体提供一致、可靠服务。
四 测试用例
全图





五 功能测试
(一)登录注册页面测试
场景一:不输入用户名、密码和验证码
预期结果:登录失败 提示用户名不能为空

场景二:仅输入用户名(密码和验证码为空)
预期结果:登录失败,系统提示“密码和验证码不能为空”。

场景三:仅输入密码(用户名和验证码为空)
预期结果:登录失败,系统提示“用户名和验证码不能为空”。

场景四:输入用户名和密码,不输入验证码
预期结果:登录失败,系统提示“验证码不能为空”。

场景五:输入正确的用户名、密码和验证码
预期结果:登录成功,跳转至系统首页或用户。

(二)注册页面功能测试
场景一:手机注册成功
预期结果:输入合法手机号、正确图形验证码、符合规则的密码、勾选协议后注册成功,页面跳转至登录页,提示“注册成功”

场景二:邮箱注册成功
预期结果:输入合法邮箱、正确图形验证码、符合规则的密码、勾选协议后注册成功,页面跳转至登录页,提示“注册成功”

场景三:手机号为空
预期结果:不输入手机号,其他字段正常填写,点击注册后提示“请输入手机号码”

场景四:手机号格式错误
预期结果:输入非11位数字(如10位、12位、含字母或特殊字符),点击注册后提示“手机号码输入不正确”

场景五:手机号已注册
预期结果:输入已注册过的手机号,其他字段正常,点击注册后提示“该手机号已注册,请直接登录”
实际结果:依旧注册成功 出现BUG

场景六:图形验证码为空
预期结果:不输入图形验证码,其他字段正常,点击注册后提示“请输入验证码”

场景七:图形验证码输入错误
预期结果:输入错误的图形验证码,其他字段正常,点击注册后提示“验证码错误”

场景八:验证码刷新功能
预期结果:点击“刷新验证码”后,生成新验证码,旧验证码失效

场景九:密码为空
预期结果:不输入密码,其他字段正常,点击注册后提示“请输入密码”

场景十 :什么都不写
预期结果: 不会通过注册 并且进行提示

(三)商城首页功能测试
场景一:首页正常加载
预期结果:打开商城首页后,页面元素加载完整,包括商品分类、搜索框、推荐商品、楼层导航、用户信息等模块正常显示。

场景二:搜索商品成功
预期结果:在搜索框中输入“手机”,点击搜索按钮,跳转至商品列表页,展示包含关键词“手机”的商品。

场景三:点击商品分类跳转
预期结果:点击“手机数码”分类,跳转至对应分类页面,展示相关商品。

场景四:点击推荐商品
预期结果:点击首页推荐商品如“四川不知火丑橘”,跳转至商品详情页,展示商品图片、价格、规格等信息。

场景五:楼层导航跳转
预期结果:点击“1F 服装鞋帽”楼层导航,页面滚动至对应区域,展示该楼层推荐商品。

场景六:点击“我的购物车”
预期结果:点击“我的购物车”,若购物车为空,提示“购物车暂无商品”;若有商品,展示商品列表。

场景七:点击“领券中心”
预期结果:点击“领券中心”,跳转至优惠券页面,展示可领取的优惠券列表。 实际结果:并不会显示任何优惠券
场景八:点击“退出登录”
预期结果:登录状态下点击“退出登录”,系统退出当前账号,页面刷新后显示未登录状态。

(四)商品详情页功能测试
场景一:页面正常打开
预期结果:商品详情页首屏完整加载,主图、价格、库存、购买按钮等关键元素无 404/空白/加载失败。

场景二:立即购买-未登录
预期结果:点击“立即购买”弹出登录框;登录成功后直达订单确认页,商品、价格、数量信息正确回显。

场景三:立即购买-已登录
预期结果:已登录状态点击“立即购买”直接进入订单确认页,数据准确且可正常提交订单。

场景四:加入购物车-成功
预期结果:点击“加入购物车”按钮即时反馈“已加入”,顶部购物车角标 +1,价格小计正确。

场景五:收藏商品-未登录
预期结果:未登录点击“收藏”弹出登录窗;登录后按钮变“已收藏”,并在个人中心“我的收藏”列表可见该商品。


场景六:点击在线客服
预期结果: 点击后会进入客服界面
实际结果 : 不存在客服界面 客服界面按钮功能没有实现

(五)店铺详情页功能测试
场景一:店铺首页正常加载
预期结果:店招、导航、热销/推荐/新品模块、搜索框、客服入口一次性加载完成,无404或空白。


场景二:店内搜索-关键字匹配
预期结果:输入“丑橘”并搜索,结果仅展示标题含关键词的商品,价格、库存与列表一致。

场景三:收藏店铺-未登录
预期结果:点击“收藏店铺”弹出登录窗;登录成功后按钮变“已收藏”,个人中心“我的关注”列表出现该店铺。

场景四:在线客服
预期结果:点击“在线客服”弹出浮窗,可发送文字/图片,客服状态显示“在线”且30秒内响应。 实际结果:在线客服按钮 功能没有实现
(六)我的购物车功能测试
场景一:页面正常加载
预期结果:购物车首屏完整加载,所有商品、价格、按钮可正常显示。

场景二:数量递增
预期结果:点“+”数量+1,小计与总价实时刷新,无延迟。

场景三:全选/取消全选
预期结果:一键全选后显示正确件数与总价;取消全选后结算按钮立即置灰。

场景四:去结算-已登录
预期结果:已登录且已勾选商品,点击“去结算”跳确认订单页,数据零差错。

(七)订单页面功能测试
场景一:页面正常加载
预期结果:订单页所有模块一次性加载成功,无404/空白,金额显示49.80元。

场景二:新增收货地址-成功
预期结果:新增合法地址后默认选中,提交按钮高亮,配送信息即时同步。

场景三:使用积分余额
预期结果:使用积分余额200,应付总额减少20元,订单可直接提交成功。

场景四:订单提交成功
预期结果:点击提交后跳成功页,生成唯一订单号并显示24 h支付倒计时,后台订单状态为“待付款”。

(八)我的商城功能测试
场景一:页面正常加载
预期结果:个人中心首屏完整渲染,是用户后续所有操作的入口。

场景二:地址管理入口
预期结果:地址增删改及默认设置,是下单前必须完成的关键环节。

六 兼容性测试
场景一 :使用Google chrome 来使用商城系统
预期结果:无异常,访问成功,布局和功能符合要求





场景二:使用联系浏览器 来使用商城系统
预期结果:无异常,访问成功,布局和功能符合要求




场景三: 使用移动端使用商城系统
预期结果:无异常,访问成功,布局和功能符合要求


七 自动化测试
自动化测试项目代码文件结构图:

1.自动化测试框架
本次测试采用 Python + Selenium WebDriver 针对商城系统的自动化UI测试框架,整体结构分为公共工具类、测试脚本、截图存储三大模块,方便维护与扩展。
2.驱动类(Utils)
#创建浏览器对象
import os
import sys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from datetime import datetime
import time
from selenium.webdriver.common.keys import Keys
class Driver:
def __init__(self):
driver = ""
options = webdriver.ChromeOptions()
self.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()),options = options)
def getScreeShot(self):
#创建屏幕截图
#路径文件名称
#图片路径
dirname = datetime.now().strftime("%Y-%m-%d")
#判断dir文件是否已经存在 不存在就创建文件夹
if not os.path.exists("../images/"+dirname):
os.makedirs("../images/"+dirname)
filename = sys._getframe().f_back.f_code.co_name+"-"+datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
self.driver.save_screenshot("../images/"+dirname+"/"+filename)
MallDriver = Driver()
3.自动识别验证码类(captcha_tool.py)
import ddddocr, io, time
from PIL import Image
from selenium.webdriver.common.by import By
def solve_captcha(driver, img_selector="#verify_code_img"):
"""返回识别后的字符串"""
ocr = ddddocr.DdddOcr()
img_elem = driver.find_element(By.CSS_SELECTOR, img_selector)
img_bytes = img_elem.screenshot_as_png
code = ocr.classification(img_bytes)
print("[captcha] 识别结果 =>", code)
return code
4.商城登录功能测试类(MallLogin.py)
from selenium.webdriver.common.by import By
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallLogin:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/User/login.html"
self.driver = MallDriver.driver
self.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("15582868761")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
time.sleep(1)
code = solve_captcha(self.driver, "#verify_code_img") # 你的 img 选择器
self.driver.find_element(By.CSS_SELECTOR, "#verify_code").send_keys(code)
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR, "#login-form > div.u-btn.mb20.mt20 > a").click()
time.sleep(1)
#验证是否登录成功
self.driver.find_element(By.CSS_SELECTOR,"body > div.home-index-middle > div > div.home-main > div.ri-menu.fr > div.menu-ri-t.p > div.mu-midd.fl > a.mu-m-phone")
#添加截图
MallDriver.getScreeShot()
#登录失败的用例
def loginfailtest(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("15582868761")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("yunbao")
code = solve_captcha(self.driver, "#verify_code_img") # 你的 img 选择器
self.driver.find_element(By.CSS_SELECTOR, "#verify_code").send_keys(code)
self.driver.find_element(By.CSS_SELECTOR, "#login-form > div.u-btn.mb20.mt20 > a").click()
#添加截图
MallDriver.getScreeShot()
txt = self.driver.find_element(By.CSS_SELECTOR, "#login-form > div.u-btn.mb20.mt20 > a").text
assert txt == "登 录"
#出现弹窗后几秒之后会自动消失
5.账号注册功能测试类(MallEnroll.py)
from selenium.webdriver.common.by import By
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallEnroll:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/User/reg.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
def enrollbyphone(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div.regcon > div > ul > li.uli.active > a").click()
time.sleep(3)
#输入用户名
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("15582868761")
#输入验证码
code = solve_captcha(self.driver, "#reflsh_code2")
self.driver.find_element(By.CSS_SELECTOR,"#verify_code2").send_keys(code)
#设置新密码
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
#确认新密码
self.driver.find_element(By.CSS_SELECTOR,"#password2").send_keys("123456")
#点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(5)
#注册成功后一段时间会自动跳转到首页 通过查找主页元素来确定是否注册成功
self.driver.find_element(By.CSS_SELECTOR,"#myCarousel > div.right-sidebar.p > div.usertpshop > div.head_index > a > img")
# 添加截图
MallDriver.getScreeShot()
def enrollbyemail(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div.regcon > div > ul > li:nth-child(2) > a").click()
time.sleep(3)
# 输入用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("3232464757@qq.com")#username
# 输入验证码
code = solve_captcha(self.driver, "#reflsh_code2")#reflsh_code2
self.driver.find_element(By.CSS_SELECTOR, "#verify_code2").send_keys(code)
# 设置新密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 确认新密码
self.driver.find_element(By.CSS_SELECTOR, "#password2").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(5)
#注册成功后一段时间会自动跳转到首页 通过查找主页元素来确定是否注册成功
self.driver.find_element(By.CSS_SELECTOR,"#myCarousel > div.right-sidebar.p > div.usertpshop > div.head_index > a > img")
# 添加截图
MallDriver.getScreeShot()
6、账号忘记密码功能测试类(MallForpass.py)
from selenium.webdriver.common.by import By
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallForpass:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/User/forget_pwd.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
def forpasssuctest(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("15582868761")
# 输入验证码
code = solve_captcha(self.driver, "#captchaImg")
self.driver.find_element(By.CSS_SELECTOR, "#captcha").send_keys(code)
#进入下一步
self.driver.find_element(By.CSS_SELECTOR, "#forget_pwd > ul.hobby_jz > div > input").click()
time.sleep(1)
#由于该网站这里出现bug 所以下一步无法继续测试 就只测试这一点 第一步的验证通过断言和截图来完成
txt = self.driver.find_element(By.CSS_SELECTOR, "body > div.home-index-middle > div > div.home-main.forgetpaw > div > div.personerinfro.verifyi > ul:nth-child(2) > li:nth-child(2) > a").text
assert txt == "15582868761"
#添加截图
MallDriver.getScreeShot()
def forpassfailtest(self):
#账户名正确 但是验证码不正确
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("15582868761")
#输入错误验证码
self.driver.find_element(By.CSS_SELECTOR, "#captcha").send_keys("1234")
#点击进入下一步
self.driver.find_element(By.CSS_SELECTOR, "#forget_pwd > ul.hobby_jz > div > input").click()
time.sleep(1)
#进行验证是否错误 断言检查 由于这里的弹窗元素是动态元素 所以无法直接查找
# TXT = self.driver.find_element(By.CSS_SELECTOR, "#layui-layer2 > div.layui-layer-content.layui-layer-padding").text
# assert TXT == "验证码不正确"
#添加截图
MallDriver.getScreeShot()
time.sleep(3)
#关闭弹窗
# self.driver.find_element(By.CSS_SELECTOR, "#layui-layer2 > div.layui-layer-btn.layui-layer-btn- > a").click()
7.商城首页功能测试类(Malllsit.py)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class Malllsit:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/Index/index.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
def listlogintest(self):
#查找用户名和头像
self.driver.find_element(By.CSS_SELECTOR, "#myCarousel > div.right-sidebar.p > div.usertpshop > div.head_index > a > img")
self.driver.find_element(By.CSS_SELECTOR,"#myCarousel > div.right-sidebar.p > div.usertpshop > p > span")
# 点击会员中心按钮
self.driver.find_element(By.CSS_SELECTOR, "#myCarousel > div.right-sidebar.p > div.usertpshop > div.login_index > a:nth-child(1)").click()
# 等待新标签页打开并切换
WebDriverWait(self.driver, 10).until(lambda d: len(d.window_handles) > 1)
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(2)
# 验证会员中心页面
self.driver.find_element(By.CSS_SELECTOR, "body > div.home-index-middle > div > div.home-main > div.ri-menu.fr > div.menu-ri-t.p")
# 截图
MallDriver.getScreeShot()
# 关闭会员中心标签页并返回首页
self.driver.close()
self.driver.switch_to.window(self.driver.window_handles[0])
#验证商城入驻按钮
self.driver.find_element(By.CSS_SELECTOR, "#myCarousel > div.right-sidebar.p > div.bulletin > div.six_entrance > table > tbody > tr.lastcow > td.lastcol > div > a").click()
#等待新标签页打开并且切换
WebDriverWait(self.driver, 10).until(lambda d: len(d.window_handles) > 1)
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(2)
# 验证商城入驻页面
self.driver.find_element(By.CSS_SELECTOR, "body > div.main-banner-warp > div > img")
# 截图
MallDriver.getScreeShot()
# 关闭会员中心标签页并返回首页
self.driver.close()
self.driver.switch_to.window(self.driver.window_handles[0])
#验证全部商品分类按钮功能
self.driver.find_element(By.CSS_SELECTOR,"body > div.tpshop-tm-hander.p > div.nav.tpshop2_0_nav.p > div > div.categorys.home_categorys > div.dt > a").click()
# 等待新标签页打开并且切换
WebDriverWait(self.driver, 10).until(lambda d: len(d.window_handles) > 1)
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(2)
# 验证搜索结果页面
self.driver.find_element(By.CSS_SELECTOR, "body > div.search-opt.troblect")
# 截图
MallDriver.getScreeShot()
# 关闭会员中心标签页并返回首页
self.driver.close()
self.driver.switch_to.window(self.driver.window_handles[0])
#验证店铺街按钮
self.driver.find_element(By.CSS_SELECTOR,"#nav > ul > li:nth-child(4) > a").click()
# 等待新标签页打开并且切换
WebDriverWait(self.driver, 10).until(lambda d: len(d.window_handles) > 1)
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(2)
# 验证搜索店铺街页面
TXt = self.driver.find_element(By.CSS_SELECTOR, "body > div.search-box.p > div > div > span").text
assert TXt == "店铺街"
# 截图
MallDriver.getScreeShot()
#点击店铺进入店铺详情页来进行验证 通过截图
self.driver.find_element(By.CSS_SELECTOR,"body > div.shop-list-tour.ma-to-20.p > div > div > div.storestreet.p.ma-to-20 > ul:nth-child(2) > li:nth-child(1) > div > a:nth-child(2) > div > div.inetrjol > p.names").click()
# 截图
MallDriver.getScreeShot()
# 关闭会员中心标签页并返回首页
self.driver.close()
self.driver.switch_to.window(self.driver.window_handles[0])
#验证显示抢购按钮
self.driver.find_element(By.CSS_SELECTOR,"#nav > ul > li:nth-child(6) > a").click()
# 等待新标签页打开并且切换
WebDriverWait(self.driver, 10).until(lambda d: len(d.window_handles) > 1)
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(2)
# 验证搜索结果页面
self.driver.find_element(By.CSS_SELECTOR, "body > div.mod_container > div.timeline > div > ul > li.timeline_item.timeline_item_selected > a > div")
# 截图
MallDriver.getScreeShot()
# 关闭会员中心标签页并返回首页
self.driver.close()
self.driver.switch_to.window(self.driver.window_handles[0])
#验证搜索栏功能
self.driver.find_element(By.CSS_SELECTOR,"#q").clear()
self.driver.find_element(By.CSS_SELECTOR,"#q").send_keys("手机")
self.driver.find_element(By.CSS_SELECTOR,"#sourch_form > button").click()
time.sleep(2)
#添加截图
MallDriver.getScreeShot()
#点击商品进入商品详情页
self.driver.find_element(By.CSS_SELECTOR,"body > div.shop-list-tour.ma-to-20.p > div > div.stsho.fr > div.shop-list-splb.p > ul > li:nth-child(1) > div > div:nth-child(4) > a").click()
time.sleep(2)
MallDriver.getScreeShot()
#点击首页 进行返回
self.driver.find_element(By.CSS_SELECTOR,"#nav > ul > li:nth-child(1) > a").click()
#验证精品推荐栏
tt = self.driver.find_element(By.CSS_SELECTOR,"body > div.fn-mall.p.ma-to-20 > div > div.conditions.top_content > div.top > p").text
assert tt == "精品推荐"
t1 = self.driver.find_element(By.CSS_SELECTOR,"#swiper-container101 > div.swiper-wrapper > div.swiper-slide.swiper-slide-active > div > div > ul > li:nth-child(1) > a > p:nth-child(2)").text
self.driver.find_element(By.CSS_SELECTOR,"#swiper-container101 > div.swiper-wrapper > div.swiper-slide.swiper-slide-active > div > div > ul > li:nth-child(1) > a > p:nth-child(2)").click()
t2 = self.driver.find_element(By.CSS_SELECTOR,"#buy_goods_form > div > h1").text
assert t1 == t2
#添加截图
MallDriver.getScreeShot()
#点击首页返回
self.driver.find_element(By.CSS_SELECTOR,"#nav > ul > li:nth-child(1) > a").click()
#验证好货上新栏
tt = self.driver.find_element(By.CSS_SELECTOR,"body > div.fn-mall.p.ma-to-20 > div > div.good_goods.top_content > div > p").text
assert tt == "好货上新"
t1 = self.driver.find_element(By.CSS_SELECTOR,"body > div.fn-mall.p.ma-to-20 > div > div.good_goods.top_content > ul > li:nth-child(4) > a > p:nth-child(2)").text
self.driver.find_element(By.CSS_SELECTOR,"body > div.fn-mall.p.ma-to-20 > div > div.good_goods.top_content > ul > li:nth-child(4) > a > p:nth-child(2)").click()
t2 = self.driver.find_element(By.CSS_SELECTOR, "#buy_goods_form > div > h1").text
assert t1 == t2
# 添加截图
MallDriver.getScreeShot()
# 点击首页返回
self.driver.find_element(By.CSS_SELECTOR, "#nav > ul > li:nth-child(1) > a").click()
#验证猜你喜欢栏
tt = self.driver.find_element(By.CSS_SELECTOR, "body > div.fn-mall.p.ma-to-20 > div > div.wbox.gm_guess > div.gm_title > h2").text
assert tt =="猜你喜欢"
#验证楼层领航五层
tt = self.driver.find_element(By.CSS_SELECTOR, "#floor1 > div > div.uantit.fixedu.p.pink > h3 > i").text
assert tt =="1F"
tt = self.driver.find_element(By.CSS_SELECTOR, "#floor2 > div > div.uantit.fixedu.p.default > h3 > i").text
assert tt =="2F"
tt = self.driver.find_element(By.CSS_SELECTOR, "#floor3 > div > div.uantit.fixedu.p.pink > h3 > i").text
assert tt =="3F"
tt = self.driver.find_element(By.CSS_SELECTOR, "#floor4 > div > div.uantit.fixedu.p.default > h3 > i").text
assert tt =="4F"
tt = self.driver.find_element(By.CSS_SELECTOR, "#floor5 > div > div.uantit.fixedu.p.default > h3 > i").text
assert tt =="5F"
8.商品详情页功能测试类(MallProtactsDetail.py)
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallProtactsDetail:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/Goods/goodsInfo/id/249.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
#在登陆情况下
def ProtactsDetaillogin(self):
#查找商品图片
self.driver.find_element(By.CSS_SELECTOR, "#zoomimg")
#查找商品名称
self.driver.find_element(By.CSS_SELECTOR, "#buy_goods_form > div > h1")
#查找商品价格
self.driver.find_element(By.CSS_SELECTOR, "#goods_price")
self.driver.find_element(By.CSS_SELECTOR, "#market_price")
#添加截图
MallDriver.getScreeShot()
#立即购买 按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#buy_now").click()
time.sleep(2)
MallDriver.getScreeShot()
MallDriver.driver.back()
time.sleep(2)
#查找店铺图片
self.driver.find_element(By.CSS_SELECTOR, "body > div.details-bigimg.p > div > div.detail-ry.p > div.delogo > a > img")
#查找店铺名称
self.driver.find_element(By.CSS_SELECTOR, "body > div.details-bigimg.p > div > div.detail-ry.p > div.delogo > a > span")
#查找店铺评分
self.driver.find_element(By.CSS_SELECTOR,"body > div.details-bigimg.p > div > div.detail-ry.p > div.line1.p")
# 进店逛逛按钮 测试
self.driver.find_element(By.CSS_SELECTOR, "body > div.details-bigimg.p > div > div.detail-ry.p > div.guaz_jd > a:nth-child(1)").click()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#nav > ul > li.active > a > span")
MallDriver.getScreeShot()
MallDriver.driver.back()
#在线客服按钮 测试
self.driver.find_element(By.CSS_SELECTOR, "#workerman-kefu").click()
MallDriver.getScreeShot()
#关注店铺按钮 测试
self.driver.find_element(By.CSS_SELECTOR, "#favoriteStore").click()
MallDriver.getScreeShot()
#商品介绍 按钮测试
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div.datail-nav-top > ul > li.red > a").click()
target = self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div:nth-child(2) > div.deta-descri")
# 滚动到目标元素
self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", target)
MallDriver.getScreeShot()
time.sleep(2)
#规格及包装 按钮测试
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div.datail-nav-top > ul > li:nth-child(2) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div:nth-child(3) > div > h2").click()
MallDriver.getScreeShot()
time.sleep(2)
#评价 按钮测试
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div.datail-nav-top > ul > li:nth-child(3) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div:nth-child(4) > div > div:nth-child(2) > ul")
MallDriver.getScreeShot()
time.sleep(2)
#售后服务 按钮测试
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div.datail-nav-top > ul > li:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div.detail-main.p > div > div.deta-ri-ma > div > div:nth-child(5) > div.shop-describe.p > div:nth-child(2)")
MallDriver.getScreeShot()
time.sleep(2)
#在未登录情况下
def ProtactsDetailbylogin(self):
# 查找商品图片
self.driver.find_element(By.CSS_SELECTOR, "#zoomimg")
# 查找商品名称
self.driver.find_element(By.CSS_SELECTOR, "#buy_goods_form > div > h1")
# 查找商品价格
self.driver.find_element(By.CSS_SELECTOR, "#goods_price")
self.driver.find_element(By.CSS_SELECTOR, "#market_price")
# 添加截图
MallDriver.getScreeShot()
#点击立即购买按钮
self.driver.find_element(By.CSS_SELECTOR, "#buy_now").click()
time.sleep(2)
MallDriver.getScreeShot()
9.购物车功能测试类(MallMyCart.py)
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallMyCart:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/Cart/index.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
#在登陆情况下
def mallmycartlogin(self):
#查找购物车元素是否存在
self.driver.find_element(By.CSS_SELECTOR, "#tpshop-cart > div.shoplist_deta.p > div > div")
self.driver.find_element(By.CSS_SELECTOR, "#edge_6")
#查找结算栏
self.driver.find_element(By.CSS_SELECTOR,"#tpshop-cart > div.shoplist_deta.floatflex > div > div > div > div.row_foot_last > div.column.widallr")
#查找推荐栏
self.driver.find_element(By.CSS_SELECTOR, "body > div.shoplist_guess > div > div")
self.driver.find_element(By.CSS_SELECTOR, "#guess-products > div.s-panel-main > div.goods-panel.jsaddsucc.p > ul > li:nth-child(4) > div > div.p-name > a").click()
time.sleep(2)
#切换标签页
WebDriverWait(self.driver, 10).until(lambda d: len(d.window_handles) > 1)
self.driver.switch_to.window(self.driver.window_handles[-1])
time.sleep(2)
#添加截图
MallDriver.getScreeShot()
#返回购物车页面
self.driver.close()
self.driver.switch_to.window(self.driver.window_handles[0])
#添加截图
MallDriver.getScreeShot()
#对商品数量进行调整
time.sleep(2)
t1 = self.driver.find_element(By.CSS_SELECTOR, "#cart_6_total_price").text
print(t1)
#数量+1
self.driver.find_element(By.CSS_SELECTOR, "#increment_6").click()
time.sleep(2)
#数量-1
self.driver.find_element(By.CSS_SELECTOR, "#decrement_6").click()
time.sleep(2)
t3 = self.driver.find_element(By.CSS_SELECTOR, "#cart_6_total_price").text
print(t3)
assert t3 == t1
#在默认全选的情况下进行结算测试
self.driver.find_element(By.CSS_SELECTOR, "#tpshop-cart > div.shoplist_deta.floatflex > div > div > div > div.row_foot_last > div.column.widallr > div.butpayin > a").click()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#layui-layer1 > span > a").click()
#添加截图
MallDriver.getScreeShot()
MallDriver.driver.back()
time.sleep(2)
#在所有商品全部不选的情况下 点击结算
self.driver.find_element(By.CSS_SELECTOR, "#tpshop-cart > div.shoplist_deta.p > div > div > div.column.cart-checkbox > i").click()
self.driver.find_element(By.CSS_SELECTOR, "#tpshop-cart > div.shoplist_deta.floatflex > div > div > div > div.row_foot_last > div.column.widallr > div.butpayin > a").click()
#添加截图
MallDriver.getScreeShot()
time.sleep(4)
#查找和使用其他按钮测试
#进入帮助中心的退款售后流程 按钮
self.driver.find_element(By.CSS_SELECTOR, "body > div.footer.p > div.w1224 > div.footer-ewmcode > div.foot-list-fl > div.foot-list-wrap.p > ul:nth-child(5) > li:nth-child(2) > a").click()
MallDriver.getScreeShot()
MallDriver.driver.back()
#友情链接 淘宝网按钮
self.driver.find_element(By.CSS_SELECTOR, "body > div.footer.p > div.w1224 > div.footer-ewmcode > div.foot-list-fl > div.friendship-links.p > div > a:nth-child(1)").click()
MallDriver.getScreeShot()
MallDriver.driver.back()
#中国互联网举报中心按钮
self.driver.find_element(By.CSS_SELECTOR, "body > div.footer.p > div.w1224 > div.mod_copyright.p > p.mod_copyright_auth > a.mod_copyright_auth_ico.mod_copyright_auth_ico_5").click()
MallDriver.getScreeShot()
def mallmycartbylogin(self):
self.driver.find_element(By.CSS_SELECTOR,"body > div.shopcar_empty > div > div")
MallDriver.getScreeShot()
txt = self.driver.find_element(By.CSS_SELECTOR,"body > div.shopcar_empty > div > div > div > ul > li.txt.nologin").text
print(txt)
assert txt == "购物车内暂时没有商品,登录后将显示您之前加入的商品"
10.订单页面功能测试类(MallOrders.py)
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallOrders:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/Goods/goodsInfo/id/249.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
#在登陆情况下
def mallorderlogin(self):
#进入结算界订单界面
self.driver.find_element(By.CSS_SELECTOR,"#buy_now").click()
#默认已经存在收货人信息
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#ajax_address")
#查找配送方式模块
self.driver.find_element(By.CSS_SELECTOR, "body > div.w1224.z-parkage-pc.p")
#查找送货清单模块
self.driver.find_element(By.CSS_SELECTOR,"body > div.sendgoodslist > div > div.shopping-listpay")
#查找发票信息
self.driver.find_element(By.CSS_SELECTOR,"#changeinfo")
#查找优惠卷模块
self.driver.find_element(By.CSS_SELECTOR,"#usecou-step-tit > div > div.coupon-detail")
#添加截图
MallDriver.getScreeShot()
#提交订单 按钮测试
self.driver.find_element(By.CSS_SELECTOR,"#submit_order").click()
time.sleep(1)
#添加截图
MallDriver.getScreeShot()
time.sleep(5)
txt = self.driver.find_element(By.CSS_SELECTOR,"body > div.fn-cart-pay > div > div.layout.after-ta.order-ha > div.erhuh > h3").text
print(txt)
#assert txt == ""
#查找4中支付方式
self.driver.find_element(By.CSS_SELECTOR, "#cart4_form > div > div > dl > dd > div > div.po-re.dsfzf-ee > ul > li:nth-child(1) > div > label > img")
self.driver.find_element(By.CSS_SELECTOR, "#cart4_form > div > div > dl > dd > div > div.po-re.dsfzf-ee > ul > li:nth-child(2) > div > label > img")
self.driver.find_element(By.CSS_SELECTOR, "#cart4_form > div > div > dl > dd > div > div.po-re.dsfzf-ee > ul > li:nth-child(3) > div > label > img")
self.driver.find_element(By.CSS_SELECTOR, "#cart4_form > div > div > dl > dd > div > div.po-re.dsfzf-ee > ul > li:nth-child(4) > div > label > img").click()
MallDriver.getScreeShot()
#确认支付方式 按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#cart4_form > div > div > div > a").click()
time.sleep(1)
MallDriver.getScreeShot()
11.显示抢购功能测试类(MallFlashSale.py)
from selenium.webdriver.common.by import By
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallFlashSale:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/index.php?m=Home&c=Activity&a=flash_sale_list"
self.driver = MallDriver.driver
self.driver.get(self.url)
def FlashSalelogin(self):
#查找显示抢购活动界面元素
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#flash_sale_list > div.banner.msbanpr > div > img")
self.driver.find_element(By.CSS_SELECTOR, "body > div.mod_container > div.timeline > div > ul > li.timeline_item.timeline_item_selected > a > div")
#添加截图
MallDriver.getScreeShot()
# 查找和使用其他按钮测试
# 进入帮助中心的退款售后流程 按钮
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR,"body > div.footer.p > div.footer.p > div.w1224 > div.footer-ewmcode > div.foot-list-fl > div.foot-list-wrap.p > ul:nth-child(5) > li:nth-child(2) > a").click()
MallDriver.getScreeShot()
MallDriver.driver.back()
# 友情链接 淘宝网按钮
self.driver.find_element(By.CSS_SELECTOR,"body > div.footer.p > div.footer.p > div.w1224 > div.footer-ewmcode > div.foot-list-fl > div.friendship-links.p > div > a:nth-child(1)").click()
MallDriver.getScreeShot()
MallDriver.driver.back()
# 中国互联网举报中心按钮
self.driver.find_element(By.CSS_SELECTOR,"body > div.footer.p > div.footer.p > div.w1224 > div.mod_copyright.p > p.mod_copyright_auth > a.mod_copyright_auth_ico.mod_copyright_auth_ico_5").click()
MallDriver.getScreeShot()
12.帮助中心功能测试类(MallHelpcenter.py)
from selenium.webdriver.common.by import By
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
import time
class MallHelpcenter:
def __init__(self):
driver = ""
url = ""
self.url = "https://demo6.tp-shop.cn/Home/Article/detail/article_id/4.html"
self.driver = MallDriver.driver
self.driver.get(self.url)
def helpcenter(self):
#查找帮助栏
self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column")
#添加截图
MallDriver.getScreeShot()
time.sleep(1)
#查看购物流程按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column > div:nth-child(1) > ul > li > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#content > div > div")
MallDriver.getScreeShot()
#查看支付方式按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column > div:nth-child(2) > ul > li > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#content > div > div")
MallDriver.getScreeShot()
#查看购物指南按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column > div:nth-child(3) > ul > li > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#content > div > div")
MallDriver.getScreeShot()
#查看退款售后流程按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column > div:nth-child(4) > ul > li > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#content > div > div")
MallDriver.getScreeShot()
txt = self.driver.find_element(By.CSS_SELECTOR, "#content > div > div > h2 > span").text
assert txt == "退款售后流程"
#查看促销活动按钮测试
self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column > div:nth-child(5) > ul > li > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#content > div > div")
MallDriver.getScreeShot()
# self.driver.find_element(By.CSS_SELECTOR, "#page > div.hc-column")
13.启动类(runlist.py)
from common.utils import MallDriver
from common.captcha_tool import solve_captcha
from tests import MallLogin
from tests import MallEnroll
from tests import MallForpass
from tests import Malllsit
from tests import MallStoreDetail
from tests import MallOrders
from tests import MallMyCart
from tests import MallHelpcenter
from tests import MallProtactsDetail
from tests import MallFlashSale
#程序运行入口
if __name__ =="__main__":
#登录失败
# MallLogin.MallLogin().loginfailtest()
#登录成功
#MallLogin.MallLogin().loginsuctest()
#手机号注册
# MallEnroll.MallEnroll().enrollbyphone()
#邮箱注册
MallEnroll.MallEnroll().enrollbyemail()
#商城首页登录情况下测试
# Malllsit.Malllsit().listlogintest()
#商品详情页测试
# MallProtactsDetail.MallProtactsDetail().ProtactsDetaillogin()
#在登陆情况下我的购物车页面测试
#MallMyCart.MallMyCart().mallmycartlogin()
#在登陆情况下 测试订单页面
#MallOrders.MallOrders().mallorderlogin()
#测试帮助中心界面
# MallHelpcenter.MallHelpcenter().helpcenter()
#测试显示抢购界面
#MallFlashSale.MallFlashSale().FlashSalelogin()
#在未登录情况下 我的购物车页面测试
# MallMyCart.MallMyCart().mallmycartbylogin()
#在未登录下测试商品详情页
# MallProtactsDetail.MallProtactsDetail().ProtactsDetailbylogin()
#忘记密码第一步
# MallForpass.MallForpass().forpasssuctest()
#忘记密码错误情况下第一步测试
# MallForpass.MallForpass().forpassfailtest()
MallDriver.driver.quit()
八 BUG描述
(一)登录页面
1.登录页面设计了微信qq登录按钮 但是按钮并不能可以使用 点击后会进入下列图片情况



2.在页面下方的信息公告按钮点击之后并不能展示出合适的信息内容

3.下方提供的其他网站按钮无法正常点开 点击后不会有任何效果

(二)注册页面
1.已经注册过的账户依旧能够再次注册 但是第二次注册设置的密码不会覆盖第一次的密码

2.在注册完成之后的第二天 账号会自动被注毁 需要重新注册
(三)忘记登录页面
(1)在验证身份 发送二维码那一步会发生Bug 发送验证码 会提示随意输入4位数 但是当输入时 会提示要先发送验证码 导致无法进入下一步



(四)商城首页
1.领劵中心栏内容无法正常显示 即便打开领劵中心页面不会有任何内容

2.在楼层领航栏中的5个栏目中 只要是没有标明具体价格的图片按钮点击都不会起到任何作用





(五)帮助中心页面
1.点击购物指南按钮后切换的不会显示正确的内容

2.点击促销活动按钮后切换的不会显示正确的内容

九 测试总结
一、测试概述
| 项 | 结果 |
|---|---|
| 被测系统 | TPshop(Pshop)多商户商城 |
| 测试范围 | 用户管理、商品、购物车、订单、支付、兼容性、帮助中心共 8 大模块 |
| 用例规模 | 累计 80+ 场景,含 65 个功能场景、15 个兼容与异常场景 |
| 自动化脚本 | 13 个 PageObject 类 + 1 个运行入口(Python3+Selenium4) |
| 运行环境 | Win11 + Chrome 120/Edge 119 + 模拟移动端(414×896) |
| 截图证据 | 按日期归档,共 3 日 200+ 张运行截图 |
二、测试结果汇总
| 维度 | 通过率 | 缺陷数 | 备注 |
|---|---|---|---|
| 用户注册/登录/找回密码 | 75% | 4 | 重复注册、验证码死锁、第三方登录失效 |
| 商城首页 | 70% | 2 | 领券中心空白、楼层未标价按钮无效 |
| 商品&店铺详情 | 85% | 1 | 在线客服按钮未实现 |
| 购物车/订单/支付 | 90% | 0 | 流程闭环,金额计算正确 |
| 帮助中心 | 60% | 1 | 购物指南内容错位 |
| 兼容性(PC+移动+Edge) | 100% | 0 | 布局无错位,功能可点 |
| 总体 | 80% | 8 | 主流程可走,细节体验待修 |
三、核心功能验证结论
1.注册:手机/邮箱通道正常,但 已存在账号仍可二次注册(未触发唯一性校验)。
2.登录:账号密码、验证码、记住登录态均通过;微信/QQ/微博第三方按钮点击 404。
3. 商品搜索:关键词、筛选、排序、价格区间正确;客服浮窗未实现。
4.购物车:数量增减、全选、删除、规格修改、优惠券/积分抵扣实时计算 0 误差。
5. 订单:收货地址增删改、配送方式、支付方式选择、余额+积分+优惠券组合支付 闭环正确。
6.兼容性:Chrome/Edge/移动端模拟无样式错位与功能失效。
四、缺陷清单(共 8 项)
| 编号 | 模块 | 缺陷描述 | 严重度 | 状态 |
|---|---|---|---|---|
| D001 | 注册 | 已注册手机号可重复提交,后端未拦截 | 高 | 新建 |
| D002 | 注册 | 新账号次日被自动注销 | 高 | 新建 |
| D003 | 登录 | 微信/QQ/微博第三方登录 404 | 中 | 新建 |
| D004 | 忘记密码 | 验证码发送逻辑死锁(提示先发送→输入→再提示发送) | 高 | 新建 |
| D005 | 首页 | 领券中心打开后空白 | 中 | 新建 |
| D006 | 首页 | 楼层未标明价格的入口按钮无效 | 中 | 新建 |
| D007 | 商品详情 | 在线客服按钮无浮窗 | 低 | 新建 |
| D008 | 帮助中心 | 购物指南栏目内容展示错位 | 低 | 新建 |
五、风险与建议
| 风险 | 建议 |
|---|---|
| 图形验证码识别率 90%,极端干扰字符可能失败 | 接入打码平台或后台白名单验证码 |
| 重复注册、账号自动注销涉及会员数据安全 | 建议后端增加唯一索引与定时任务审计 |
| 第三方登录 404 影响拉新 | 配置正确回调地址并申请官方审核 |
| 领券中心空白影响营销转化 | 检查后台优惠券发布状态与前端调用接口 |
| 客服功能缺失影响售后体验 | 优先接入在线客服 SDK 或跳转工单系统 |
六、测试结论
主流程畅通:注册→登录→搜索→加购→下单→支付闭环验证通过,金额计算精准。
核心缺陷 8 项,严重 4 项修复后可达到上线标准。
更多推荐




所有评论(0)