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/