BDD Cucumber的目錄結構和執行過程

2022-04-18 03:46:40 字數 2241 閱讀 5446

cucumber是ruby世界的bdd框架,開發人員主要與兩類檔案打交到,feature檔案和相應的step檔案。feature檔案是以feature為字尾名的檔案,以given-when-then的方式描述了系統的場景(scenarios)行為;step檔案為普通的ruby檔案,feature檔案中的每個given/when/then步驟在step檔案中都有對應的ruby執行**,兩類檔案通過正規表示式相關聯。筆者在用cucumber+watir做回歸測試時對cucumber工程的目錄結構執行過程進行了研究。

安裝好cucumber後,如果在終端直接執行cucumber命令,得到以下輸出:

輸出結果表明:cucumber期待當前目錄下存在名為features的子目錄。建好features資料夾後,重新執行cucumber命令,輸出如下:

cucumber執行成功,但由於features資料夾下沒有任何內容,故得到上述輸出結果。

網上大多數關於cucumber的教程都建議採用以下目錄結構,所有的檔案(夾)都位於features資料夾下。

feature檔案(如test.feature)直接位於features資料夾下,可以為每個應用場景建立乙個feature檔案;與feature檔案對應的step檔案(如test.rb)位於step_definitions子資料夾下;同時,存在support子資料夾,其下的env.rb檔案為環境配置檔案。在這樣的目錄結構條件下執行cucumber命令,會首先執行env.rb做前期準備工作,比如可以用watir新建瀏覽器視窗,然後cucumber將test.rb檔案讀入記憶體,最後執行test.feature檔案,當遇到given/when/then步驟時,cucumber將在test.rb中搜尋是否有相應的step,如果有,則執行相應的ruby**。

這樣的目錄結構只是推薦的目錄結構,筆者通過反覆的試驗得出了以下結論:對於cucumber而言,除了頂層的features資料夾是強制性的之外,其它目錄結構都不是強制性的,cucumber將對features資料夾下的所有內容進行扁平化(flatten)處理和首字母排序。具體來說,cucumber在執行時,首先將遞迴的執行features資料夾下的所有ruby檔案(其中則包括step檔案),然後通過相同的方式執行feature檔案。但是,如果features資料夾下存在support子資料夾,並且support下有名為env.rb的檔案,cucumber將首先執行該檔案,然後執行support下的其它檔案,再遞迴執行featues下的其它檔案。

比如有如下cucumber目錄結構:

為了方便記錄cucumber執行時的檔案執行順序,在features資料夾下的所有ruby檔案中加上以下**:

puts file.basename(__file__)
此行**的作用是在乙個ruby檔案執行時輸出該檔案的名字,此時執行cucumber命令,得到以下輸出(部分)結果:

上圖即為ruby檔案的執行順序,可以看出,support資料夾下env.rb檔案首先被執行,其次按照字母排序執行c.rb和d.rb;接下來,cucumber將features資料夾下的所用檔案(夾)扁平化,並按字母順序排序,從而先執行a.rb和b.rb,而由於other資料夾排在step_definitions資料夾的前面,所以先執行other資料夾下的ruby檔案(也是按字母順序執行:先f.rb,然後g.rb),最後執行step_definitions下的e.rb。

當執行完所有ruby檔案後,cucumber開始依次讀取feature檔案,執行順序也和前述一樣,即: a.feature --> b.feature --> c.feature

筆者還發現,這些ruby檔案甚至可以位於features資料夾之外的任何地方,只是需要在位於features資料夾之內的ruby檔案中require一下,比如在env.rb中。

Zend Framework1 應用的目錄結構

zend framework建立的應用有自己獨特的結構,這裡講一下乙個web應用具備的基本目錄結構。大體如下 configs配置檔案存放目錄 controllers控制器 errorcontroller.php indexcontroller.php formsform存放目錄 testform.p...

使用SpringBoot的推薦專案目錄結構

一 spring boot 推薦目錄結構 1 層的結構 根目錄 com.springboot 2.實體類 domain 置於com.springboot.domain 3.資料訪問層 dao 置於com.springboot.repository 4.資料服務層 service 置於com,spri...

Tensorflow專案實戰(一) 基本目錄結構

tf 本部落格旨在探索github科研專案的寫法,從而達到能夠快速理解科研專案和自己寫科研專案的目的 初學者,比如我,很難讀懂並理解github上作者的開源 以至於每次只能照辦別人的 頂多就是把別人的搞到能跑,但這並不是所謂的 復現,也很難對原始碼進行改進。有的人說 看多了自然就懂了,寫多了自然就會...