功能测试流程与自动化脚本
8.1 测试金字塔理论
Tip
很多新手怕写测试,觉得那是高级程序员才做的事。其实测试就是**“自动化的点检代码”**。就像工厂造好零件后,用机器自动扫描一遍有没有裂纹,而不是靠人眼去看。
1. 为什么要学这个?
想象你在造一辆车
- 不写测试:你把几万个零件拼在一起,直接让试飞员上去开。万一刹车失灵,车毁人亡(线上事故),公司倒闭。
- 写测试:
- 先测一颗螺丝结不结实(单元测试)。
- 再测刹车片能不能装进轮毂(集成测试)。
- 最后让假人坐在车里在封闭跑道跑两圈(E2E 测试)。
- 确认没问题了,才卖给客户。
Vibe 定义:测试不是为了证明你“很牛”,而是为了让你敢改代码。有了测试,你把核心逻辑重写一遍,只要跑一遍测试全是绿的,你就敢放心上线。
2. 核心概念:测试金字塔 (The Testing Pyramid)
测试分三种,就像盖房子一样,底座要宽,塔尖要窄。
🧱 砖块层:单元测试 (Unit Test)
- 这是什么:测试代码里的最小单位(通常是 1 个函数)。
- 比喻:检查一块砖头硬不硬。
- 特点:
- 极快:几毫秒就能测完。
- 极便宜:不需要连数据库,不需要启动浏览器。
- 例子:
- 函数:
function add(a, b) { return a + b } - 测试:
expect(add(1, 1)).toBe(2)(期待 1+1 等于 2)。如果不等于,报错。
- 函数:
🏗️ 组装层:集成测试 (Integration Test)
- 这是什么:测试两个或多个模块连在一起能不能工作。
- 比喻:检查门能不能装进门框里,会不会卡住。
- 特点:
- 速度适中:可能需要连接一个测试用的数据库。
- 例子:
- 测试:调用
注册API,然后去数据库查一下,看有没有多出一条用户记录。
- 测试:调用
🏎️ 验收层:端到端测试 (E2E Test)
- 这是什么:E2E (End-to-End) 就是从头到尾。模拟真实用户的操作。
- 比喻:找个买房团,从进门开始,开灯、开水龙头、冲马桶,真的住进去试试。
- 特点:
- 最慢:因为要真的启动一个浏览器(Chrome)。
- 最真实:如果这个测试过了,说明用户真的能用。
- 例子:
- 打开
vibecoding.com-> 点击“登录” -> 输入密码 -> 点击“确定” -> 看到“欢迎回来”。
- 打开
3. 为什么新手容易放弃? (The Trap)
很多大公司(如 Google)早年犯过一个错误:倒金字塔。 也就是写了太多的 E2E 测试(几万个),忽略了单元测试。
后果:
- 慢到爆炸:跑一次测试要 10 个小时。开发人员改一行代码,要等第二天早上才知道对不对。
- 不仅慢,还脆:前端改了个 CSS 类名,把“登录”按钮从红色改成蓝色,结果几千个依赖“寻找红色按钮”的 E2E 测试全挂了。
Vibe 策略: 我们是独立开发者,时间最值钱。
- 多写单元测试:逻辑复杂的计算(算钱、算日期),用 AI 生成单元测试,保住底座。
- 只写关键 E2E:只测那条**“能让你收到钱”**的路径(注册 -> 付费 -> 看到内容)。只要这条路通的,样式丑一点也没关系。
4. 真实案例
Story
CrowdStrike 蓝屏事件 (2024)
2024 年 7 月,安全公司 CrowdStrike 推送了一个几 KB 的小更新,导致全球 850 万台 Windows 电脑蓝屏。机场瘫痪、医院停摆。
原因:开发人员改代码时,未能验证输入数据为空的情况(空指针异常)。
本质:这是一个典型的单元测试就能发现的错误。如果他们有一个简单的测试用例 test('输入为空时,不应崩溃'),这个价值数十亿美元的灾难就能避免。
Vibe 心法:不要觉得改一行代码没事。墨菲定律告诉我们:凡是可能出错的事,必定会出错。测试就是那个永远不知疲倦、帮你检查每一块砖头的“安检员”。
5. 本章小结
- Unit Test(单元测试):测砖头,要多写,为了稳。
- E2E Test(端到端测试):测流程,测核心,为了钱。
- 不要头重脚轻:不要试图用 E2E 覆盖所有细节,否则你会因为测试跑太慢而放弃测试。