Nightwatch101 #4:設定檔

Nightwatch.js

Nightwatch 提供了 Command-line Test Runner,用來跑各種類型的測試,例如:指定測試環境、依群組或標籤或個別檔案、循序或平行執行等。其設定檔的預設名稱是 nightwatch.json 或 nightwatch.conf.js,如果兩者都出現,會優先選擇 nightwatch.conf.js,設定檔位置在這個專案的根目錄底下。

設定檔的範例可參考這裡

本系列文章皆使用這個專案,可以拉下來玩玩;有什麼問題都可以提出 issue

說明

設定檔分為三個部分:基本設定、Selenium Server 相關設定和測試環境相關設定。

以下特別說明測試環境相關的設定。

指定測試環境

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

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 時會有更詳細的說明,現在只要先把基本的東西設定好,可以跑測試就好了。


2018 鐵人賽網址


comments powered by Disqus