Python 實現行為驅動開發 (BDD) 自動化測試詳解

WanWuJieKeLian發表於2024-07-27

在當今的軟體開發領域,行為驅動開發(Behavior Driven Development,BDD)作為一種新興的測試方法,逐漸受到越來越多開發者的關注和青睞。Python作為一門功能強大且易於使用的程式語言,在實現BDD方面也有著獨特的優勢。那麼,如何利用Python實現BDD自動化測試呢?本文將為你詳細解析。

如何用Python高效地實現行為驅動開發(BDD)自動化測試?有哪些工具和方法可以幫助我們在實際專案中應用BDD?

Behave 作為一種支援python編寫行為驅動開發的工具,透過將測試用例用自然語言編寫,降低了技術門檻,促進了團隊協作。結合步驟定義和測試執行器,Behave 可以方便地整合到自動化測試框架中,為各類應用的測試提供支援。無論是 Web 應用、移動應用還是 API 測試,Behave 都能提供強大的功能和靈活的擴充套件性,是自動化測試的不二選擇

什麼是BDD?

行為驅動開發 (BDD, Behavior-Driven Development) 是一種軟體開發過程,旨在透過鼓勵協作和溝通,提高軟體質量。BDD 的核心理念是用自然語言描述軟體的行為,使得業務人員、開發人員和測試人員都能參與其中。BDD 是由測試驅動開發 (TDD, Test-Driven Development) 演變而來的,強調從業務價值和使用者需求出發來編寫測試。BDD 使用自然語言編寫測試用例,能夠更加容易理解和維護。


Python 實現行為驅動開發 (BDD) 自動化測試詳解

BDD 的主要組成部分包括:

1.特性 (Feature)

描述軟體的一部分功能,比如:使用者登入功能

2.場景 (Scenario)

描述特性中的具體情景或用例,每個場景包含一系列步驟。比如:成功登入和失敗登入

3.步驟 (Steps)

描述具體的操作和預期結果,使用 Given-When-Then 語法。

  • Given 使用者在登入頁面

  • When 使用者輸入有效的使用者名稱和密碼

  • Then 使用者應看到主頁

Behave: 類似 Cucumber 的 Python BDD 框架

在業界中Cucumber是非常流行的適合BDD的框架,但是Cucumber 本身並不直接支援 Python,Python社群有一個類似的工具叫做 Behave,它是一個專為 Python 設計的 BDD 框架,功能和使用方式與 Cucumber 非常相似。它允許你用自然語言編寫測試用例。這些測試用例稱為“特性檔案” (Feature Files),使用的是一種叫做 Gherkin 的語法。Gherkin 語法簡單易懂,可以讓非技術人員也能參與編寫測試用例。在自動化測試領域中結合Behave BDD框架有著十分廣泛的應用:

  1. Web 應用自動化測試

  • 使用 Selenium 等工具,結合 Behave 實現 Web 應用的端到端自動化測試。

2.App應用自動化測試:

  • 結合 Appium,使用 Behave 編寫和執行移動端應用自動化測試。

3.介面自動化測試:

  • 使用 requests 等工具,結合 Behave 實現介面自動化測試。

Behave使用

1、安裝 Behave

使用 pip 安裝 Behave:

pip install behave

2、安裝自動化測試對應的庫

比如web應用自動化測試selenium:

pip install selenium

3、建立python專案,目錄結構參考如下:

Python 實現行為驅動開發 (BDD) 自動化測試詳解

my_bdd_project/
|-- features/
|   |-- steps/
|   |   |-- login_steps.py
|   |-- login.feature
|-- tests/
|   |-- test_runner.py

4、定義特性檔案

特性檔案使用 Gherkin 語法編寫,用來描述具體的測試用例。場景是特性檔案中的一部分,每個場景包含一系列的步驟,用於模擬使用者行為並驗證預期結果。場景使用 Gherkin 語法編寫,通常包含三個部分:Given(假設)、When(當)和 Then(那麼)。

例如,建立一個 login.feature 檔案,內容如下:

Feature: 使用者登入功能

  Scenario: 成功登入
    Given 使用者在登入頁面
    When 使用者輸入有效的使用者名稱和密碼
    Then 使用者應看到主頁

  Scenario: 登入失敗
    Given 使用者在登入頁面
    When 使用者輸入無效的使用者名稱和密碼
    Then 使用者應看到錯誤訊息

5、編寫步驟定義

步驟定義是將 Gherkin 語法對映到具體的程式碼實現,每個步驟對應一個方法,方法中包含具體的測試邏輯。例如,使用 behave 和 Selenium 實現上述特性檔案中的步驟:

建立 login_steps.py 檔案,內容如下:​​​​​​​

 1 from behave import given, when, then
 2 from selenium import webdriver
 3 from selenium.webdriver.common.by import By
 4 
 5 @given('使用者在登入頁面')
 6 def step_given_user_on_login_page(context):
 7     context.driver = webdriver.Chrome()
 8     context.driver.get('http://example.com/login')
 9 
10 @when('使用者輸入有效的使用者名稱和密碼')
11 def step_when_user_enters_valid_credentials(context):
12     context.driver.find_element(By.ID, 'username').send_keys('valid_username')
13     context.driver.find_element(By.ID, 'password').send_keys('valid_password')
14     context.driver.find_element(By.ID, 'submit').click()
15 
16 @then('使用者應看到主頁')
17 def step_then_user_should_see_home_page(context):
18     assert 'Home' in context.driver.title
19 
20 @when('使用者輸入無效的使用者名稱和密碼')
21 def step_when_user_enters_invalid_credentials(context):
22     context.driver.find_element(By.ID, 'username').send_keys('invalid_username')
23     context.driver.find_element(By.ID, 'password').send_keys('invalid_password')
24     context.driver.find_element(By.ID, 'submit').click()
25 
26 @then('使用者應看到錯誤訊息')
27 def step_then_user_should_see_error_message(context):
28     error_message = context.driver.find_element(By.ID, 'error').text
29     assert 'Invalid username or password' in error_message

6、執行測試

在專案根目錄下執行 behave 命令,執行測試:​​​​​​​

 1 PS D:\workspace_pycharm\my_bdd_project> behave
 2 Feature: 使用者登入功能 # features/login.feature:1
 3 
 4   Scenario: 成功登入       # features/login.feature:3
 5     Given 使用者在登入頁面      # features/steps/login_steps.py:7
 6     When 使用者輸入有效的使用者名稱和密碼 # features/steps/login_steps.py:14
 7     Then 使用者應看到主頁       # features/steps/login_steps.py:20
 8 
 9   Scenario: 登入失敗       # features/login.feature:8
10     Given 使用者在登入頁面      # features/steps/login_steps.py:7
11     When 使用者輸入無效的使用者名稱和密碼 # features/steps/login_steps.py:24
12     Then 使用者應看到錯誤訊息     # features/steps/login_steps.py:30
13 
14 1 feature passed, 0 failed, 0 skipped
15 2 scenarios passed, 0 failed, 0 skipped
16 6 steps passed, 0 failed, 0 skipped, 0 undefined
17 Took 0m13.667s

或者可以在tests目錄下新建test_runner.py檔案:​​​​​​​

import os
import subprocess

def run_behave_tests():
    result = subprocess.run(['behave'], cwd=os.path.join(os.path.dirname(__file__), '../features'))

if __name__ == "__main__":
    run_behave_tests()

再執行命令:

python tests/test_runner.py

Python 實現行為驅動開發 (BDD) 自動化測試詳解

透過本文的介紹,我們瞭解了Python在BDD自動化測試中的應用,從基本概念到具體實現,再到實際案例,全面覆蓋了BDD測試的方方面面。掌握這些知識,不僅能夠提升你的測試技能,也有助於在專案中更好地應用BDD方法。

BDD不僅是一種測試方法,更是一種思維方式。利用Python實現BDD自動化測試,讓你的開發流程更加高效和可靠。


相關文章