Protractor - Javascript测试概念



由于掌握 JavaScript 对于使用 Protractor 至关重要,本章我们将详细了解 JavaScript 测试的概念。

JavaScript 测试与自动化

JavaScript是最流行的动态类型解释型脚本语言,但测试代码是最具挑战性的任务。这是因为,与JAVA和C++等其他编译语言不同,JavaScript中没有编译步骤可以帮助测试人员找出错误。此外,基于浏览器的测试非常耗时;因此,需要支持JavaScript自动化测试的工具。

自动化测试的概念

编写测试始终是一个好习惯,因为它使代码更好;手动测试的问题在于它有点耗时且容易出错。对于程序员来说,手动测试的过程也相当枯燥,因为他们需要重复该过程,编写测试规范,更改代码并多次刷新浏览器。此外,手动测试还会减慢开发过程。

由于上述原因,拥有可以自动化这些测试并帮助程序员摆脱这些重复且枯燥步骤的工具始终是有用的。开发人员应该如何使测试过程自动化?

基本上,开发人员可以在CLI(命令行解释器)或开发IDE(集成开发环境)中实现工具集。然后,即使没有开发人员的输入,这些测试也会在单独的进程中连续运行。JavaScript的自动化测试也不是什么新鲜事,已经开发了许多工具,例如Karma、Protractor、CasperJS等。

JavaScript测试类型

可以针对不同目的进行不同的测试。例如,一些测试是为了检查程序中函数的行为,而另一些测试是为了测试模块或功能的流程。因此,我们有以下两种类型的测试:

单元测试

测试是在程序的最小可测试部分(称为单元)上进行的。单元基本上是在隔离的情况下进行测试的,该单元不依赖于其他部分。在JavaScript的情况下,具有特定行为的单个方法或函数可以是代码单元,并且必须以隔离的方式测试这些代码单元。

单元测试的优点之一是,可以按任何顺序测试单元,因为单元彼此独立。单元测试的另一个真正重要的优点是,它可以随时运行测试,如下所示:

  • 从开发过程的开始。
  • 完成任何模块/功能的开发后。
  • 修改任何模块/功能后。
  • 在现有应用程序中添加任何新功能后。

对于JavaScript应用程序的自动化单元测试,我们可以从许多测试工具和框架中进行选择,例如Mocha、Jasmine和QUnit。

端到端测试

它可以定义为用于测试应用程序从开始到结束(从一端到另一端)的流程是否按设计正常工作的测试方法。

端到端测试也称为功能/流程测试。与单元测试不同,端到端测试测试各个组件如何作为应用程序一起工作。这是单元测试和端到端测试的主要区别。

例如,假设我们有一个注册模块,用户需要提供一些有效信息才能完成注册,那么该特定模块的E2E测试将遵循以下步骤来完成测试:

  • 首先,它将加载/编译表单或模块。
  • 现在,它将获取表单元素的DOM(文档对象模型)。
  • 接下来,触发提交按钮的点击事件以检查它是否有效。
  • 现在,出于验证目的,从输入字段收集值。
  • 接下来,应验证输入字段。
  • 出于测试目的,调用虚假API来存储数据。

每个步骤都会给出自己的结果,这些结果将与预期的结果集进行比较。

现在出现的问题是,虽然这种类型的E2E或功能测试也可以手动执行,但为什么我们需要为此进行自动化?主要原因是自动化将使此测试过程变得容易。为此,一些可轻松与任何应用程序集成的可用工具是Selenium、PhantomJS和Protractor。

测试工具和框架

我们有各种用于Angular测试的测试工具和框架。以下是其中一些知名工具和框架:

Karma

Karma由Vojta Jina创建,是一个测试运行器。最初这个项目被称为Testacular。它不是一个测试框架,这意味着它使我们能够轻松地在真实的浏览器上自动运行JavaScript单元测试。Karma是为AngularJS构建的,因为在Karma之前,没有用于基于Web的JavaScript开发人员的自动化测试工具。另一方面,借助Karma提供的自动化功能,开发人员可以运行一个简单的单个命令,并确定整个测试套件是否通过或失败。

使用Karma的优点

与手动流程相比,以下是使用Karma的一些优点:

  • 在多个浏览器和设备上自动化测试。
  • 监控文件错误并修复它们。
  • 提供在线支持和文档。
  • 简化与持续集成服务器的集成。

使用Karma的缺点

以下是使用Karma的一些缺点:

使用Karma的主要缺点是它需要额外的工具来配置和维护。

如果将Karma测试运行器与Jasmine一起使用,则在针对一个元素具有多个ID的情况下,可用于查找有关设置CSS的信息的文档较少。

Jasmine

Jasmine是用于测试JavaScript代码的行为驱动开发框架,由Pivotal Labs开发。在Jasmine框架积极开发之前,Pivotal Labs还开发了一个类似的单元测试框架JsUnit,它具有内置的测试运行器。可以通过包含SpecRunner.html文件或将其用作命令行测试运行器来通过Jasmine测试运行浏览器测试。它也可以与或不与Karma一起使用。

使用Jasmine的优点

以下是使用Jasmine的一些优点:

  • 独立于浏览器、平台和语言的框架。

  • 支持测试驱动开发(TDD)以及行为驱动开发。

  • 默认情况下与Karma集成。

  • 易于理解的语法。

  • 提供测试间谍、伪造和直通功能,作为附加功能协助测试。

使用Jasmine的缺点

以下是使用Jasmine的一个缺点:

  • 用户必须在更改时返回测试,因为Jasmine在运行测试时没有文件监视功能。

Mocha

Mocha是为Node.js应用程序编写的测试框架,但也支持浏览器测试。它与Jasmine非常相似,但它们之间的主要区别在于Mocha需要一些插件和库,因为它不能作为测试框架独立运行。另一方面,Jasmine是独立的。但是,Mocha比Jasmine更灵活。

使用Mocha的优点

以下是使用Mocha的一些优点:

  • Mocha非常易于安装和配置。
  • 用户友好且文档简单。
  • 包含具有多个节点项目的插件。

使用Mocha的缺点

以下是使用Mocha的一些缺点:

  • 它需要单独的模块用于断言、间谍等。
  • 它还需要额外的配置才能与Karma一起使用。

QUnit

QUnit最初由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的主要缺点是它必须作为单独的进程运行。
  • 配置有点麻烦,因为开发人员需要遵循几个步骤。
广告