Cucumber是如何工作的?

趙陽陽發表於2019-01-08

BDD 是現在敏捷測試中比較流行的概念,BDD使用自然語言面述測試場景,團隊中各個角色的成員通過自然語言描述的場景來進行溝通,從而提高團隊之間的協作效率。Cucumber是基於BDD的一個優秀框架。

作為一個流行的自動化測試框架,Cucumber 使用易於理解的語法,支援多種自然語言來描述測試用例。這篇文章主要通過介紹Cucumber核心架構和執行細節來解釋“ Cucumber是如何執行的?”這個問題。

Cucumber 專案結構

一個Cucumber專案的結構大致如下:

Cucumber是如何工作的?

它包括如下部分:

Feature檔案(劇本檔案)

測試項的目執行檔案都在features目錄下,以 .feature 結尾的為劇本檔案,一個劇本檔案中可以包含多個場景,一個場景包含多個操作步驟。

下面是一個簡單的feature檔案樣例

# language: zh-CN
功能: 搜尋功能
給定關鍵字進行搜尋,搜尋結果中應包含這些關鍵字。

  場景: bing搜尋
    假如瀏覽器導航到"http://www.bing.com"

複製程式碼

這個feature檔案中包含了一個”bing搜尋”場景,這個場景主要描述了bing搜尋的一般操作流程,根據文件,任何人都可以看懂要做什麼。

使用 .feature 劇本檔案,以場景描述和操作步驟闡述測試的業務,通過這個方式,將業務組合起來。

Step Definitons (步驟定義)

.feature 檔案中描述的業務步驟要執行起來,需要根據業務場景定義操作行為 。具體的業務行為是由相對應的自動化指令碼來實現,這些自動化實現指令碼主要定義在step_definitions 目錄下,例如,操作步驟面述為
根據這個場景生成對的Cucumber自動化程式碼樣例:

Given(/^瀏覽器導航到"([^"]*)"$/, async function(url) {
    await driver.get(url);
});
複製程式碼

根據這些程式碼樣例,只需要將其中的每個操作用自動化程式碼實現即可。
這些自動化程式碼一般存放在 step_definitions 目錄中。

Support Code (支援程式碼)

自動化指令碼在執行的過程中,比如上文中提到的driver,作為瀏覽器的驅動,需要抽象出來,單獨放在一個目錄中,就是 support,這裡還可以定義每個操作步驟執行的超時時間,場景執行前,執行後等這些執行時的設定。

Cucumber測試套件

下面是Cucumber測試套件feature檔案與自動化指令碼檔案之間的對映關係,從(1)開始,其中包含場景(2)和步驟(3)。(4)為場景的呼叫步驟定義,每一個操作步驟與一個自動化實現程式碼對應。

Cucumber是如何工作的?

上圖是一個在CukeTest開發環境中簡單的Cucumber.js自動化測試的示例,其中此步驟定義中的基礎程式碼是JavaScript,而自動化庫是selenium-webdriver。CukeTest是開發Cucumber.js的整合開發環境。Cucumber.js被廣泛採用的一個重要原因是Node.js的廣泛普及,另一個原因是廣泛的自動化工具都全面支援JavaScript、特別是Node.js(如Appium、Selenium、puppeteer等),這些工具覆蓋了各類應用的自動化,包括Web、Android、iOS、API、Windows等等。

執行

Cucumber的劇本檔案和相應的步驟定義位於特定的資料夾結構中,如下所示

Cucumber是如何工作的?

Cucumber(劇本檔案)位於features資料夾中,步驟定義檔案位於step_definitions資料夾中。

Cucumber是一個命令列工具,要執行測試,您必須導航到父資料夾(上例中的“演示資料夾”),然後通過引用“features”資料夾中的位置執行測試。如想在開發環境中編輯除錯Cucumber指令碼,可使用視覺化編輯工具CukeTest,它提供視覺化的feature編輯介面,一鍵生成自動化程式碼樣例, 提供多種測試報告,並可以與多種持續整合工具。

$ cd Desktop/Demo_Folder/
$ ./node_modules/.bin/cucumber.js features/google_Test.feature
複製程式碼

這將執行步驟定義檔案中的特徵檔案和相應的程式碼。如果步驟執行沒有錯誤,Cucumber將繼續執行場景中的下一步。如果它在沒有任何步驟引發錯誤的情況下到達場景的末尾,則會將場景標記為已通過。

如果方案中的任何步驟失敗,Cucumber會將方案標記為失敗並轉到下一個方案。隨著場景的執行,Cucumber會顯示結果,讓您清楚地看到每個操作步驟執行的情況。

總結

現在 Cucumber在越來越多的團隊中開始使用,社群中也越來越多關於Cucumebr相關文件。Cucumber程式碼編輯工具也日漸完善。如果你英文足夠好,可直接閱讀Cucumber的官方文件,github.com/cucumber/cu… 瞭解更多Cucumber內容。

相關文章