本章内容翻译自http://nightwatchjs.org/guide#running-tests。javascript
Nightwatch 包含一个命令行的测试运行器,它让运行测试文件和生成有用的输出变得很是简单。有几种不一样的方式来使用测试运行器,这取决你的安装方式。css
若是你全局安装了Nightwatch,那么你能够在任何地方运行nightwatch。java
nightwatch [source] [options]
若是你将nightwatch做为依赖安装到了项目中,你可使用 node_modules/.bin
来运行nightwatch命令。node
./node_modules/.bin/nightwatch [source] [options]
建立一个nightwatch.js的文件,而后添加下面这行代码:chrome
require('nightwatch/bin/runner.js');
而后这么运行:json
node nightwatch.js [source] [options]
可选的source参数,能够指定一个文件,或者多个文件,或者整个文件夹来测试。它无论你的src_folders
里面是怎么配置的。缓存
看几个例子:ruby
运行单个测试文件bash
nightwatch tests/one/firstTest.js
运行不一样的测试文件ide
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 |
重试失败或错误的测试用例 达到指定的次数。若是一个测试用例包含 beforeEach 和 afterEach 时,重试运行时也会执行它们 |
||
--suiteRetries |
重试失败或错误的测试套件 达到指定的次数。若是一个测试套件包含 before 和 after 时,重试运行时也会执行它们(全局的beforeEach 和 afterEach 除外) |
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,注意要设置在第一层级。
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