基於Node.js的驗收測試框架—Nightwatch.js

沉默術士發表於2017-07-03

Nightwatch是一套新近問世的基於Node.js的驗收測試框架,使用Selenium WebDriver API以將Web應用測試自動化。它提供了簡單的語法,支援使用JavaScript和CSS選擇器,來編寫執行在Selenium伺服器上的端到端測試。
  不同於行為驅動測試(BDD)和單元測試獨立執行並使用模擬/存根,端到端測試將試著儘可能從使用者的視角,對真實系統的訪問行為進行模擬。對Web應用來說,這意味著需要開啟瀏覽器、載入頁面、執行JavaScript,以及進行與DOM互動等操作。Nightwatch嘗試著使用語法糖(syntax sugar)來實現這一目標:

this.demoTestGoogle = function (browser) {
browser
.url(“http://www.google.com”)
.waitForElementVisible(`body`, 1000)
.setValue(`input[type=text]`, `nightwatch`)
.waitForElementVisible(`button[name=btnG]`, 1000)
.click(`button[name=btnG]`)
.pause(1000)
.assert.containsText(`#main`, `The Night Watch`)
.end();
};

  除簡化了編寫自動化測試的過程外,Nightwatch還能夠與持續整合的流水作業結合,從而對開發中的系統進行完整的診斷:我們可以從Nightwatch網站找到當前提供特性的列表:
  簡單但強大的語法。只需要使用JavaScript和CSS選擇器,開發者就能夠非常迅捷地撰寫測試。開發者也不必初始化其他物件和類,只需要編寫測試規範即可。
  內建命令列測試執行器,允許開發者同時執行全部測試——分組或單個執行。
  自動管理Selenium伺服器;如果Selenium執行在另一臺機器上,那麼也可以禁用此特性。
  支援持續整合:內建JUnit XML報表,因此開發者可以在構建過程中,將自己的測試與系統(例如Hudson 或Teamcity等)整合。
  使用CSS選擇器或Xpath,定位並驗證頁面中的元素或是執行命令。
  易於擴充套件,便於開發者根據需要,實現與自己應用相關的命令。
  目前,Selenium是JavaScript的世界裡驗收測試方面最流行的工具之一,類似的還有PhantomJS。
  二者都有其獨到的方法:Selenium使用其WebDriver API,而PhantomJS使用無介面的WebKit瀏覽器。它們都是非常成熟的工具,都具有強大的社群支援。
  它們與Nightwatch之間最大的不同,主要是在於語法的簡易度以及對持續整合的支援。與Nightwatch相比,Selenium和PhantomJS都擁有更加冗長的語法,這會讓編碼變得更龐大,而且不支援從命令列中進行開箱即用的持續整合(JUnit XML或其他標準輸出)。
  儘管如此,Nightwatch還處於不斷演進的道路上,以成為更加成熟工具的。在Google Groups中,WD.js(另一個基於Node.js的驗收測試框架)的作者Sebastian Vincent針對處理回撥所選擇的實現給出了一些批評意見:
  當涉及非同步呼叫時,基於鏈式的佇列是個糟糕的模式。如果開發者想要做一些複雜的事情,或是組合一些東西,最終將不得不手動停止佇列以插入任務(但也許Nightwatch會證明我的看法是錯的)。
  Vincent還針對Nightwatch和Selenium伺服器之間使用的底層通訊協議,指出了其中存在的不足之處:
  Nightwatch離成熟還遠,看看HTTP協議,GET和DETLETE中沒有重試、沒有超時設定,也沒有內容/長度+內容型別。在非直接情況下(例如Sauce-connect或排隊),它很快就會出現問題。
  然而,哪怕有這些批評的聲音,Nightwatch還是入選了GitHub本月最熱門程式碼倉庫。另外該團隊運營著一個Twitter賬號,聽取來自社群的反饋並與開發者互動。

最新內容請見作者的GitHub頁:http://qaseven.github.io/


相關文章