本章內容翻譯自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