行為驅動開發 - Gherkin



Gherkin 是一種語言,用於編寫特性、場景和步驟。Gherkin 的目的是幫助我們編寫具體的需求。

要理解我們所說的具體需求是什麼意思,請考慮以下示例 -

應阻止客戶輸入無效的信用卡資訊。

對比

如果客戶輸入的信用卡號碼長度不正好為 16 位,當他們嘗試提交表單時,表單應重新顯示並顯示一條錯誤訊息,告知他們正確的位數。

後者沒有歧義,避免了錯誤,並且更易於測試。

Gherkin 旨在建立更具體的需求。在 Gherkin 中,上面的示例如下所示 -

特性

輸入無效信用卡資訊時的反饋 特性定義

在使用者測試中,我們看到許多人犯了錯誤 文件

背景適用於以下所有場景

假設我選擇了一件要購買的商品,

並且我即將輸入我的信用卡號碼

場景 - 信用卡號碼太短場景定義

我輸入一個少於 16 位的卡號

並且所有其他詳細資訊都正確

並且我提交表單步驟

那麼表單應重新顯示

並且我應該看到一條訊息,告知我正確的位數

Gherkin 格式和語法

Gherkin 檔案是純文字檔案,副檔名為 .feature。每個非空行必須以 Gherkin 關鍵字開頭,後跟任意文字。關鍵字如下 -

  • 特性

  • 場景

  • 假設、當、那麼、並且、但是(步驟)

  • 背景

  • 場景大綱

  • 示例

  • """(文件字串)

  • |(資料表)

  • @(標籤)

  • #(註釋)

  • *

特性

特性關鍵字用於描述軟體特性,以及對相關場景進行分組。特性具有三個基本要素 -

  • 關鍵字 – 特性。

  • 特性的名稱,在與特性關鍵字相同的行上提供。

  • 可選的(但強烈推薦)描述,可以跨越多行,即包含特性關鍵字的行與以場景、背景或場景大綱開頭的行之間的所有文字。

除了名稱和描述之外,特性還包含場景或場景大綱列表,以及可選的背景。

通常,透過獲取特性的名稱,將其轉換為小寫並將空格替換為下劃線來命名.feature檔案。例如,

feedback_when_entering_invalid_credit_card_details.feature

為了識別系統中的特性,您可以使用所謂的“特性注入模板”。

為了<實現某個目標>作為<使用者型別>我想要<一個特性>

描述

Gherkin 文件的某些部分不必以關鍵字開頭。

在特性、場景、場景大綱或示例後面的行中,您可以編寫任何內容,只要沒有行以關鍵字開頭即可。這是包含描述的方式。

場景

要表達系統的行為,您需要將一個或多個場景附加到每個特性上。通常每個特性有 5 到 20 個場景來完整地指定該特性的所有行為。

場景遵循以下模式 -

  • 描述初始上下文

  • 描述事件

  • 描述預期結果

我們從上下文開始,描述一個動作,並檢查結果。這是透過步驟完成的。Gherkin 提供三個關鍵字來描述每個上下文、動作和結果作為步驟。

  • 假設 - 建立上下文

  • - 執行操作

  • 那麼 - 檢查結果

這些關鍵字提高了場景的可讀性。

示例

場景 - 從賬戶中取款。

  • 假設我的賬戶中有 100 美元。

  • 我請求 20 美元。

  • 那麼應發出 20 美元。

如果在彼此下方的多個假設步驟,可以使用並且但是。它們允許您詳細指定場景。

示例

場景 - 使用被盜卡嘗試取款。

  • 假設我的賬戶中有 100 美元。

  • 但是我的卡無效。

  • 我請求 50 美元。

  • 那麼我的卡不應該退回。

  • 並且我應該被告知聯絡銀行。

在建立場景時,請記住“每個場景都必須有意義並且能夠獨立於任何其他場景執行”。這意味著 -

  • 您不能使一個場景的成功條件依賴於之前執行的其他某些場景。

  • 每個場景都建立其特定的上下文,執行一項操作,並測試結果。

此類場景提供以下好處 -

  • 測試將更簡單且更容易理解。

  • 您可以只執行測試集的一部分,而不必擔心測試集的破壞。

  • 根據您的系統,您可能能夠並行執行測試,從而減少執行所有測試所需的時間。

場景大綱

如果您必須編寫具有多個輸入或輸出的場景,您最終可能會建立幾個僅值不同的場景。解決方案是使用場景大綱。要編寫場景大綱,

  • 場景大綱步驟中的變數用<和>標記。

  • 變數的各種值作為表中的示例給出。

示例

假設您正在為計算器上的兩個數字相加編寫一個特性。

特性 - 加法。

Scenario Outline: Add two numbers.
Given the input "<input>"
When the calculator is run
Then the output should be <output>"
Examples
| input    | output |
| 2+2      | 4      | 
| 98+1     | 99     |
| 255+390  | 645    |

場景大綱部分之後始終是一個或多個示例部分,它們是表的容器。表必須具有一個標題行,對應於場景大綱步驟中的變數。下面的每一行都將建立一個新場景,填充變數值

廣告