產品負責人、業務分析師、程式設計師和測試人員常常對於誰應該承擔什麼責任感到困惑。
答案取決於幾個因素,例如團隊結構、技能、文化、流程等等。
三劍客
三劍客 是一個會議,將使用者故事轉化為清晰、徹底的 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
是對功能預期作用的單句解釋。
因此,這三行涵蓋了為什麼、誰和什麼。然後,文件會透過情境進入「如何」的部分。
情境
一個功能可以有任意數量的情境。
如果一個功能中有大量情境,那麼您實際上可能在描述多個功能。當發生這種情況時,我們建議將文件拆分為單獨的功能定義(此處「大量」的定義是主觀的,由您決定何時應該拆分功能)。
第一行提供了對情境意圖涵蓋內容的簡短描述。如果您無法用單一句子(而不是一個冗長的句子)描述您的情境,那麼它可能試圖涵蓋太多內容,應該拆分為多個情境。
接下來是「步驟」的組合,這些步驟是以關鍵字 Given
、When
和 Then
開頭的行(通常按此順序)。
您可以有多行使用相同的關鍵字(例如,Given there is something
後面跟著 Given I have another thing
)。為了提高可讀性,您可以替換關鍵字 And
或 But
(例如,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
具有相同的含義,因此最好選擇一個,並在您需要登入的每個情境中使用相同的行。