【Web功能测试】Web商城搜索模块测试用例设计深度解析
Web商城的搜索模块功能测试用例设计
1.搜索功能设计
1.1 搜索框设计
-
位置显眼:通常置于页面顶部中央,符合用户习惯。
-
智能提示(Autocomplete):输入时实时推荐关键词、商品或分类(如“手机 苹果”)。
-
支持多分类输入:商品类型、店铺(下拉框)
1.2 搜索算法
1.2.1 分词与语义理解
- 中文需分词,示例:“红色连衣裙” 拆分为**”红色/连衣裙“**
- 支持同义词扩展,示例:”手机壳→手机套“
- 拼写纠错,示例:“iphnoe→iphone”
1.2.2 相关性排序
综合关键词匹配度(标题>描述)、商品销量、评分、价格、库存等因素,可通过BM25算法或**机器学习模型(如Learning to Rank)**实现
1.3 过滤与排序
- 多维度过滤:分类、品牌、价格区间、评分、属性(如“屏幕尺寸”)。
- 动态排序:默认按相关性,支持手动按价格、销量、新品排序。
1.4 搜索结果展示
-
分页与懒加载:每页展示20-50条,支持无限滚动。
-
高亮关键词:标题和描述中突出显示搜索词。
-
相关推荐:无结果时推荐相似商品(如“找不到‘耐克’?试试这些运动鞋”)。
1.5 性能优化
- 缓存高频查询:如“手机”“笔记本”等热门关键词的结果。
- 异步加载:先展示核心结果,再逐步加载图片、评论等次要内容。
2.搜索功能技术原理
2.1 数据采集与预处理
- 数据源:商品数据库(MySQL)、日志( 用户搜索词、点击行为)
- 清洗与标准化:去除无效字符、同一单位(如”500g→0.5kg“)、提取属性(颜色、尺寸)
2.2 倒排索引
- 核心数据结构:将文档(商品)映射到关键词
- 实现工具:Elasticsearch等搜索引擎内置倒排索引
2.3 查询处理流程
- 分词与解析:使用分词器拆分查询词
- 纠错与扩展:基于字典或同统计模型修正拼写错误
- 检索与打分:
- TF-IDF:衡量词频(TF)和逆文档频率(IDF)。
- BM25:改进版TF-IDF,考虑文档长度对相关性的影响。
- 向量检索:将文本转换为向量(如BERT模型),计算余弦相似度。
- 个性化搜索:
- 用户画像:结合历史搜索、点击、购买行为,动态调整排序权重。
- 实时反馈:A/B测试不同排序策略,持续优化模型。
3.测试用例设计
测试范围
| 测试维度 | 具体内容 |
|---|---|
| 核心功能 | 基础搜索、智能提示、过滤排序、结果展示、分页/懒加载、高亮显示 |
| 业务规则 | 库存商品优先、促销置顶、敏感词过滤、搜索词黑名单、权重策略 |
| 边界场景 | 超长词(1000字符)、特殊符号(#@!)、空搜索、全角/半角混合输入、多语言 |
3.1 基础功能流程测试验证
3.1.1正向流程
- 选好查询类型(商品/店铺)→输入关键字→点击查询/回车→跳转/显示搜索的商品(店铺)信息列表
3.1.2 异常分支流程
-
表单输入异常
-
功能异常的的情况
- 查询类型无法是否可以切换
- 查询按钮/键盘是否回车异常
- 显示结果未高亮显示
- 显示结果是否正常
- 搜索没有商品的信息,是否显示无相关内容和相关产品的推荐显示
- 显示结果是否是懒加载
-
网络异常的情况
- 断网
- 弱网
3.1.3 搜索输入测试验证
设计方法:等价划分法,边界值法,错误推测法
-
等价划分法(含商品信息、含空格、含中英文混合)
- 有效用例:正常关键字,带有空格关键字,中英混合关键字
- 无效用例:不含有商品信息的输入,空,特殊符号
-
边界值法:
- 大于输入框最大输入量
- 空
-
错误推测法:
-
含有商品信息,含有其他与商品无法的关键字。
-
多组商品关键字
-
3.2 智能提示功能
3.2.1正向流程测试
- 输入短缺的提示词→显示相关联想的提示项→点击的提示项→直接暂时“提示项”商品的信息。
3.2.2 异常分支测试
- 输入异常的提示词
- 多语言混合→验证:联想词是否支持多语言
- 特殊字符攻击
- 超长字符串→预期:截断处理+【请输入有效的关键词】
- 功能异常的情况
- 无输入的情况→验证:是否存在热搜或历史记录
- 联想词冲突→验证:联想词分类标签(苹果/指向的是水果还是品牌)
- 网络异常的情况
- 弱网环境→是否出现“加载”界面
- 断网状态→是否提示离线或本地缓存联想提示词
3.2.3 提示词输入测试验证
设计方法:错误推测法
- 测试不同的词长→验证:输入多少字可以出现提示词(2/4/6/8)
- 测试不同的语言→验证:是否支持多语言类型。
- 测试含有特殊字符的→验证:输入特殊字符是否出现提示词或热搜词
3.3 结果赛选功能
3.3.1 筛选规则
- 基础赛选规则:
- 分类
- 层级结构:支持多级分类(如“手机 → 智能手机 → 5G手机”)
- 动态联动:选择父分类后,子分类选项动态更新(如选择“手机”后显示“品牌”筛选)。
- 技术实现:通过Elasticsearch的
terms aggregation或数据库JOIN查询实现。
- 价格区间:
- 自动分段:根据商品价格分布动态生成区间(如“0-100元,100-500元”)。
- 自定义输入:允许用户手动输入最小/最大值(需验证输入合法性,如负数或非数字字符)。
- 技术优化:使用预计算的价格区间索引加速查询。
- 品牌
- 热门置顶:按品牌商品数量或用户点击量排序(如“Apple、华为、小米”优先显示)
- 字母索引:数据量大时提供A-Z快速导航(常见于海外电商)。
- 去重逻辑:避免同品牌不同拼写(如“华为”和“HUAWEI”)导致重复选项。
- 分类
- 商品属性筛选:
- 规格参数:
- 动态属性:根据分类动态加载属性(如“手机”分类显示“屏幕尺寸”“内存”,服装显示“颜色”“尺码”)。
- 多选逻辑:
- AND模式:选择“颜色:红色”+“尺码:M” → 仅显示同时满足的商品。
- OR模式:部分平台支持“颜色:红色或蓝色”(需明确提示用户逻辑)
- 技术实现:使用Elasticsearch的
nested object或数据库的JSON字段存储属性。
- 服务与标签:
- 服务承诺:如“次日达”“免运费”“7天无理由退货”。
- 活动标签:如“限时折扣”“买一送一”“新品首发”。
- 优先级规则:多个标签共存时按业务权重排序(如“促销标签”>“服务标签”)。
- 规格参数:
- 业务逻辑筛选:
- 库存状态:
- 有货优先:默认过滤无货商品,或标记“无货”但仍展示(如Amazon)。
- 区域库存:根据用户地理位置筛选可配送的商品(依赖地理位置API)。
- 促销与优先级:
- 促销置顶:参与活动的商品固定在前几位。
- 人工加权:运营可手动提升特定商品排名(如主推新品)
- 商家相关:
- 店铺筛选:按店铺名称或信誉等级过滤。
- 库存状态:
3.3.2正向流程测试
搜索结果→选择排序规则/过滤规则→显示处理后的结果
3.3.3 异常分支测试
-
输入异常
- 价格区间手动输入范围
-
功能异常
- 单条件筛选异常
- 多条件筛选异常
-
网络异常
3.3.4 价格区间测试
- 价格区间条件选择测试
- 价格区间范围输入测试
3.3.5 条件筛选测试(单条件、多条件)验证
-
单条件赛选测试
筛选类型 测试用例示例 预期结果 分类筛选 选择「手机 → 智能手机」 仅显示该分类下的商品,且子分类选项动态更新(如品牌、价格区间) 价格区间 输入自定义价格范围(如500-2000元) 显示价格在此区间内的商品,超出范围的商品被过滤 品牌筛选 选择「Apple」和「华为」 显示同时属于这两个品牌的商品(AND逻辑)或任一品牌(OR逻辑,需明确规则) 库存状态 勾选「仅显示有货」 无库存商品被隐藏,且结果中所有商品库存>0 -
多条件赛选测试
-
设计方法:正交表法,(决策表)
- 优点:高效较少测试量,适合独立条件组合,对于这些可以单条件测试的一般都是可以单独的条件。
- 缺点:无法覆盖所有边界,需补充测试。
- 与决策或因果之间的区别
- 决策和因果,是逻辑上覆盖全面,适合处理条件间依赖关系,如果条件组合过多的时候会导致用例指数级的增长
-
注意:无货赛选是业务逻辑筛选,因为关联到平台的库存管理,而非商品本身的静态属性
-
策略:
- 强依赖条件:
- 示例:选择“仅显示有货”时,无货商品必须被过滤,无论其他条件如何。
- 处理方式:决策表强制覆盖(如“有货=是/否”与其他条件组合)。
- 独立条件:
- 示例:品牌、颜色、价格区间之间无逻辑冲突。
- 处理方式:正交表覆盖。
- 核心逻辑用决策表覆盖,长尾条件用正交表抽样,兼顾严谨又存在效率
- 强依赖条件:
-
设计正交实验表
场景:筛选条件为品牌(A/B/C)、颜色(红/蓝)、价格区间(0-100/100-500)。
-
正交表选择:L9(3^4)表:实际上是3因素
测试编号 品牌 颜色 价格区间 1 A 红 0-100 2 A 蓝 100-500 3 B 红 100-500 4 B 蓝 0-100 5 C 红 0-100 6 C 蓝 100-500
-
-
决策表验证依赖关系(补充)
场景:当用户选择“仅显示有货”时,需确保无货商品被过滤。
条件组合 有货=是 有货=否 品牌=A, 价格=0-100 显示 不显示 品牌=B, 价格=100-500 显示 不显示
-
3.4 结果排序功能(不涉及推广模块)
3.4.1排序规则
- 销量(默认降序)
- 价格(可选降序或升序)
- 两者之间无法同时选中
3.4.2正向流程测试
搜索结果→选择【销量】排序/【价格】排序→显示处理后的结果
3.4.3 异常分支测试
-
无输入异常
-
功能异常
- 价格排序升序或降序无法切换
- 销量是否默认降序
- 排斥互斥测试
- 数据边界(价格相同、销售为0的情况)
-
网络异常
3.4.4 数据边界测试
-
价格相同商品的排序稳定性→相同价格商品按指定次规则排序(如销量、上架时间、ID),且顺序不随机跳动
-
销量为零的商品排序→销量为0的商品按默认规则(如价格、上架时间)排在末尾
相关文章:
【Web功能测试】Web商城搜索模块测试用例设计深度解析
Web商城的搜索模块功能测试用例设计 1.搜索功能设计 1.1 搜索框设计 位置显眼:通常置于页面顶部中央,符合用户习惯。 智能提示(Autocomplete):输入时实时推荐关键词、商品或分类(如“手机 苹果”&#x…...
穿梭在数字王国:Python进制转换奇遇记
穿梭在数字王国:Python进制转换奇遇记 想象一下,你是一位勇敢的探险家,正在穿越神秘的"数字王国"。在这个王国里,不同的地区使用着不同的语言(或者说,进制)。二进制村的居民只懂"0"和"1";八进制镇的人们使用0到7的数字;而十六进制城的…...
【动态规划】深入动态规划:背包问题
文章目录 前言01背包例题一、01背包二、分割等和子集三、目标和四、最后一块石头的重量|| 完全背包例题一、完全背包二、 零钱兑换三、零钱兑换||四、完全平方数 前言 什么是背包问题,怎么解决算法中的背包问题呢? 背包问题 (Knapsack problem) 是⼀种组…...
BUUCTF-web刷题篇(25)
34.the mystery of ip 给出链接,输入得到首页: 有三个按钮,flag点击后发现页面窃取客户端的IP地址,通过给出的github代码中的php文件发现可以通过XFF或Client-IP传入值。使用hackbar或BP 使用XSS,通过github给出的目录…...
StringBuilder类基本使用
文章目录 1. 基本介绍2. StringBuilder常用方法3. String、StringBuffer 和 StringBuilder 的比较4. String、StringBuffer 和 StringBuilder 的效率测试5. String、StringBuffer 和 StringBuilder 的选择 1. 基本介绍 一个可变的字符序列。此类提供一个与StringBuffer兼容的A…...
设计模式 --- 访问者模式
访问者模式是一种行为设计模式,它允许在不改变对象结构的前提下,定义作用于这些对象元素的新操作。 优点: 1.符合开闭原则:新增操作只需添加新的访问者类,无需修改现有对象结构。 2.操作逻辑集中管理&am…...
常用AI辅助编程工具及平台介绍
在当今快速发展的技术领域,AI编程工具已经成为提升开发效率和代码质量的重要手段。这些工具利用人工智能技术来帮助开发者提高编程效率、生成代码建议、自动完成功能,并识别错误。接下来,我们将详细介绍几款主流的AI编程工具及其特点,以帮助你选择最适合自己的开发需求的工…...
HashTable,HashMap,ConcurrentHashMap之间的区别
文章目录 线程安全方面性能方面总结 线程安全方面 HashMap线程不安全,HashMap的方法没有进行同步,多个线程同时访问HashMap,并至少有一个线程修改了其内容,则必须手动同步。 HashTable是线程安全的,在HashMap的基础上…...
LeetCode.225. 用队列实现栈
用队列实现栈 题目解题思路1. push2. pop3. empty CodeQueue.hQueue.cStack.c 题目 225. 用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现…...
LVGL AnalogClock控件和Dclock控件详解
LVGL AnalogClock控件和Dclock控件详解 一、AnalogClock控件详解1. 概述2. 创建模拟时钟2.1 函数2.2 参数2.3 返回值 3. 设置时间3.1 函数3.2 参数 4. 获取时间4.1 函数4.2 参数 5. 设置样式5.1 常用样式属性5.2 示例代码 6. 更新时间6.1 定时器回调示例6.2 创建定时器 7. 示例…...
通过分治策略解决内存限制问题完成大型Hive表数据的去重的PySpark代码实现
在Hive集群中,有一张历史交易记录表,要从这张历史交易记录表中抽取一年的数据按某些字段进行Spark去重,由于这一年的数据超过整个集群的内存容量,需要分解成每个月的数据,分别用Spark去重,并保存为Parquet文…...
深入解析 HTML 中 `<script>` 标签的 async 和 defer 属性
一、背景与问题 在网页性能优化中,脚本的加载和执行方式直接影响页面渲染速度和用户体验。传统 <script> 标签的阻塞行为可能导致页面“白屏”,而 async 和 defer 属性提供了非阻塞的解决方案。本周重点研究二者的差异、适用场景及实际应用。 二、…...
CSS 背景属性学习笔记
CSS 背景属性用于定义 HTML 元素的背景效果,包括背景颜色、背景图像、图像平铺方式、图像定位以及图像是否固定等。以下是关于 CSS 背景属性的详细学习笔记。 一、背景颜色(background-color) background-color 属性用于定义元素的背景颜色…...
WT-yolo数据集配置文件data.yaml的写法示例
YOLO 的 data.yaml 配置文件用于定义数据集的结构和类别信息。这里列出几种常见的写法和示例,在正式训练时需要根据实际需求正确配置 data.yaml 文件。 1. 基础配置(相对路径) 这是最常见的写法,使用相对路径来指定训练集、验证…...
【C++初学】课后作业汇总复习(七) 指针-深浅copy
1、 HugeInt类:构造、、cout Description: 32位整数的计算机可以表示整数的范围近似为-20亿到+20亿。在这个范围内操作一般不会出现问题,但是有的应用程序可能需要使用超出上述范围的整数。C可以满足这个需求,创建功能强大的新的…...
探索加密期权波动率交易的系统化实践——动态对冲工具使用
Trading Volatility – What Are My Options? 在本文中,我们将介绍一些如何交易资产波动性(而非资产价格)的示例。为了帮助理解,我们将使用 Deribit 上提供的几种不同产品,包括但不限于期权。我们将尽可能消除对标的价…...
方案精读:51页 财政数据信息资源目录数据标准存储及大数据资产化规划方案【附全文阅读】
该方案聚焦财政数据信息资源管理,适用于财政部门工作人员、数据管理与分析人员以及关注财政大数据应用的相关人士。 方案旨在构建财政数据资源目录,推动大数据在财政领域的应用与落地。整体规划上,以 “金财工程” 应用支撑平台为基础,建立省、市、县三级目录体系,遵循相关…...
开源实时语音交互大模型Ultravox-cn
一款为实时语音交互设计的快速多模态LLM 概述 Ultravox是一种新型的多模态LLM,能够理解文本和人类语音,无需单独的自动语音识别(ASR)阶段。基于AudioLM、SeamlessM4T、Gazelle、SpeechGPT等研究,Ultravox能够将任何…...
基于web的民宿信息系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 随着信息时代的来临,民宿过去的民宿信息方式的缺点逐渐暴露,对过去的民宿信息的缺点进行分析,采取计算机方式构建民宿信息系统。本文通过阅读相关文献,研究国内外相关技术,提出了一种民宿信息管理、民宿信息管理…...
04-微服务 面试题-mk
文章目录 1.Spring Cloud 常见的组件有哪些?2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现)3.Nacos配置中心热加载实现原理及关键技术4.OpenFeign在微服务中的远程服务调用工作流程5.你们项目负载均衡如何实现的 ?6.什么是服务雪崩,怎么解决这个问题?…...
【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析
文件系统的魔法:让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块(Super Bloc…...
C++STL——容器-list(含模拟实现,即底层原理)(含迭代器失效问题)(所有你不理解的问题,这里都有解答,最详细)
目录 1.迭代器的分类 2.list的使用 2.1 list的构造 2.2 list iterator 2.3 list capacity 2.4 list element access 编辑 2.5 list modifiers 编辑2.5.1 list插入和删除 2.5.2 insert /erase 2.5.3 resize/swap/clear 编辑 2.6 list的一些其他接口…...
计算机组成原理笔记(十五)——3.5指令系统的发展
不同类型的计算机有各具特色的指令系统,由于计算机的性能、机器结构和使用环境不同,指令系统的差异也是很大的。 3.5.1 x86架构的扩展指令集 x86架构的扩展指令集是为了增强处理器在多媒体、三维图形、并行计算等领域的性能而设计的。这些扩展指令集通…...
基于时间序列分解与XGBoost的交通通行时间预测方法解析
一、问题背景与数据概览 在城市交通管理系统中,准确预测道路通行时间对于智能交通调度和路径规划具有重要意义。本文基于真实道路传感器数据,构建了一个结合时间序列分解与机器学习模型的预测框架。数据源包含三个核心部分: 道路通行数据(new_gy_contest_traveltime_train…...
基于XGBoost的异烟酸生产收率预测:冠军解决方案解析
1. 引言 在化工生产领域,准确预测产品收率对优化工艺流程、降低生产成本具有重要意义。本文以异烟酸生产为研究对象,通过机器学习方法构建预测模型,在包含10个生产步骤、42个工艺参数的数据集上实现高精度收率预测。该方案在工业竞赛中斩获冠军,本文将深度解析其技术实现细…...
计算机视觉算法实现——电梯禁止电瓶车进入检测:原理、实现与行业应用(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 电梯安全检测领域概述 近年来,随着电动自行车(以下简称"电瓶车"&…...
智能制造方案精读:117页MES制造执行系统解决方案【附全文阅读】
本方案围绕制造执行系统(MES)展开,阐述了智能制造相关概念及发展趋势,指出 MES 是连接 ERP 与生产现场的关键系统。介绍其在加工、装配及其他场景的应用,通过实例展示各场景下的功能、特点和实施效果,如实现生产信息可视化、产品追溯、设备监控等。还提及实施 MES 面临的…...
【操作系统】【内存分配过程】
内存分配的过程 过程 程序向内存请求空间(如new,malloc)程序检查虚拟内存是否有剩余分配虚拟内存调用程序时,CPU 会查页表,若发现该虚拟页未映射,则触发缺页中断分配物理页,并建立页表映射继续…...
MOM成功实施分享(八)汽车活塞生产制造MOM建设方案(第二部分)
在制造业数字化转型的浪潮中,方案对活塞积极探索,通过实施一系列数字化举措,在生产管理、供应链协同、质量控制等多个方面取得显著成效,为行业提供了优秀范例。 1.转型背景与目标:活塞在数字化转型前面临诸多挑战&…...
Swift的学习笔记(一)
Swift的学习笔记(一) 文章目录 Swift的学习笔记(一)元组基本语法1. **创建元组**2. **访问元组的值**3. **命名的元组**4. **解构元组**5. **忽略某些值** 可选值类型定义 OptionalOptional 的基本使用1. **给 Optional 赋值和取值…...
