Nightwatch 提供了 Command-line Test Runner,用來跑各種類型的測試,例如:指定測試環境、依群組或標籤或個別檔案、循序或平行執行等。其設定檔的預設名稱是 nightwatch.json 或 nightwatch.conf.js,如果兩者都出現,會優先選擇 nightwatch.conf.js,設定檔位置在這個專案的根目錄底下。
設定檔的範例可參考這裡。
本系列文章皆使用這個專案,可以拉下來玩玩;有什麼問題都可以提出 issue。
設定檔分為三個部分:基本設定、Selenium Server 相關設定和測試環境相關設定。
src_folders
:測試程式碼的位置output_folder
:測試報告的位置custom_commands_path
:客製化指令的位置custom_assertions_path
:客製化斷言的位置page_objects_path
:Page Objects 的位置globals_path
:External Globals 的位置live_output
:是否即時顯示測試結果test_workers
:使用 Test Workers 的數量test_runner
:啟用哪一個 Test Runner,使用 nightwatch 或 mocha"selenium": {...}
中
server_path
:Selenium Server 的位置,start_process
啟用時才需設定port
:Selenium 所佔用的埠號start_process
:是否自動管理 Selenium Processstart_session
:是否自動啟用 Selenium Sessionlog_path
:Log 的位置cli_args
:要傳入 Selenium Process 的 cli 參數,這裡可分別對各個瀏覽器驅動程式的選項做設定"test_settings": {...}
,必填 default 環境),例如:分別為預設環境和 staging 環境等代入不同的設定值。
launch_url
:載入的網址selenium_host
:Selenium Server 所用的 hostname / IPselenium_port
:Selenium Server 所用的埠號request_timeout_options
:對 Selenium Server 發出 HTTP Request 的 timeout 時間與重試次數silent
:是否顯示更多 Selenium 指令紀錄output
:是否關閉 terminal outputdisable_colors
:是否關閉 terminal output 的顏色顯示screenshots
:出錯時是否螢幕截圖username
:驗證時需要輸入的 usernameaccess_key
:驗證時需要輸入的 access_keyproxy
:proxydesiredCapabilities
:新建立 Session 時傳入 Selenium Webdriver 的物件globals
:測試環境所代入的物件資料exclude
:要忽略的測試資料夾或測試程式filter
:載入測試時需要被使用的資料夾或資料檔案log_screenshot_data
:Log 中的螢幕截圖是否使用 Base64 圖檔use_xpath
:是否使用 Xpath 為預設的定位網頁元素方式cli_args
:用來覆寫在 Selenium Server 相關設定中所設定的 Selenium Process 的 cli 參數end_session_on_fail
:當測試程式的斷言失敗時自動結束 Sessionskip_testcases_on_fail
:當有 Test Case 錯誤出現時忽略後續的 Test Caseoutput_folder
:覆寫基本設定的測試報告的位置persist_globals
:是否可覆寫 Test Globalsdetailed_output
:測試報告是否顯示詳細資料以下特別說明測試環境相關的設定。
Nightwatch Test Runner 可使用 --env
代入指定的測試環境。例如,在這裡有 default 和 staging 兩種環境,依照不同需求,我們可以分別測試任一環境或同時跑測試於這兩個環境。
// nightwatch.conf.js
{
...
"test_settings": {
"default": {
"launch_url": "http://localhost",
"globals": {
"firstGlobalVar": "Hello World!",
"secondGlobalVar": "This is me."
}
},
"staging": {
"launch_url": "http://staging.host",
"globals": {
"firstGlobalVar": "Hi ~"
}
}
}
}
沒有指定環境,就是預設環境 default。
nightwatch
等同於
nightwatch --env default
指定環境 staging,將 --env
代入 staging 即可。
nightwatch --env staging
launch_url
屬性若不同環境需代入不同的 URL,則可使用 launch_url
分別設定。例如:由於在上例中執行 nightwatch --env staging
,所以 browser.launchUrl
會得到 http://staging.host
。注意,若沒有指定執行環境,例如執行 nightwatch
,則會使用 default 値 http://localhost
。
module.exports = {
'Demo test': function (browser) {
browser
.url(browser.launchUrl) // "http://staging.host"
// ...
.end();
}
};
Test Globals 是存放一些名-值對(Name-Value Pairs)的地方,用於代入測試程式中使用。與上面的 launch_url
屬性一樣,可根據環境設定不同的 Test Globals。因此,若執行 nightwatch --env staging
module.exports = {
'Demo test': function (browser) {
console.log(browser.globals);
}
};
則 console 所得到的 Test Globals 是
{
"firstGlobalVar": "Hi ~"
}
備註:每次執行測試程式(Test Suite)時,Test Globals 預設都會建立深拷貝(Deep Copy)的物件,也就是說不會更改初始設定値。所以,如果希望整個測試過程都使用同一個物件,那麼 persist_globals
就要設定為 true,來允許被改變。
在這個範例-Nightwatch101 中,設定檔是 nightwatch.conf.js,其中包含基本設定、Selenium Server 設定和環境設定。我們也將一些 test_settings 的設定提出來放在外部檔案 globals.js 中,例如:Hooks、環境變數、客製化測試報告所用的 plugin 等,好處是設定檔會比較乾淨整齊,這些複雜的判斷運算就包給外部檔案吧。
以上部份在後面談到 Nightwatch Test Runner 時會有更詳細的說明,現在只要先把基本的東西設定好,可以跑測試就好了。
網誌版。