背景与用途
我的知识库笔记越攒越多,靠翻文件夹找内容越来越慢,于是自己写了一个本地全文检索小脚本:输入关键词,它在本地笔记目录里找出所有包含该关键词的文件和行号。脚本只读取我本人电脑上的本地文件,不联网,仅供我自己使用。这篇笔记记录它第一轮功能自测的过程。
测试目标
- 验证关键词检索的准确性和大小写处理是否符合预期;
- 验证无结果、多关键词等边界场景的表现;
- 记录发现的问题,修复后回归验证。
测试记录
| 编号 | 测试项 | 操作步骤 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|---|
| T01 | 精确关键词匹配 | 检索「提示词」 | 列出全部包含该词的笔记与行号 | 与预期一致 | 通过 |
| T02 | 英文大小写 | 检索「Agent」 | 大小写不敏感,agent、AGENT 均能命中 | 仅全小写写法能命中 | 不通过(已修复) |
| T03 | 无结果提示 | 检索一个不存在的词 | 给出「未找到相关内容」的友好提示 | 程序直接退出,无任何提示 | 不通过(已修复) |
| T04 | 多关键词检索 | 输入「记账 汇总」两个词 | 返回同时包含两个词的笔记 | 与预期一致 | 通过 |
| T05 | 结果排序 | 观察结果列表顺序 | 按笔记修改时间由近到远排序 | 与预期一致 | 通过 |
核心代码片段
修复 T02 之后的检索核心逻辑如下,改动点是把关键词和文本统一转成小写再比较:
def search(keyword: str, folder: str = "./notes"):
"""在本地笔记目录中检索关键词,返回命中文件与行号。"""
hits = []
needle = keyword.lower()
for path in Path(folder).rglob("*.md"):
for lineno, line in enumerate(path.open(encoding="utf-8"), 1):
if needle in line.lower():
hits.append((path, lineno, line.strip()))
if not hits:
print("未找到相关内容,请换个关键词试试。")
return hits
问题与修复
- 问题一(T02,已修复):原实现直接区分大小写比较,英文关键词经常漏命中。修复为统一转小写后比较,用「Agent / agent / AGENT」三组词回归测试,命中数量一致;
- 问题二(T03,已修复):无命中时静默退出,容易误以为程序出错。修复为输出明确提示,回归测试通过。
下一步自测计划
- 笔记数量增多后测试检索速度,必要时增加索引缓存;
- 测试中文长句检索的命中效果;
- 验证检索结果导出为清单文件的功能。