把 E2E 测试写稳:Playwright 的选择器、等待与 CI 诊断清单

把 E2E 测试写稳

端到端测试最容易被团队嫌弃,因为它一旦不稳定,就会在 CI 里反复制造红灯:本地能过、线上偶发失败、截图看不出原因。问题通常不在 Playwright 本身,而在用例把页面动画、接口耗时、测试数据和外部状态都当成了“刚好会按时出现”。要让 E2E 真正保护发布,需要先把它写成可预测的工程资产。

Read More

把密钥管住:从 .env 到 CI Secrets 的配置安全清单

把密钥管住

很多项目的第一份配置都很简单:复制一份 .env,填上数据库地址、API Key 和调试开关,应用就能跑起来。但项目一旦进入多人协作、CI 构建和线上发布,配置就不再只是“读几个环境变量”。真正要管住的是边界:哪些值可以进仓库,哪些只能留在本机,哪些必须由 CI 或运行时注入,以及密钥泄露后如何快速轮换。

Read More

把日志写到能排障:结构化日志、Trace ID 与脱敏清单

把日志写到能排障

很多系统不是没有日志,而是日志只能证明“代码曾经跑过”。真正能排障的日志,应该在事故发生时回答三个问题:这是谁的请求、走到了哪一步、为什么变慢或失败。把日志从散乱句子升级为结构化事件,再配合 Trace ID、字段规范和脱敏策略,排查效率会比临时翻字符串高很多。

Read More

把 HTTP 接口做稳:超时、重试与幂等的工程清单

把 HTTP 接口做稳

很多接口事故并不是因为业务逻辑复杂,而是因为一次慢查询、一次网络抖动、一次客户端重复点击,把原本正常的链路拖进了未知状态。HTTP 调用要做稳,不能只靠“失败再试一次”。更可靠的做法,是把超时、重试和幂等放在一起设计:超时负责止损,重试负责修复短暂失败,幂等负责保证重复请求不会产生重复副作用。

Read More

用 SQLite 做轻量本地数据层:WAL、事务、索引与迁移清单

用 SQLite 做轻量本地数据层

很多内部工具、桌面应用、边缘服务和个人项目,并不需要一上来就接 PostgreSQL 或 MySQL。SQLite 的优势不是“玩具级简单”,而是把数据库能力放进一个普通文件里:部署少、依赖少、备份直观。只要把连接初始化、事务、索引和迁移这几件事做扎实,它完全可以承担一个可靠的本地数据层。

Read More