前端自动化测试基础概念

目录

前言:

1. 概述

2. 单元测试

3. 集成测试

4. 端到端测试

5. 快照测试

6. 测试金字塔

7. 测试覆盖率

8. TDD测试驱动开发

9. BDD行为驱动开发

10. 总结


前言:

前端自动化测试是指使用工具或框架来自动执行对前端应用程序的功能和用户界面的测试。它是一种提高开发团队效率、减少人工测试任务和确保质量的关键实践。

1. 概述

对于稍微有一些开发经验的开发同学在开发过程中总会有一些经验总结。

比如说当代码复杂度达到一定的级别,并且维护者的数量不止一个,就应该察觉到在开发新功能或者修复bug的时候,会变得小心翼翼。即使代码看起来没什么问题,但心里还是难免担忧,这个Feature会不会带来其它bug,这个fix会不会引入其它Feature

当想对项目中的代码进行重构的时候,会花费大量的时间进行回归测试。

以上这些问题都是由于大多数开发者所使用最基本的手动测试的方式所带来的问题,解决它的根本原因就在于引入自动化测试方案。

在日常的开发中,代码的完工其实并不等于开发的完工,如果没有测试,不能保证代码能够正常运行。应用程序测试是指检查程序运行过程是否正确。一般分为手动测试和自动化测试。手动测试不适合大型项目,而且容易忘记测试某项功能,大部分时间都在做回归测试。

自动化测试是利用计算机程序检查软件是否运行正常的测试方法,就是用其它额外的代码检查被测软件的代码。当测试代码编写完成之后可以无限重复使用。编写自动化测试脚本的方式有很多,可以通过浏览器自动执行的程序,也可以直接调用源代码里的函数,还可以直接对比程序渲染之后的截图。

自动化测试可以今早的发现程序的bug和不足,可以增强程序员对程序健壮性,稳定性的信心,还可以改进设计,快读反馈,减少调试时间,甚至是促进重构。

当然自动化测试不可能保证一个程序是完全正确的,而且事实上,在实际开发过程中,编写自动化测试代码通常是开发人员不太喜欢的一个环节,大多数情况下,前端开发人员在开发完一项功能后,只是打开浏览器手动点击查看效果是否正确,之后就很少对该代码进行管理。

前端开发常见的测试主要分为4种,单元测试是验证独立的单元是否正常工作。集成测试验证多个单元协同工作。端到端测试可以从用户角度以机器的方式在真实浏览器环境验证应用交互。快照测试是验证程序的UI变化。

2. 单元测试

单元测试是应对程序最小的部分运行测试的过程。通常测试的单元是函数,但在前端应用中,组件也是被测单元。单元测试可以单独调用源代码中的函数并断言其行为是否正确。

// 源码
export default const sum(a, b) => {
    reurn a + b;
}

// 测试
import sum from './sum';

const testSum = () => {
    if (sum(1, 1) !== 2) {
        throw new Error('sum(1, 1) did not return 2');
    }
}

testSum();

与端到端测试不同,单元测试的运行速度很快,只需要几秒钟的运行时间,因此可以在每次代码变更后都运行单元测试,从而快速得到变更是否破坏现有功能的反馈。单元测试应该避免依赖性问题,比如不存取数据库,不访问网络等等,而是使用工具虚拟出运行环境,这种虚拟使得测试成本最小,不用花大力气搭建环境。不过由于单元测试是独立的,所以无法保证多个单元运行到一起是否正确。

常见的javascript单元测试框架有jestmochajasminekarmaavatape

mochajest是目前最火的两个单元测试框架,基本上目前单元测试就在这两个库之间选,总的来说jest功能齐全,配置方便,mocha自由灵活自由配置,两者功能范围可以粗略表示为。

jest === mocha + chai + sinon + mockserver + istanbul

3. 集成测试

开发者定义集成测试的方式并不相同,由于是对于前端,有些人认为在浏览器环境上运行的测试是集成测试,有些人认为具有模块依赖性的单元测试的任何测试都是集成测试,也有些人认为任何完全渲染的组件测试都是集成测试。

集成测试由于是从用户使用角度出发,更容易获得软件使用过程中的正确性。集成测试就相对于写了软件的说明文档。由于不关注底层代码实现细节,所以更有利于快速重构。相比单元测试,集成测试的开发速度要更快一些。

不过集成测试失败的时候无法快速定位问题,代码覆盖率较低,速度也要比单元测试慢很多。

test('integration: new todo', async () => {
    const wrapper = mount(TodoApp);
    const todoInput = wrapper.find('[data-testid="todo-input"]');
    const text = 'Hello world';
    await todoInput.setValue(text);
    await todoInput.trigger('keyup.enter');
    cons
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值