BDD的自動化測試方式與實務建議
這篇文章主要用一個 Python為範例說明如何建置 BDD 的測試
主要過程分為四大步驟, 安裝環境, 定義use case (features), 根據每一個 use case 編寫對應的自動化程式, 最後執行
最後筆者針對實務上做一些分享, 實務上筆者其實並不建議. 為什麼呢?
什麼是 BDD (behavior-driven development)
Behavior Testing 最開始的初衷是希望將每一個功能透過使用者場景的描述方式
Given …. When….Then….等方式進行測試
一來可以確定原始需求的場景是否被滿足,
二來可以讓測試結果更容易閱讀. 所有團隊相關人, 包含非技術人員 ,
也可以透過每個場景描述就可以知道測試的結果
第一步: 安裝環境 Behave
BDD每個程式語言都有相對應的套件, 這邊我們使用的是 Python Behave的 BDD 測試套件
pip install behave |
第二步: 定義 Feature場景
我們用兩個數字相加為例子, Given, When, Then, 描述這個功能
檔名myBehave.feature
[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]
Feature: My first behave feature
Scenario: Add two numbers
Given I have two integers a and b
When I add the numbers
Then I print the addition result
[/pastacode]
第三步: 執行程式碼
接著就要對上述步驟進行程式編碼 , 告訴電腦 “I have two integers a and b”所相對應執行的程式碼為何
檔名mybehave.py
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
from behave import *
use_step_matcher("re")
@given("I have two integers a and b")
def step_impl(context):
context.a = 1
context.b = 2
@when("I add the numbers")
def step_impl(context):
context.sum = int(context.a) + int(context.b)
@then("I print the addition result")
def step_impl(context):
print("Sum of", context.a, "and", context.b, "is:",context.sum)
[/pastacode]
第四步: 執行
behave myBehave.feature |
BDD實務上是否還存在?
這個例子可以看出來 BDD 簡單來說就是將
Feature (use case ) 描述與程式碼轉換的過程
優點是執行結果大家都可以看懂, 因為場景用 Given When, Then 的方式描述
但是適不適合實務上廣泛的使用, 筆者並不推薦
為什麼呢?
1. 試問產品經理是否會按照 Given, When, Then 的方式描述每一個場景呢? ,就算會那麼重複被用到的場景描述機率多大呢?
如果每次描述方式都不同, 那麼也意味著每次程式碼的對應都要重新撰寫
2. 如果只是為了測試結果更容易了解與閱讀, 那麼其實在測試結果輸出時, 建議可以用更多註解的方式將場景描述即可
讓程式可讀性與更容易維護. 不一定要為了 BDD 而 BDD, 畢竟整個自動化測試的維護性與可讀性的考量
3. 不使用 Behave BDD 就表示沒有 BDD testing嗎? 也不盡然
只要每個場景與測試個案都可以有所連結與追蹤就達到 BDD 精神
這或許也說明筆者實務上比較少見 Python Behave, Java JBehave等