跳转至

搜索功能测试案例

搜索是用户找内容的核心入口,测试时不能只看"输入关键词能出结果"。它涉及空值处理、模糊匹配、分页逻辑、排序规则、特殊字符、性能和安全等内容。

需求背景

系统提供全局搜索功能,用户在搜索框输入关键词后,返回匹配的商品列表。支持模糊搜索、筛选条件组合、分页加载和搜索排序。搜索框支持回车触发和点击搜索按钮触发。

测试点拆解

维度 测试点
正常流程 输入精确关键词,返回匹配结果
空搜索 搜索框为空时点击搜索、输入纯空格后搜索
模糊搜索 输入部分关键词、拼音、首字母、同音字
特殊字符 输入 <script>' OR 1=1 --、emoji、换行符
分页 搜索结果超过一页、翻页、跳页、最后一页
排序 按相关度排序、按时间排序、按销量排序
筛选组合 关键词 + 分类、关键词 + 价格区间、多条件叠加
空结果 搜索不存在的内容,提示是否友好
性能 大量数据下搜索响应时间、搜索防抖
安全 SQL 注入、XSS 注入、搜索词日志脱敏
历史记录 搜索历史是否记录、清除历史、历史上限
兼容性 移动端搜索框、输入法兼容、长文本截断

用例示例

编号 测试点 步骤 预期结果
SEARCH-001 正常搜索 输入"手机",点击搜索 返回包含"手机"的商品列表,关键词高亮
SEARCH-002 空搜索 搜索框为空,点击搜索 不发起搜索请求或提示请输入关键词
SEARCH-003 纯空格搜索 输入" "(多个空格),点击搜索 同空搜索处理,不返回全量数据
SEARCH-004 模糊搜索 输入"手",搜索 返回"手机""手机壳""手机支架"等匹配结果
SEARCH-005 无结果 输入"xyzabc123",搜索 显示"未找到相关结果",不显示空白页
SEARCH-006 SQL 注入 输入 ' OR 1=1 --,搜索 不报错、不返回全量数据,正常提示无结果
SEARCH-007 XSS 注入 输入 <script>alert(1)</script>,搜索 不弹窗、不执行脚本,关键词被转义显示
SEARCH-008 分页 搜索结果 50 条,每页 10 条,点击第 3 页 显示第 21-30 条,页码高亮正确
SEARCH-009 最后一页 搜索结果 23 条,每页 10 条,跳到最后一页 显示第 21-23 条,"下一页"按钮禁用
SEARCH-010 排序切换 搜索"手机",切换为"价格从低到高" 结果按价格升序排列,关键词仍有效

接口校验

搜索接口至少检查:

  • HTTP 状态码和业务码。
  • 返回结果数量是否与分页参数一致。
  • keyword 参数是否做了转义处理。
  • 空关键词时接口是否拒绝请求或返回空列表。
  • page 参数传负数、0、超大值时的处理。
  • 排序参数传非法值时的默认行为。

测试数据准备

数据 用途
包含关键词的商品 验证正常搜索和结果展示
不包含任何商品的冷门词 验证空结果页面和提示
大量相似商品(100+) 验证分页和性能
名称含特殊字符的商品 验证搜索结果的转义展示
被下架/隐藏的商品 验证搜索是否过滤不可见商品

练习时先确认数据库里有哪些商品数据,再针对性地设计搜索词。没有数据就先造数据。

执行步骤示例

  1. 输入"手机"搜索,确认主流程返回正确结果。
  2. 依次测试空搜索、纯空格搜索、超长关键词(200+ 字符)。
  3. 输入 SQL 注入和 XSS 注入字符串,观察页面和接口响应。
  4. 确认搜索结果分页:翻页、跳页、最后一页数据量。
  5. 切换排序方式,验证排序是否生效且结果不丢失。
  6. 搜索不存在的词,确认空结果页面有友好提示。
  7. 用 Fiddler 抓包查看搜索接口参数和返回数据。

数据校验示例

-- 搜索"手机"时,验证返回的商品是否都包含关键词
SELECT id, name, status
FROM products
WHERE name LIKE '%手机%' AND status = 'on_sale'
ORDER BY relevance_score DESC;

-- 检查被下架商品是否出现在搜索结果中
SELECT id, name, status
FROM products
WHERE name LIKE '%手机%' AND status != 'on_sale';
-- 期望:搜索接口不应返回这些记录

缺陷示例

字段 内容
标题 搜索框输入空格后点击搜索,返回全量商品数据
前置条件 搜索框支持关键词搜索
复现步骤 在搜索框输入 3 个空格,点击搜索按钮
实际结果 返回所有商品列表,未做空值过滤
期望结果 提示"请输入搜索关键词"或不发起搜索请求
影响 服务器压力增大,用户体验差,可能暴露全量数据

容易漏测

  • 只测精确关键词,不测模糊搜索和部分匹配。
  • 不测空搜索和纯空格搜索。
  • 忽略 SQL 注入和 XSS 注入。
  • 不验证分页边界:第一页、最后一页、超出范围的页码。
  • 不验证搜索结果中是否混入下架/隐藏数据。
  • 不测搜索性能:大数据量下响应时间。
  • 忘记测搜索历史记录的清除和上限。

复盘问题

  • 搜索结果为空时,应该显示"未找到结果"还是推荐相关内容?为什么?
  • 搜索接口的 keyword 参数,后端应该如何做防注入处理?
  • 搜索结果的排序规则是什么?相关度和销量如何权衡?