天天看點

基于Node.js的驗收測試架構—Nightwatch.js

nightwatch是一套新近問世的基于node.js的驗收測試架構,使用selenium webdriver api以将web應用測試自動化。它提供了簡單的文法,支援使用javascript和css選擇器,來編寫運作在selenium伺服器上的端到端測試。

  不同于行為驅動測試(bdd)和單元測試獨立運作并使用模拟/存根,端到端測試将試着盡可能從使用者的視角,對真實系統的通路行為進行仿真。對web應用來說,這意味着需要打開浏覽器、加載頁面、運作javascript,以及進行與dom互動等操作。nightwatch嘗試着使用文法糖(syntax sugar)來實作這一目标:

  除簡化了編寫自動化測試的過程外,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賬号,聽取來自社群的回報并與開發者互動。

繼續閱讀