Try   HackMD

Cucumber 入門筆記 (BDD自動化測試框架)

tags: publishmynoteblog

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

TOC

觀念介紹

BDD

  • BDD(Behaviour-Driven Development) 是用來發現問題、方便協作和示範,而非測試本身。

BDD is about discovery, collaboration and examples (and not testing).
(Ref: Cucumber: Introduction)

  • Why BDD?

    • TDD 是一種軟體開發流程,先測試再開發
    • TDD 所實作的測試程式碼,可以作為工程師之間討論測試案例或使用情境的基礎
    • 但是對非開發人員,如 PM、PO、Designer 來說,很難透過程式碼去理解想討論的測試案例,也更難根據測試案例進一步討論軟體的功能
  • What's BDD?

    • TDD 是實作前先寫測試
    • BDD 比 TDD 更進一步,在寫測試前還要先寫測試規格,這份測試規格會用更接近人類語意的方式描述軟體功能和測試案例
    • 但是這份規格並不是單純的敘述軟體的功能,而是一份「可以被執行的規格」,也就是可以被轉成自動化測試。

Cucumber

  • Cucumber 是一個支援 BDD 的工具。

  • 可以讀取純文字的 specification 檔案,並驗證軟體是不是符合 Spec 描述。

  • 重要術語:specification, scenario, step

    • 一個 specification 裡包含多個 scenario,每一個 scenario 有很多 step 要完成。
    • (In Cucumber, an example is called a scenario)。
    • specification 是可執行的(executable),使用名叫 Gherkin 的語法來描述。
  • Cucumber 驗證軟體是否符合 specification,並生成一個報告,指示每個 scenario 的成功或❌失敗。

  • 在寫 Production code 前先寫 Scenarios/specification)。

  • 當 Production code 寫好後,Scenarios 擔任文件(living documentation)和自動化測試的角色。

  • Cucumber 三大目的:

    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →

    (Source: Cucumber: Introduction)

Gherkin 描述語法 (feature)

  • 一種簡單的描述語法,用來撰寫 specification。

  • Gherkin 有幾個目的:

    • 能描寫明確可執行的 specification,讓 Cucumber 能看懂,同時具備人類語意可讀性
    • 能透過 Cucumber 進行自動化測試
    • 能文件化系統的實際行為(actually behaves)
  • Gherkin 的撰寫支援許多種人類語言,團隊可以用自己喜歡的語言

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

(Source: Cucumber-java入门基础篇 - chengly0129的专栏 - CSDN博客)

  • Gherkin 文件

    • Scenario 用 Gherkin 的表現形式撰寫
    • 存成副檔名為.feature 的檔案,放在 feature 或其子資料夾底下
    • 一個專案有很多 feature,一個 .feature 檔裡有很多 scenario,一個 scenario 有很多step
    • Gherkin 文件會一起加入版控
  • 誰應該寫 Gherkin

    • 建議是開發人員或 tester
    • PO或業務寫容易適得其反(可能畢竟不像工程師那樣有語法定義的概念)

Step Definitions

  • 為了將 specification 裡的 step 轉換成實作程式語言(e.g., JavaScript, Java)
  • Step Definitions 定義每一個 Gherkin Step 對應的實作(稱為硬連結 hard-wire)
  • 誰應該寫Step Definition:
    • 和寫 Gherkin 同樣的人
    • 這就是為什麼建議 Gherkin 由 developer 或 tester 寫

Step Keywords

Ref: Cucumber: Gherkin Reference - Steps

  • feature 檔裡,每個 Gherkin Step 前面都會配一個關鍵字,例如 Given, When

  • Step 開頭 Keywords:

Keyword Semantics
Given 前置條件的設置
When 發生一個事件
Then 驗證預期結果
And 如果有連續多個 Given,第二個開始可以用 And 更貼近人類語意
But 如果有連續多個 Then,第二個開始可以用 But 更貼近人類語意

PS: AndBut 不是硬性要用

  • Note: 當 Cucumber 在尋找 Gherkin Step 對應的實作程式 (Step Definitions) 時,不會管關鍵字是什麼。
    • 換句話說,不能使用兩個 Keyword 對同一句文法定義 step definition
    • 例如以下會視為重複定義:
Given I log in
Then I log in
  • 換句話說,一個 step 用什麼關鍵字其實不影響程式,只是選擇語意適當的關鍵字更有助於人類閱讀
    • 實際 step 做什麼事,還是看 Step Definitions 的實作內容
    • 硬要的話也可以在 Given 開頭的 step 實作 Then 概念的動作

References