qileilove

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

          行為驅(qū)動(dòng)開(kāi)發(fā): Cucumber的目錄結(jié)構(gòu)和執(zhí)行過(guò)程

          行為驅(qū)動(dòng)開(kāi)發(fā): Cucumber的目錄結(jié)構(gòu)和執(zhí)行過(guò)程

                Cucumber是Ruby世界的BDD框架,開(kāi)發(fā)人員主要與兩類文件打交到,F(xiàn)eature文件和相應(yīng)的Step文件。Feature文件是以feature為后綴名的文件,以Given-When-Then的方式描述了系統(tǒng)的場(chǎng)景(scenarios)行為;Step文件為普通的Ruby文件,F(xiàn)eature文件中的每個(gè)Given/When/Then步驟在Step文件中都有對(duì)應(yīng)的Ruby執(zhí)行代碼,兩類文件通過(guò)正則表達(dá)式相關(guān)聯(lián)。筆者在用Cucumber+Watir做回歸測(cè)試時(shí)對(duì)Cucumber工程的目錄結(jié)構(gòu)執(zhí)行過(guò)程進(jìn)行了研究。

          安裝好Cucumber后,如果在終端直接執(zhí)行cucumber命令,得到以下輸出:

          輸出結(jié)果表明:cucumber期待當(dāng)前目錄下存在名為features的子目錄。建好features文件夾后,重新執(zhí)行cucumber命令,輸出如下:

          Cucumber運(yùn)行成功,但由于features文件夾下沒(méi)有任何內(nèi)容,故得到上述輸出結(jié)果。

          網(wǎng)上大多數(shù)關(guān)于Cucumber的教程都建議采用以下目錄結(jié)構(gòu),所有的文件(夾)都位于features文件夾下。

          Feature文件(如test.feature)直接位于features文件夾下,可以為每個(gè)應(yīng)用場(chǎng)景創(chuàng)建一個(gè)Feature文件;與Feature文件對(duì)應(yīng)的Step文件(如test.rb)位于step_definitions子文件夾下;同時(shí),存在support子文件夾,其下的env.rb文件為環(huán)境配置文件。在這樣的目錄結(jié)構(gòu)條件下執(zhí)行cucumber命令,會(huì)首先執(zhí)行env.rb做前期準(zhǔn)備工作,比如可以用Watir新建瀏覽器窗口,然后Cucumber將test.rb文件讀入內(nèi)存,最后執(zhí)行test.feature文件,當(dāng)遇到Given/When/Then步驟時(shí),Cucumber將在test.rb中搜索是否有相應(yīng)的step,如果有,則執(zhí)行相應(yīng)的Ruby代碼。

          這樣的目錄結(jié)構(gòu)只是推薦的目錄結(jié)構(gòu),筆者通過(guò)反復(fù)的試驗(yàn)得出了以下結(jié)論:對(duì)于Cucumber而言,除了頂層的features文件夾是強(qiáng)制性的之外,其它目錄結(jié)構(gòu)都不是強(qiáng)制性的,Cucumber將對(duì)features文件夾下的所有內(nèi)容進(jìn)行扁平化(flatten)處理和首字母排序。具體來(lái)說(shuō),Cucumber在運(yùn)行時(shí),首先將遞歸的執(zhí)行features文件夾下的所有Ruby文件(其中則包括Step文件),然后通過(guò)相同的方式執(zhí)行Feature文件。但是,如果features文件夾下存在support子文件夾,并且support下有名為env.rb的文件,Cucumber將首先執(zhí)行該文件,然后執(zhí)行support下的其它文件,再遞歸執(zhí)行featues下的其它文件。

          比如有如下Cucumber目錄結(jié)構(gòu):

          為了方便記錄Cucumber運(yùn)行時(shí)的文件執(zhí)行順序,在features文件夾下的所有Ruby文件中加上以下代碼:

          puts File.basename(__FILE__)

          此行代碼的作用是在一個(gè)Ruby文件執(zhí)行時(shí)輸出該文件的名字,此時(shí)執(zhí)行cucumber命令,得到以下輸出(部分)結(jié)果:

          上圖即為Ruby文件的執(zhí)行順序,可以看出,support文件夾下env.rb文件首先被執(zhí)行,其次按照字母排序執(zhí)行c.rb和d.rb;接下來(lái),Cucumber將features文件夾下的所用文件(夾)扁平化,并按字母順序排序,從而先執(zhí)行a.rb和b.rb,而由于other文件夾排在step_definitions文件夾的前面,所以先執(zhí)行other文件夾下的Ruby文件(也是按字母順序執(zhí)行:先f(wàn).rb,然后g.rb),最后執(zhí)行step_definitions下的e.rb。

          當(dāng)執(zhí)行完所有Ruby文件后,Cucumber開(kāi)始依次讀取Feature文件,執(zhí)行順序也和前述一樣,即: a.feature --> b.feature --> c.feature

          筆者還發(fā)現(xiàn),這些Ruby文件甚至可以位于features文件夾之外的任何地方,只是需要在位于features文件夾之內(nèi)的Ruby文件中require一下,比如在env.rb中。

          posted on 2014-12-28 01:29 順其自然EVO 閱讀(2477) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2014年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 昭平县| 遵义市| 甘泉县| 来安县| 隆安县| 莎车县| 无极县| 盖州市| 孟津县| 黑龙江省| 余姚市| 吴旗县| 芜湖市| 图木舒克市| 泰州市| 渝北区| 黄浦区| 东兰县| 芦山县| 赞皇县| 望都县| 衡阳县| 三台县| 姚安县| 平定县| 安国市| 吉安县| 青浦区| 绥化市| 长岛县| 南京市| 延庆县| 札达县| 秦皇岛市| 鱼台县| 京山县| 武邑县| 广宁县| 兴国县| 宜春市| 那坡县|