BDDを活用したPythonの自動テスト

BDDの基本概念

BDD(Behavior Driven Development)は、期待される動作に基づいて開発とテストを行う手法です。この方法では、要求仕様が顧客から開発者やテスターに至るまで正確に伝達されるよう設計されています。 例えば、管理画面のログイン機能を以下のように記述できます。

Feature: ユーザ認証システム
  Scenario: 正常なログイン
    Given ユーザ名 admin パスワード abc123
    When 管理画面を開く
    And ユーザ名を入力する
    And パスワードを入力する
    And ログインボタンをクリックする
    Then 画面にはエラーメッセージが表示されない

Scenario: ユーザ名未入力でのログイン試行
    Given ユーザ名未入力 パスワード abc123
    When 管理画面を開く
    And ユーザ名を入力する
    And パスワードを入力する
    And ログインボタンをクリックする
    Then 画面にはエラーメッセージが表示される

Scenario: パスワード未入力でのログイン試行
    Given ユーザ名 admin パスワード未入力
    When 管理画面を開く
    And ユーザ名を入力する
    And パスワードを入力する
    And ログインボタンをクリックする
    Then 画面にはエラーメッセージが表示される

BDDで使用される主要な概念は以下の通りです:

  • Epic: 大規模な機能セットまたはバージョン
  • Feature: 特定の機能点、例:ログイン、商品追加など
  • Scenario: 明確な状況を表すシナリオ
  • Step: シナリオを構成するステップ、Given/When/Then/Andなどで表現

BDDは主にUI層のテストに利用され、Seleniumとの統合が一般的です。

PythonにおけるBDDツール「behave」の使用法

Python向けのBDDフレームワークとして、「behave」が広く使われています。次にその基本的な使い方を説明します。

必要モジュールのインストール

pip install behave selenium

シナリオファイルの作成

featuresディレクトリ内にsearch.featureを作成し、内容は次のようになります。

Feature: 検索機能
  Scenario: キーワード検索
    Given 検索キーワード sample
    When 検索ページを開く
    And キーワードを入力
    And 検索ボタンをクリック
    Then ページタイトルにキーワードが含まれる

ステップ実装

features/steps/search_steps.pyを作成し、各ステップに対応する関数を実装します。

from behave import given, when, then
from selenium import webdriver
import time

@given('検索キーワード {kw}')
def step_impl(context, kw):
    context.search_term = kw

@when('検索ページを開く')
def step_impl(context):
    context.browser = webdriver.Chrome()
    context.browser.get("https://www.example.com")

@when('キーワードを入力')
def step_impl(context):
    search_box = context.browser.find_element_by_name('q')
    search_box.send_keys(context.search_term)

@when('検索ボタンをクリック')
def step_impl(context):
    button = context.browser.find_element_by_id('btn-search')
    button.click()
    time.sleep(1)

@then('ページタイトルにキーワードが含まれる')
def step_impl(context):
    assert context.search_term in context.browser.title

実行とレポート生成

ターミナルでbehaveを実行することでテストを開始します。Allureレポートを使用して結果を視覚化することも可能です。

pip install allure-behave
behave -f allure_behave.formatter:AllureFormatter -o allure_results/
allure generate allure_results/ -o allure_report/

タグ: BDD Python behave Selenium Allure

6月2日 17:04 投稿