将 CucumberJS 与 Nightwatch 结合使用

概述

Nightwatch 2 带来了对直接使用 Cucumber.js 作为替代测试运行器的集成支持。除了 Cucumber 库 本身(版本 7.3 或更高版本)之外,不需要其他插件。

只需在安装了 Nightwatch 的同一项目中运行以下命令

npm i @cucumber/cucumber --save-dev

配置

为了在 Nightwatch 中使用 CucumberJS,您需要设置 test_runner 配置属性并将类型设置为 cucumber。您还需要设置功能文件所在的路径。

nightwatch.conf.js
{
  test_runner: {
    // set cucumber as the runner
    type: 'cucumber',
    
// define cucumber specific options
options: { //set the feature path feature_path: 'examples/cucumber-js/*/*.feature',
// start the webdriver session automatically (enabled by default) auto_start_session: true,
// use parallel execution in Cucumber // set number of workers to use (can also be defined in the cli as --parallel 2 parallel: 2 } },
src_folders: ['examples/cucumber-js/features/step_definitions'] }

运行测试

从示例运行 Cucumber 测试的最简单方法是

npx nightwatch --env cucumber-js

Cucumber 规范文件/步骤定义文件可以在 Nightwatch 配置中的 src_folders 中提供,也可以作为 CLI 参数提供。

定义了 src_folders
npx nightwatch
未定义 src_folders
npx nightwatch examples/cucumber-js/features/step_definition

并行运行

使用 2 个工作程序并行运行

nightwatch examples/cucumber-js/features/step_definitions --parallel 2

像往常一样使用其他 测试运行器选项

npx nightwatch examples/cucumber-js/features/step_definitions --headless

手动启动 WebDriver 会话

有时您可能需要在 Nightwatch 实例化后不自动启动 Webdriver 会话。为此,Nightwatch 提供了可作为 this.client 获得的实例,其中包含 launchBrowser() 方法。

配置

nightwatch.conf.js
{
  test_runner: {
    type: 'cucumber',
    options: {
      feature_path: 'examples/cucumber-js/*/*.feature',
      auto_start_session: false
    }
  }
}

然后,您可以使用一个额外的设置文件,您可以将其作为额外的 --require 传递给 Nightwatch,该文件将被转发到 Cucumber。在额外的设置文件中,您可以添加在启动会话之前需要执行的其他操作。

示例 _extra_setup.js

请记住在 this 上设置 browser,以便 Nightwatch 可以自动关闭它。否则,请记住在您自己的 Cucumber After() 钩子中调用 .quit()

_extra_setup.js
const {Before} = require('@cucumber/cucumber');

Before(async function(testCase) { if (!this.client) { console.error('Nightwatch instance was not created.');
return; }
this.client.updateCapabilities({ testCap: 'testing' });
this.browser = await this.client.launchBrowser(); });

使用额外设置运行

nightwatch examples/cucumber-js/features/step_definitions --require {/full/path/to/_extra_setup.js}

Nightwatch 的 Cucumber 设置文件

您可能还想检查 Nightwatch 用于初始化 Cucumber 运行器的内置设置文件。它位于我们项目的根文件夹中,位于 /cucumber-js/_setup_cucumber_runner.js

报告

使用集成 Cucumber 测试运行器时,您需要使用 Cucumber 格式化程序 生成输出。

Nightwatch 报告器(如 JUnit XML 报告或 全局自定义报告器)不可用。主要原因是报告委托给 Cucumber CLI。您也可以 编写您自己的 Cucumber 格式化程序。

Nightwatch 将转发 --format--format-options CLI 参数(如果存在)到 Cucumber。

默认情况下,使用 progress 格式化程序。

例如

npx nightwatch --env cucumber-js --format @cucumber/pretty-formatter

或者

npx nightwatch --env cucumber-js --require cucumber.conf.js --format json:report/cucumber_report.json

示例输出

以下是使用 Firefox 运行示例测试时的输出情况。您只需在安装了 Nightwatch 的项目中运行它

npx nightwatch examples/cucumber-js/features/step_definition
ℹ Connected to GeckoDriver on port 4444 (1740ms).
Using: firefox (92.0.1) on MAC (20.6.0).

.. ✔ Testing if the page title equals 'Rijksmuseum Amsterdam, home of the Dutch masters' (4ms) . ✔ Element <#rijksmuseum-app> was visible after 46 milliseconds. . ✔ Testing if element <.search-results> contains text 'Operation Night Watch' (1994ms) ... ✔ Testing if the page title equals 'Rijksmuseum Amsterdam, home of the Dutch masters' (8ms) . ✔ Element <#rijksmuseum-app> was visible after 49 milliseconds. . ✔ Testing if element <.search-results> contains text 'The Night Watch, Rembrandt van Rijn, 1642' (1427ms) .

2 scenarios (2 passed) 10 steps (10 passed) 0m13.024s (executing steps: 0m12.998s)