誰應該編寫 Gherkin 文件,而誰應該編寫 步驟定義

產品負責人、業務分析師、程式設計師和測試人員常常對於誰應該承擔什麼責任感到困惑。

答案取決於幾個因素,例如團隊結構、技能、文化、流程等等。

三劍客

三劍客 是一個會議,將使用者故事轉化為清晰、徹底的 Gherkin 情境。它至少涉及三種聲音:

  • 產品負責人 - 這個人最關心應用程式的範圍。這涉及將使用者故事轉化為一系列的功能。當測試人員提出邊緣案例時,產品負責人負責決定哪些內容在範圍內。
  • 測試人員 - 這個人將產生大量的情境和大量的邊緣案例。應用程式會如何崩潰?在這些功能中,我們沒有考慮到哪些使用者故事?
  • 開發人員 - 這個人將在情境中加入許多步驟,並思考每個需求中的細節。這個應用程式將如何執行?幕後有哪些障礙或需求?

這些對話可以產生出色的測試,因為每個劍客都從不同的角度看待產品。因此,至關重要的是,所有這些角色都要進行對話,一起發現範例。範例對應 和事件風暴是發現範例的絕佳協作分析技術。

最後,沒有理由將這些會議限制在三個人,或者只在專案開始時舉行一次這樣的會議。不斷完善您的功能,並與所有人協作,以最好地了解如何談論、開發和測試您的應用程式。

編寫 Gherkin

首先,當情境中使用的語言和風格仍在建立時,建議整個團隊協作編寫 Gherkin。之後,可以由一對人員有效完成:開發人員(或負責自動化的人員)和測試人員(或負責品質的人員),只要他們的輸出經過產品負責人(或業務代表)的積極審查即可。

編寫功能

Cucumber 測試是根據「功能」編寫的。每個功能都由一個或多個「情境」組成。

讓我們從一個範例功能檔案開始

Feature: Explaining Cucumber
  In order to gain an understanding of the Cucumber testing system
  As a non-programmer
  I want to have an overview of Cucumber that is understandable by non-geeks

  Scenario: A worker seeks an overview of Cucumber
    Given I have a coworker who knows a lot about Cucumber
    When I ask my coworker to give an overview of how Cucumber works
    And I listen to their explanation
    Then I should have a basic understanding of Cucumber

請注意,情境不會深入探討軟體(或在本例中,同事)將做什麼的細節。它專注於該功能旨在服務的人員(在本例中,「非程式設計師」)的角度。

每個功能檔案的頂部都有一個功能描述,但可以有任意數量的情境。

Feature 行命名了功能。這應該是一個簡短的標籤。

In order to 呈現了擁有該功能的原因/理由。一般而言,這應該與專案的核心目的或「業務價值」之一相符,例如

  • 保護收入
  • 增加收入
  • 管理成本
  • 提升品牌價值
  • 讓產品與眾不同
  • 為您的客戶提供更多價值

As a 描述了該功能服務的人員/使用者的角色。

I want 是對功能預期作用的單句解釋。

因此,這三行涵蓋了為什麼、誰和什麼。然後,文件會透過情境進入「如何」的部分。

情境

一個功能可以有任意數量的情境。

如果一個功能中有大量情境,那麼您實際上可能在描述多個功能。當發生這種情況時,我們建議將文件拆分為單獨的功能定義(此處「大量」的定義是主觀的,由您決定何時應該拆分功能)。

第一行提供了對情境意圖涵蓋內容的簡短描述。如果您無法用單一句子(而不是一個冗長的句子)描述您的情境,那麼它可能試圖涵蓋太多內容,應該拆分為多個情境。

接下來是「步驟」的組合,這些步驟是以關鍵字 GivenWhenThen 開頭的行(通常按此順序)。

您可以有多行使用相同的關鍵字(例如,Given there is something 後面跟著 Given I have another thing)。為了提高可讀性,您可以替換關鍵字 AndBut(例如,Given there is something 後面跟著 And I have another thing)。

一般而言,任何 Given 步驟行都應該只描述一件事。如果您的步驟中間有像「和」這樣的詞,您可能在描述多個步驟,應該將其拆分為多個步驟。

例如

	When I fill in the "Name" field and the "Address" field

變成

	When I fill in the "Name" field
	And I fill in the "Address" field

Cucumber 功能最好以一致性為基礎。不要以不同的方式說同一件事 - 每次都以相同的方式說。

例如

	Given I am logged in

	Given I have logged in to the site

具有相同的含義,因此最好選擇一個,並在您需要登入的每個情境中使用相同的行。

您可以幫助我們改進此文件。編輯此頁面