nightwatch系列教程03——开发者指南:运行你的测试脚本

本章内容翻译自http://nightwatchjs.org/guide#running-tests

测试运行器

Nightwatch 包含一个命令行的测试运行器,它让运行测试文件和生成有用的输出变得非常简单。有几种不同的方式来使用测试运行器,这取决你的安装方式。

全局安装

如果你全局安装了Nightwatch,那么你可以在任何地方运行nightwatch。

nightwatch [source] [options]

项目中安装

如果你将nightwatch作为依赖安装到了项目中,你可以使用 node_modules/.bin 来运行nightwatch命令。

  • Linux and MacOSX
./node_modules/.bin/nightwatch [source] [options]
  • Windows

创建一个nightwatch.js的文件,然后添加下面这行代码:

require('nightwatch/bin/runner.js');

然后这么运行:

node nightwatch.js [source] [options]

测试源文件

可选的source参数,可以指定一个文件,或者多个文件,或者整个文件夹来测试。它不管你的src_folders里面是怎么配置的。

看几个例子:

运行单个测试文件

nightwatch tests/one/firstTest.js

运行不同的测试文件

nightwatch tests/one/firstTest.js tests/secondTest.js

运行一个指定的文件和一个测试文件所在目录

nightwatch tests/one/test.js tests/utils

命令行选项

测试运行器支持许多运行时的选项,可以运行 nightwatch --help 来查看全部

名称 简写 默认值 描述
--config -c ./nightwatch.json nightwatach.json文件的位置,该文件是测试运行器使用的,它还包含着Selenium WebDriver的一些选项
--output -o tests_output 测试运行完成以后JUnit XML报告存放的路径
--reporter -r junit 预定义的报告器的名称,或者是你使用的自定义的报告器文件的路径
--env -e default 指定nightwatch运行的环境(在nightwatch.json)中定义的
--verbose 在会话期间显示selenium命令的日志
--version -v 展示当前版本
--test -t 仅运行指定的测试套件/模块。默认情况下,测试运行器会尝试去运行配置文件中src_folders属性对应的测试文件夹及其子文件夹中的测试文件
--testcase 只能跟--test命令一起用。用来运行当前测试套件中的某一个用例(testcase)
--group -g 仅运行指定及其子目录的测试文件。
--skipgroup -s 跳过个或多个的测试文件
--filter -f 当加载测试文件时,指定一个过滤器(glob表达式)作为文件名的格式
--tag -a 根据标签来过滤要运行的测试文件。只有有指定标签的测试文件才会被执行
--skiptags 跳过指定标签的测试文件,多个标签用逗号隔开
--retries 重试失败或错误的测试用例达到指定的次数。如果一个测试用例包含 beforeEachafterEach 时,重试运行时也会执行它们
--suiteRetries 重试失败或错误的测试套件达到指定的次数。如果一个测试套件包含 beforeafter 时,重试运行时也会执行它们(全局的beforeEachafterEach除外)

测试组

Nightwatch让你可以将测试文件分组,并且按需的运行它们。对测试文件分组很简单,只要将它们按放到一个子文件夹中就行了。文件夹的名称就是分组的名称。

例子:

lib/
  ├── selenium-server-standalone.jar
custom-commands/
  ├── loginUser.js
  ├── attachPicture.js
tests/
  ├── logingroup
  |   ├── login_test.js
  |   └── otherlogin_test.js
  ├── addressbook
  |   ├── addressbook_test.js
  |   └── contact_test.js
  ├── chat
  |   ├── chatwindow_test.js
  |   ├── chatmessage_test.js
  |   └── otherchat_test.js
  └── smoketests
      ├── smoke_test.js
      └── othersmoke_test.js

如果你只想运行 smoketests 这个分组的话,这么运行:

nightwatch --group smoketests

如果你不想运行这个分组的话,这么运行:

nightwatch --skipgroup smoketests

如果你想跳过多个分组,用逗号隔开就可以了:

nightwatch --skipgroup addressbook,chat

测试标签

同样,你也可以基于标签来选择性的运行测试文件,一个测试可能属于多个标签。比如,你可能又一个登录的测试文件,它即属于登录套件(login suite),又属于 正常套件(sanity suite)

给测试文件添加标签,只要添加@tags就可以了:

module.exports = {
  '@tags': ['login', 'sanity'],
  'demo login test': function (client) {
     // test code
  }
};

选择指定的标签运行:

nightwatch --tag login

指定多个标签运行:

nightwatch --tag login --tag something_else

跳过指定的标签:

nightwatch --skiptags login

跳过多个标签:

nightwatch --skiptags login,something_else

禁用测试文件

要想让一个测试模块不运行,只要给它添加一个 disabled 为true的属性就行了:

module.exports = {
  '@disabled': true, // 这将会让这个测试套件不能运行

  'sample test': function (client) {
    // test code
  }
};

当你知道这个测试套件注定失败的时候,使用这个属性是很有用的。

禁用个别测试用例

禁用单独的测试用例目前并不是nightwatch开箱即用的的支持。然而它可以相对简单的实现——通过将function转为string,这样nightwatch就会忽略这个测试用例。

例子:

module.exports = {
  'sample test': function (client) {
    // test code
  },

  // disabled
  'other sample test': '' + function (client) {
    // test code
  }
};

并行运行测试

从 V0.5 开始,nightwatch开始支持并行运行测试。通过在命令行指定多个环境来实现,如:

nightwatch -e default,chrome

这就可以同时在两个环境中运行测试了。

终端输出

每个环境都是以独立的子进程来运行的,输出会被发送到主进程。

为了输出的可读性,nightwatch默认的会按照环境分组,缓存所有子进程的输出,最终一起展示。如果你不想这样,你可以在你的nightwatch.json中设置属性live_output为true,注意要设置在第一层级。

使用workers

0.7版本引入了一个新的特性,允许并行运行测试。当启用此功能时,测试运行器将启动可配置数量的子进程,然后将加载的测试分发到并行运行。

可以通过设置test_workers来启用:

"test_workers": {
  "enabled": true,
  "workers": "auto"
}   

或者更简单:

"test_workers": true

workers 选项是用来设置同时运行的最大子进程数。

  • "auto" 表示根据你的CPU数量决定。
  • {number} 表示具体的数量

并行运行测试是文件级别的。每个测试文件都会满足test worker的插槽。独立的测试步骤是不会并行运行的。

0.9版本为并行运行测试的输出做了进一步的支持。为了输出的可读性,我们建议你设置 detailed_output 为false.

本章还有两个小节,主要讲的是使用 grunt 和使用 mocha ,由于这两个我都不熟,而且内容也相对简单,就是改改配置,就不翻译了。感兴趣或者有需要的,可以直接参考官网:http://nightwatchjs.org/guide#using-grunt

猜你喜欢

转载自blog.csdn.net/qq_25324335/article/details/82050793