本章内容翻译自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 | 重试失败或错误的测试用例 达到指定的次数。如果一个测试用例包含 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,注意要设置在第一层级。
使用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