使用Nightwatch進行端到端測試

jopen 10年前發布 | 10K 次閱讀 Nightwatch

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,定位并驗證頁面中的元素或是執行命令。
  • 易于擴展,便于開發者根據需要,實現與自己應用相關的命令。
  • </ul>

    目前,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本月最熱門代碼倉庫。另外該團隊運營著一個推ter賬號,聽取來自社區的反饋并與開發者互動。

    查看英文原文:Testing End-to-End with Nightwatch

    來自:http://www.infoq.com/cn/news/2014/02/nightwatch

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!