Protractor - Javascript 测试的概念
由于 JavaScript 知识对于使用 Protractor 至关重要,因此在本章中,让我们详细了解 JavaScript 测试的概念。
JavaScript 测试和自动化
JavaScript 是最流行的动态类型和解释性脚本语言,但最具挑战性的任务是测试代码。这是因为,与 JAVA 和 C++ 等其他编译语言不同,JavaScript 中没有可以帮助测试人员找出错误的编译步骤。此外,基于浏览器的测试非常耗时;因此,需要支持 JavaScript 自动化测试的工具。
自动化测试的概念
编写测试始终是一个很好的做法,因为它可以使代码变得更好;手动测试的问题是它有点耗时并且容易出错。手动测试的过程对于程序员来说也很无聊,因为他们需要重复这个过程,编写测试规范,更改代码并刷新浏览器多次。此外,手动测试也会减慢开发过程。
由于上述原因,拥有一些可以自动化这些测试并帮助程序员摆脱这些重复且无聊的步骤的工具总是有用的。开发人员应该怎样做才能使测试过程自动化?
基本上,开发人员可以在 CLI(命令行解释器)或开发 IDE(集成开发环境)中实现工具集。然后,即使没有开发人员的输入,这些测试也将在单独的进程中连续运行。JavaScript 的自动化测试也并不新鲜,并且已经开发了许多工具,例如 Karma、Protractor、CasperJS 等。
JavaScript 测试类型
可以针对不同目的进行不同的测试。例如,编写一些测试是为了检查程序中函数的Behave,而编写其他一些测试是为了测试模块或功能的流程。因此,我们有以下两种类型的测试 -
单元测试
测试是在称为单元的程序的最小可测试部分上完成的。该单元基本上是单独测试的,该单元对其他部分没有任何依赖性。对于 JavaScript,具有特定Behave的单个方法或函数可以是一个代码单元,并且这些代码单元必须以隔离的方式进行测试。
单元测试的优点之一是可以按任意顺序进行单元测试,因为单元之间是相互独立的。单元测试的另一个真正重要的优点是它可以随时运行测试,如下所示 -
- 从开发过程的一开始。
- 完成任何模块/功能的开发后。
- 修改任何模块/功能后。
- 在现有应用程序中添加任何新功能后。
对于 JavaScript 应用程序的自动化单元测试,我们可以选择许多测试工具和框架,例如 Mocha、Jasmine 和 QUnit。
端到端测试
它可以被定义为一种测试方法,用于测试应用程序从开始到结束(从一端到另一端)的流程是否按照设计正常工作。
端到端测试也称为功能/流程测试。与单元测试不同,端到端测试测试各个组件如何作为应用程序一起工作。这是单元测试和端到端测试之间的主要区别。
例如,假设我们有一个注册模块,用户需要提供一些有效信息才能完成注册,那么该特定模块的端到端测试将按照以下步骤完成测试 -
- 首先,它将加载/编译表单或模块。
- 现在,它将获取表单元素的 DOM(文档对象模型)。
- 接下来,触发提交按钮的点击事件来检查它是否有效。
- 现在,出于验证目的,从输入字段收集值。
- 接下来,应验证输入字段。
- 出于测试目的,调用一个假 API 来存储数据。
每个步骤都会给出自己的结果,该结果将与预期结果集进行比较。
现在出现的问题是,虽然这种 E2E 或功能测试也可以手动执行,但为什么我们需要自动化?主要原因是自动化将使这个测试过程变得容易。为此,可以轻松与任何应用程序集成的一些可用工具包括 Selenium、PhantomJS 和 Protractor。
测试工具和框架
我们有各种用于 Angular 测试的测试工具和框架。以下是一些著名的工具和框架 -
业力
Karma 由 Vojta Jina 创建,是一个测试运行程序。最初这个项目被称为睾丸。它不是一个测试框架,这意味着它使我们能够在真实浏览器上轻松自动地运行 JavaScript 单元测试。Karma 是为 AngularJS 构建的,因为在 Karma 之前,还没有针对基于 Web 的 JavaScript 开发人员的自动化测试工具。另一方面,借助 Karma 提供的自动化功能,开发人员可以运行简单的单个命令并确定整个测试套件是否通过或失败。
使用 Karma 的优点
与手动过程相比,以下是使用 Karma 的一些优点 -
- 在多个浏览器和设备中自动进行测试。
- 监视文件中的错误并修复它们。
- 提供在线支持和文档。
- 简化与持续集成服务器的集成。
使用 Karma 的缺点
以下是使用 Karma 的一些缺点 -
使用 Karma 的主要缺点是它需要额外的工具来配置和维护。
如果您将 Karma 测试运行程序与 Jasmine 一起使用,那么在一个元素具有多个 id 的情况下,可用于查找有关设置 CSS 的信息的文档会较少。
茉莉花
Jasmine 是一个用于测试 JavaScript 代码的Behave驱动开发框架,由 Pivotal Labs 开发。在积极开发 Jasmine 框架之前,Pivotal Labs 也开发了一个名为 JsUnit 的类似单元测试框架,它有一个内置的测试运行器。浏览器测试可以通过 Jasmine 测试运行,方法是包含 SpecRunner.html 文件或将其用作命令行测试运行程序。它也可以在有或没有 Karma 的情况下使用。
使用茉莉花的优点
以下是使用 Jasmine 的一些优点 -
独立于浏览器、平台和语言的框架。
支持测试驱动开发 (TDD) 以及Behave驱动开发。
与 Karma 默认集成。
易于理解的语法。
提供测试间谍、伪造和传递功能,作为附加功能协助测试。
使用茉莉花的缺点
以下是使用 Jasmine 的缺点 -
用户必须在更改时返回测试,因为运行测试时 Jasmine 中没有可用的文件监视功能。
摩卡
Mocha 是为 Node.js 应用程序编写的一个测试框架,但它也支持浏览器测试。它很像 Jasmine,但它们之间的主要区别是 Mocha 需要一些插件和库,因为它不能作为测试框架独立运行。另一方面,茉莉花是独立的。不过,Mocha 使用起来比 Jasmine 更灵活。
使用摩卡的优点
以下是使用摩卡的一些优点 -
- Mocha 非常容易安装和配置。
- 用户友好且简单的文档。
- 包含带有多个节点项目的插件。
使用摩卡的缺点
以下是使用 Mocha 的一些缺点 -
- 它需要单独的模块来进行断言、间谍等。
- 它还需要额外的配置才能与 Karma 一起使用。
质量单位
QUint 最初由 John Resig 于 2008 年作为 jQuery 的一部分开发,是一个功能强大且易于使用的 JavaScript 单元测试套件。它可用于测试任何通用 JavaScript 代码。虽然它专注于在浏览器中测试JavaScript,但开发人员使用起来非常方便。
使用 QUnit 的优点
以下是使用 QUnit 的一些优点 -
- 易于安装和配置。
- 用户友好且简单的文档。
使用 QUnit 的缺点
以下是使用 QUnit 的缺点 -
- 它主要是为 jQuery 开发的,因此不太适合与其他框架一起使用。
Selenium
Selenium 最初由 Jason Huggins 于 2004 年开发,作为 ThoughtWorks 的内部工具,是一个开源测试自动化工具。Selenium 将自己定义为“Selenium 自动化浏览器。就是这样!”。浏览器的自动化意味着开发人员可以非常轻松地与浏览器交互。
使用 Selenium 的优点
以下是使用 Selenium 的一些优点 -
- 包含大量功能集。
- 支持分布式测试。
- 通过 Sauce Labs 等服务获得 SaaS 支持。
- 易于使用,提供简单的文档和丰富的资源。
使用 Selenium 的缺点
以下是使用 Selenium 的一些缺点 -
- 使用 Selenium 的一个主要缺点是它必须作为单独的进程运行。
- 配置有点麻烦,因为开发者需要遵循几个步骤。