搜索功能测试案例¶
搜索是用户找内容的核心入口,测试时不能只看"输入关键词能出结果"。它涉及空值处理、模糊匹配、分页逻辑、排序规则、特殊字符、性能和安全等内容。
需求背景¶
系统提供全局搜索功能,用户在搜索框输入关键词后,返回匹配的商品列表。支持模糊搜索、筛选条件组合、分页加载和搜索排序。搜索框支持回车触发和点击搜索按钮触发。
测试点拆解¶
| 维度 | 测试点 |
|---|---|
| 正常流程 | 输入精确关键词,返回匹配结果 |
| 空搜索 | 搜索框为空时点击搜索、输入纯空格后搜索 |
| 模糊搜索 | 输入部分关键词、拼音、首字母、同音字 |
| 特殊字符 | 输入 <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+) | 验证分页和性能 |
| 名称含特殊字符的商品 | 验证搜索结果的转义展示 |
| 被下架/隐藏的商品 | 验证搜索是否过滤不可见商品 |
练习时先确认数据库里有哪些商品数据,再针对性地设计搜索词。没有数据就先造数据。
执行步骤示例¶
- 输入"手机"搜索,确认主流程返回正确结果。
- 依次测试空搜索、纯空格搜索、超长关键词(200+ 字符)。
- 输入 SQL 注入和 XSS 注入字符串,观察页面和接口响应。
- 确认搜索结果分页:翻页、跳页、最后一页数据量。
- 切换排序方式,验证排序是否生效且结果不丢失。
- 搜索不存在的词,确认空结果页面有友好提示。
- 用 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参数,后端应该如何做防注入处理? - 搜索结果的排序规则是什么?相关度和销量如何权衡?