测试
> Last Format Time:6/12/2026 21:13:41
测试分类
- 单元测试:最小的代码单元,通常是一个函数、一个方法或一个类
- 集成测试:多个模块、组件或服务之间的交互和接口
- e2e测试:整个应用程序,从前端用户界面到后端服务,再到数据库和网络等所有部分
- UI测试:用户界面的视觉元素和交互
使用测试框架,是很重要的一环,尤其是核心的utils,避免了改动核心功能时的连锁反应,能够极大的减轻测试的负担
主流测试框架:Jest、Mocha、Vitest
测试核心概念
测试金字塔
测试金字塔由 Mike Cohn 提出,是一个指导"应该写多少测试、每类测试占多少比例"的分层模型:
- 底层 - 单元测试:数量最多、速度最快、成本最低。应当占据测试的绝大部分。
- 中层 - 集成测试:数量适中,验证模块间协作。
- 顶层 - 端到端测试:数量最少、速度最慢、成本最高。验证关键业务链路。
核心思想:越靠近底层的测试越多,越靠近顶层的越少,整体呈金字塔形。反过来的"冰淇淋锥"模型(E2E 居多)是反模式,脆弱且维护成本高。
测试覆盖率
覆盖率衡量"测试用例执行了多少代码",是测试充分性的量化指标。常见维度:
- 语句覆盖 (Statement):每行可执行代码是否被执行
- 分支覆盖 (Branch):每个
if/else、switch等分支是否都被走到 - 函数覆盖 (Function):每个函数是否被调用过
- 行覆盖 (Line):每行是否被执行
常见误区:覆盖率不是越高越好,100% 覆盖率 ≠ 0 bug。盲目追求 100% 会导致为覆盖率而写测试,反而失去对核心业务逻辑的关注。行业经验:70%~80% 是性价比区间,重点覆盖核心业务和复杂分支。
工具:Jest 自带 --coverage 标志,背后基于 Istanbul/nyc。
Mock / Stub / Spy
测试替身(Test Double)的三种常见角色,名字容易混:
- Mock:模拟对象,验证行为。关心"被没被调用、调用几次、传了什么参数"。
- Stub:模拟对象,返回预设值。只关心"被调用时给我什么数据",不验证是否被调用。
- Spy:包装真实对象,记录调用信息。不改变行为,只观察真实调用。
Jest 提供:
jest.fn():创建 Mock 函数jest.spyOn(obj, 'method'):Spy 一个真实方法,可保留原行为或 mock 掉jest.mock('./module'):自动 mock 一个模块
判断用哪种:
- 要"打桩返回假数据" → Stub
- 要"断言函数被调用了几次" → Mock
- 要"保留原行为但记录调用" → Spy
TDD vs BDD
TDD(Test-Driven Development)测试驱动开发,强调"先写测试再写实现":
- 流程:红(写一个失败的测试)→ 绿(写最小实现让测试通过)→ 重构
- 关注点:代码功能的正确性
- 适用:函数、模块级别的单元测试
BDD(Behavior-Driven Development)行为驱动开发,强调"用自然语言描述业务行为":
- 流程:用 Given-When-Then 描述场景 → 实现 → 自动化
- 关注点:业务行为,促进产品/开发/测试三方对齐
- 工具:Cucumber、Jest-cucumber
简单区分:TDD 是"开发者写测试驱动开发",BDD 是"业务人员写场景驱动开发"。
测试框架
Jest
jest一般是开发环境依赖,不需要添加到生产环境中去,一般是使用commonJS,但是经过配置也可以使用ESM语法。
Vitest
Vitest内置一个无头浏览器。
>无头浏览器是一种没有图形用户界面的Web浏览器。 它具备完整浏览器引擎(如Chromium、WebKit)的所有能力,可以解析HTML、CSS、执行JavaScript、渲染页面、处理Ajax请求等,但不会在屏幕上显示任何页面内容。所有操作都由程序或命令行自动控制。
A/B 测试
A/B测试,简单来说,就是一种通过对比两个版本来做决策的科学实验方法。
它的核心思路是:为同一个目标,设计出A和B两个不同的方案。然后,让流量相似的两组用户随机看到其中一个版本。最后,通过分析用户的实际行为数据(比如点击率、转化率),来判断哪个版本的效果更好。
一个经典的例子是:一家电商网站想优化"购买按钮"的颜色。他们让50%的用户看到红色的A版本(原始版),50%的用户看到绿色的B版本(新版)。测试结果显示,绿色版本的购买点击率高出20%,那么新版本就胜出,可以被正式采用。
A/B测试有四个核心特征:
- 同时测试:A和B版本必须在同一时间段内运行,避免季节性或其他时间因素干扰。
- 随机分组:用户被随机分配到不同版本,确保各组用户特征(如年龄、地域)在统计上相似,避免偏差。
- 单一变量:最严谨的A/B测试一次只改变一个变量,这样就能清楚地知道,效果变化是由哪个改动引起的。
- 数据驱动:最终决策不靠个人感觉或职位高低,完全依赖实验数据说话的统计结果。
在互联网行业,A/B测试的应用非常广泛:
- 产品优化:测试App的界面布局、按钮文案、注册流程等,很多新功能会先通过A/B测试小范围验证。
- 增长黑客:优化落地页、邮件营销标题、推送通知的文案,提高用户转化和留存。
- 算法推荐:同时运行推荐商品或视频的不同算法模型,比较哪个点击率更高。
- 广告投放:测试不同广告词、图片或受众定向,用效果最好的组合去大规模投放。
总的来说,A/B测试就像是互联网世界的"科学对照实验",帮人们从"我觉得..."的经验主义,转向"数据证明..."的理性决策。