qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          基于Node.js的驗(yàn)收測(cè)試框架—Nightwatch.js

            Nightwatch是一套新近問世的基于Node.js的驗(yàn)收測(cè)試框架,使用Selenium WebDriver API以將Web應(yīng)用測(cè)試自動(dòng)化。它提供了簡(jiǎn)單的語法,支持使用JavaScript和CSS選擇器,來編寫運(yùn)行在Selenium服務(wù)器上的端到端測(cè)試。
            不同于行為驅(qū)動(dòng)測(cè)試(BDD)和單元測(cè)試獨(dú)立運(yùn)行并使用模擬/存根,端到端測(cè)試將試著盡可能從用戶的視角,對(duì)真實(shí)系統(tǒng)的訪問行為進(jìn)行仿真。對(duì)Web應(yīng)用來說,這意味著需要打開瀏覽器、加載頁面、運(yùn)行JavaScript,以及進(jìn)行與DOM交互等操作。Nightwatch嘗試著使用語法糖(syntax sugar)來實(shí)現(xiàn)這一目標(biāo):
          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();
          };
            除簡(jiǎn)化了編寫自動(dòng)化測(cè)試的過程外,Nightwatch還能夠與持續(xù)集成的流水作業(yè)結(jié)合,從而對(duì)開發(fā)中的系統(tǒng)進(jìn)行完整的診斷:我們可以從Nightwatch網(wǎng)站找到當(dāng)前提供特性的列表:
            簡(jiǎn)單但強(qiáng)大的語法。只需要使用JavaScript和CSS選擇器,開發(fā)者就能夠非常迅捷地撰寫測(cè)試。開發(fā)者也不必初始化其他對(duì)象和類,只需要編寫測(cè)試規(guī)范即可。
            內(nèi)建命令行測(cè)試運(yùn)行器,允許開發(fā)者同時(shí)運(yùn)行全部測(cè)試——分組或單個(gè)運(yùn)行。
            自動(dòng)管理Selenium服務(wù)器;如果Selenium運(yùn)行在另一臺(tái)機(jī)器上,那么也可以禁用此特性。
            支持持續(xù)集成:內(nèi)建JUnit XML報(bào)表,因此開發(fā)者可以在構(gòu)建過程中,將自己的測(cè)試與系統(tǒng)(例如Hudson 或Teamcity等)集成。
            使用CSS選擇器或Xpath,定位并驗(yàn)證頁面中的元素或是執(zhí)行命令。
            易于擴(kuò)展,便于開發(fā)者根據(jù)需要,實(shí)現(xiàn)與自己應(yīng)用相關(guān)的命令。
            目前,Selenium是JavaScript的世界里驗(yàn)收測(cè)試方面最流行的工具之一,類似的還有PhantomJS。
            二者都有其獨(dú)到的方法:Selenium使用其WebDriver API,而PhantomJS使用無界面的WebKit瀏覽器。它們都是非常成熟的工具,都具有強(qiáng)大的社區(qū)支持。
            它們與Nightwatch之間最大的不同,主要是在于語法的簡(jiǎn)易度以及對(duì)持續(xù)集成的支持。與Nightwatch相比,Selenium和PhantomJS都擁有更加冗長(zhǎng)的語法,這會(huì)讓編碼變得更龐大,而且不支持從命令行中進(jìn)行開箱即用的持續(xù)集成(JUnit XML或其他標(biāo)準(zhǔn)輸出)。
            盡管如此,Nightwatch還處于不斷演進(jìn)的道路上,以成為更加成熟工具的。在Google Groups中,WD.js(另一個(gè)基于Node.js的驗(yàn)收測(cè)試框架)的作者Sebastian Vincent針對(duì)處理回調(diào)所選擇的實(shí)現(xiàn)給出了一些批評(píng)意見:
            當(dāng)涉及異步調(diào)用時(shí),基于鏈?zhǔn)降年?duì)列是個(gè)糟糕的模式。如果開發(fā)者想要做一些復(fù)雜的事情,或是組合一些東西,最終將不得不手動(dòng)停止隊(duì)列以插入任務(wù)(但也許Nightwatch會(huì)證明我的看法是錯(cuò)的)。
            Vincent還針對(duì)Nightwatch和Selenium服務(wù)器之間使用的底層通信協(xié)議,指出了其中存在的不足之處:
            Nightwatch離成熟還遠(yuǎn),看看HTTP協(xié)議,GET和DETLETE中沒有重試、沒有超時(shí)設(shè)置,也沒有內(nèi)容/長(zhǎng)度+內(nèi)容類型。在非直接情況下(例如Sauce-connect或排隊(duì)),它很快就會(huì)出現(xiàn)問題。
            然而,哪怕有這些批評(píng)的聲音,Nightwatch還是入選了GitHub本月最熱門代碼倉(cāng)庫(kù)。另外該團(tuán)隊(duì)運(yùn)營(yíng)著一個(gè)Twitter賬號(hào),聽取來自社區(qū)的反饋并與開發(fā)者互動(dòng)。

          posted on 2014-03-24 10:49 順其自然EVO 閱讀(592) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 苗栗市| 莱阳市| 托克逊县| 广德县| 商河县| 尼玛县| 县级市| 玉田县| 项城市| 天全县| 宜丰县| 渑池县| 安仁县| 厦门市| 常宁市| 玉山县| 庆安县| 苗栗县| 内乡县| 山西省| 教育| 宁乡县| 鄂托克旗| 顺平县| 图木舒克市| 友谊县| 赤城县| 宣恩县| 沙雅县| 芜湖市| 玛曲县| 仙居县| 万山特区| 镇赉县| 衡阳市| 稻城县| 临夏市| 汽车| 肃南| 南投市| 定兴县|