自动化测试(二)02——单元测试类工具-Karma、Jasmine、Mocha、Jest、AVA & E2E测试类工具-cypress、nightmare、nightwatch、testcafe、webdriverio
单元测试类工具
npm trends: 点击链接
1、Karma
Karma是一个Runner(即运行环境),具体详细的介绍见 后面的章节Karma
A test runner is the library or tool that picks up an assembly (or a source code directory) that contains unit tests, and a bunch of settings, and then executes them and writes the test results to the console or log files.
there are many runners for different languages. See Nunit and MSTest for C#, or Junit for Java.
karma 设计目标主要有下面四点:
高效
扩展性
运行在真实设备
无缝的使用流程
karma 是一个典型的 C/S 程序,包含 client 和 server ,通讯方式基于 Http ,通常情况下,客户端和服务端基本都运行在开发者本地机器上。
一个服务端实例对应一个项目,假如想同时运行多个项目,得同时开启多个服务端实例。
Karma 的优点是能通过插件和配置的方式集成大部分的主流的测试框架和前端库,能方便的一次在多浏览器环境执行测试用例,并集成了测试覆盖率生成功能,生成页面形式覆盖率报告并能导出不同形式的覆盖率报告数据。
它的缺点是,对测试页面环境的搭建和资源文件的加载不是常见的形式,最开始搭建环境时会有很多跟预期不一致的情况,配置不直观。
2、Jasmine
Jasmine 带有 assertions(断言),spies (用来模拟函数的执行环境)和 mocks (mock 工具),Jasmine 初始化设置简单,同时,如果你需要一些单元功能的时候你仍然可以加一些库进来。
3、Mocha
Mocha 是一个灵活的库,提供给开发者的只有一个基础测试结构。然后,其它功能性的功能如 assertions, spies和mocks,这些功能需要引用添加其它库/插件来完成。
5、Jest
被 Facebook 和各种 React 应用推荐和使用,Jest 得到了很好的支持。Jest 也被发现是一个非常快速的测试库在平行测试报告中。
对于小型项目来说你可能在开始的时候不用过多担心,而性能的提高,对于希望全天持续部署的大型应用 app 来说是非常之好的。
而开发人员主要是用 Jest 去测试 React 应用,Jest 可以很容易地集成到其它应用程序中充许你使用更独特的特性在其它地方
快照测试是一个非常好用的工具,去确保你的应用 UI 不会有超出预期的错误,在产品发布替换的期间发生。虽然大部分功能,专门设计都是使用在 React 上。
Jest 有着很广阔的 API 。
6、AVA
AVA 它的优势是 JavaScript 的异步特性和并发运行测试.
利用了 JavaScript 的异步特性优势,优化了在部署的时间等待
保留了简单的 API 为你提供你所需要的功能。
如果搭配 mocking 来使用它会显得更加友好,但是必须安装一个单独的库。
E2E测试类工具
npm trends: 点击链接
最佳实践
测试有很多好处,但不代表一上来就要写出100%场景覆盖的测试用例。
最佳的实践:基于投入产出比来做测试
由于维护测试用例也是一大笔开销(毕竟没有多少测试会专门帮前端写业务测试用例,而前端使用的流程自动化工具更是没有测试参与了)。
对于像基础组件、基础模型之类的不常变更且复用较多的部分,可以考虑去写测试用例来保证质量。个
先写少量的测试用例覆盖到80%+的场景,保证覆盖主要使用流程。
一些极端场景出现的bug可以在迭代中形成测试用例沉淀,场景覆盖也将逐渐趋近100%。
但对于迭代较快的业务逻辑以及生存时间不长的活动页面之类的就别花时间写测试用例了,维护测试用例的时间大了去了,成本太高。
大型项目,可以使用Jest快速形成配置并且开始单元测试。
需要测试快照,则可以选择Jest或者Ava。
对于配置性要求高,对测试框架性能有要求的可以选择mocha。
对模拟还原浏览器业务操作有很大的需求的,可以选择nightmare
配合CI工具完成自动化测试、测试覆盖率、测试结果推送。
Ava。
对于配置性要求高,对测试框架性能有要求的可以选择mocha。
对模拟还原浏览器业务操作有很大的需求的,可以选择nightmare
配合CI工具完成自动化测试、测试覆盖率、测试结果推送。