资讯动态

纯curl + bash跑66个断言:ClawFeed的E2E测试体系是如何搭建的

发布时间:2026/10/4 17:05:18 来源:尧图企业网站定制
纯curl bash跑66个断言ClawFeed的E2E测试体系是如何搭建的【免费下载链接】clawfeedClawFeed — AI-powered news digest with structured summaries from Twitter/RSS feeds and web dashboard项目地址: https://gitcode.com/gh_mirrors/cl/clawfeedClawFeed 是一个 AI 驱动的新闻摘要服务它从 Twitter/RSS 信息源中自动抓取内容生成 4H 简报、日报、周报等结构化摘要并配有 Web 仪表盘。而支撑它稳定迭代的核心秘密是一套纯 curl bash 实现的 E2E 测试体系——不依赖任何测试框架用 66 个断言覆盖多用户数据隔离、权限边界、软删除级联等所有关键场景。为什么需要 E2E 测试ClawFeed 到底在保护什么ClawFeed 的核心功能可以概括为四块Digest 摘要按 4 小时/日/周生成结构化新闻简报Sources 信息源用户自建 RSS / HackerNews / Reddit 信息源可公开可私有Packs 信息源包把一组信息源打包分享别人一键安装Marks 标记对感兴趣的 Feed 条目做私有笔记这些功能天然涉及多用户场景Bob 能不能删掉 Alice 的信息源Carol 安装 Pack 时会不会重复订阅Alice 软删除信息源后订阅者的数据怎么呈现这类跨用户、跨请求的行为单元测试很难覆盖正是 E2E 测试的用武之地。测试架构总览3 个 bash 脚本 1 个 SQLite 数据库整个测试体系只靠 test/ 目录下的 3 个脚本形成设置 → 测试 → 清理的可重复循环test/ ├── setup.sh # 创建 4 个测试用户 session ├── e2e.sh # 66 个 E2E 断言16 个测试区段 ├── teardown.sh # 清理所有测试数据 └── seed.sql # CI 用的种子数据四条设计原则值得借鉴详见 docs/TESTING.md原则做法不依赖外部服务直接用 sqlite3 注入测试用户和 session绕过 Google OAuth不污染生产数据测试用户 id 占用 100–199 区间真实用户是 1–99可重复执行setup → test → teardown 循环任意时刻可跑纯 curl bash零测试框架依赖python3 仅用于解析 JSON三个环境变量控制测试目标方便指向本地或任意环境AI_DIGEST_API、AI_DIGEST_FEED、AI_DIGEST_DB默认指向生产本地测试时覆盖即可。一键准备环境setup.sh 如何伪造 4 个测试用户setup.sh 只做两件事向 SQLite 直接INSERT4 个用户 4 个 24 小时有效的 session然后逐个 curl 验证连通性用户IDSession Cookie角色Alice100sessiontest-sess-alice内容创建者建 Source PackBob101sessiontest-sess-bob部分重叠用户验证增量订阅Carol102sessiontest-sess-carol纯消费者空状态 → 安装 PackDave103sessiontest-sess-dave第二个消费者验证去重用户之间构成一张关系图Alice 创建 3 个信息源2 公开 1 私有并打包成 Pack → Carol、Dave 各自安装 → Bob 先手动订阅其中 1 个再装 Pack验证增量添加→ Alice 删除信息源验证级联影响。一条业务链路串起大部分测试场景。三个断言函数让测试代码像写文档一样易读e2e.sh 开篇定义了 3 个核心断言函数之后 66 个断言全部是一行一断言check响应内容应包含期望字符串check Bob auth name:Bob (Test) $respcheck_not响应内容不应包含禁止内容——数据隔离测试的灵魂比如确认 Alice 的私有信息源名不出现在游客的列表里check_codeHTTP 状态码必须精确等于期望值401/403/404 权限断言全靠它配套还有jq_val/jq_len两个小工具用 python3 从 JSON 响应里提取字段和数组长度。最终汇总输出Results: 66/66 passed任何失败都会打印 expected 与 got 的对比失败时脚本以非零码退出。66 个断言测试矩阵16 个区段逐一拆解完整的用例清单在 test/README.md 中有详细矩阵。按优先级挑几个最硬核的区段 权限与安全第 4、13 区段断言预期Bob 删除 Alice 的信息源403游客创建信息源 / 安装 Pack / 访问 Marks401POST /digests 无 API Key401 数据隔离第 10、11 区段Alice 和 Bob 同时标记同一篇摘要后断言 Alice 的响应包含alice private note且不包含bob private note——checkcheck_not正反双向验证。 Pack 安装与幂等第 6、7、14 区段Carol 首次安装 →added:2再次安装 →added:0幂等Dave 安装同一个 Pack → 独立用户仍added:2Bob 已手动订阅 1 个 → 增量添加。️ 软删除级联第 15、16 区段test/e2e.sh这是最能体现 E2E 价值的部分——删除信息源后直接查 SQLite断言is_deleted1而非物理删除已删信息源从GET /sources列表消失订阅者列表中该信息源标记为sourceDeleted:true前端显示已停用安装包含已删信息源的 Pack →added:0不会复活僵尸源混合 Pack1 已删 1 新建→added:1只装活的三步运行完整的干净测试循环# 1. 准备 4 个测试用户 bash test/setup.sh # 2. 跑全部 E2E 断言 bash test/e2e.sh # 3. 清理所有测试数据按 id 100-199 区间删除 bash test/teardown.sh本地开发时只需覆盖环境变量指向本地服务AI_DIGEST_APIhttp://localhost:8767/api \ AI_DIGEST_FEEDhttp://localhost:8767/feed \ bash test/e2e.shteardown.sh 按依赖顺序删除user_subscriptions→marks→source_packs→sources→sessions→users只删测试区间的数据真实用户毫发无损。新手搭建 E2E 测试体系的 5 条经验零框架起步curl bash grep 就能写 E2E 断言grep -qF做子串匹配比引入任何测试框架都快ID 区间隔离测试数据测试数据占 100–199、真实数据占 1–99一行WHERE id BETWEEN 100 AND 199就能安全清理正反双向断言隔离性测试既要check我的数据在也要check_not别人的数据不在权限断言看状态码401未登录、403无权限、404不存在各归各位别混用把已知问题写进文档docs/TESTING.md 专门列了空名称无校验僵尸 Pack 快照等 TODO测试体系同时是技术债清单想深入了解完整用例矩阵和测试迭代历史可以阅读 test/README.md 的 Iteration Log——这套体系从 v1 的 44 个用例3 个测试用户迭代到如今的 16 区段 66 断言4 个测试用户每一步扩展都对应一次真实的功能上线。【免费下载链接】clawfeedClawFeed — AI-powered news digest with structured summaries from Twitter/RSS feeds and web dashboard项目地址: https://gitcode.com/gh_mirrors/cl/clawfeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑