SlideShare a Scribd company logo
DrupalでBDDテストを
実施してみる①
発表者 K.H
はじめに
今回はBDDの概要を紹介する。
その後、DrupalにおけるBDDテストの実施方法を紹介する。
TDDとBDD
BDD (behavior driven development) はTDD(test-driven development)から
派生した開発手法。TDDはアジャイル開発で使われる手法でその手法は以
下
• 最初にプログラムに必要な各機能について最初にテストを書く
• その後にそのテストが動作する必要な最低限の実装を行った後、コード
を洗練させる
• これらを繰り返して開発を行う
TDDとBDDの違い
BDDもTDDと同様にテストを実施しながら開発するという点は同じだが
テスト内容が異なる。
• TDD
• 主に単体テストや結合テストを実施する
• BDD
• 主に振る舞いについてテストを行う
BDDにおける振る舞いとは
BDDを提唱している人たちの間でも振る舞いの定義が異なるが、一般的に
はチケットにおける受け入れ基準(完了条件)に相当するものであるとされ
ている。
したがってBDDテストでは受け入れ基準を満たしているかどうかをテスト
する。
DrupalでのBDDテスト
今回は以下のものを使用してDrupalでBDDテストを実行する方法を紹介す
る。
• behat
• 自動テストのフレームワーク
• mink
• 仮想的なwebブラウザ
事前準備
Ubuntu 22.0.4 LTS serverに以下のものをインストールしている前提で説
明する。
• drupal: 9.0.5
• composer: 2.5.4
drupal extensionのインストール
以下のコマンドでdrupal extensionをインストールする。このコマンドで
behatやminkなどBDDテストに必要な物をインストールすることができる
。
$ cd {drupal_root}
$ composer require drupal/drupal-extension --dev
※drupalがインストールされているディレクトリをdrupal_rootとして説明する。
behatの設定ファイル作成
drupal rootにbehat.ymlを作成
する。
base_urlは環境に合わせて変
更する必要がある。
default:
suites:
default:
contexts:
- FeatureContext
- DrupalDrupalExtensionContextDrupalContext
- DrupalDrupalExtensionContextMinkContext
- DrupalDrupalExtensionContextMessageContext
- DrupalDrupalExtensionContextDrushContext
extensions:
DrupalMinkExtension:
goutte: ~
selenium2: ~
base_url: http://localhost/
DrupalDrupalExtension:
blackbox: ~
behatの初期化
以下のコマンドを実行してbehatを初期化する。
$ cd {drupal_root}
$ vendor/bin/behat --init
初期化後featuresディレクトリが作成されていることを確認する。
{drupal_root}
├── behat.yml
├── composer.json
├── composer.lock
├── features
├── vendor
└── web
テストシナリオを作成する
前述のfeaturesディレクトリにテストシナリオを作成する。テストシナリ
オは以下のように自然言語で記載することができる。
テストシナリオの詳細については後日解説する。
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
Given I am not logged in
When I go to "foobar"
Then I should get a 404 HTTP response
test.feature
テストを実行する
テストの実行コマンド及び実行結果は以下のようになる。
$ cd {drupal_root}
$ vendor/bin/behat features/test.feature
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示 # features/test.feature:4
Given I am not logged in # DrupalDrupalExtensionContextDrupalContext::assertAnonymousUser()
When I go to "foobar" # DrupalDrupalExtensionContextMinkContext::visit()
Then I should get a 404 HTTP response # DrupalDrupalExtensionContextMinkContext::assertHttpResponse()
1 scenario (1 passed)
3 steps (3 passed)
0m0.16s (14.67Mb)
テストがNGの場合
テストがNGの場合は以下のように表示される。
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示 # features/test.feature:4
Given I am not logged in # DrupalDrupalExtensionContextDrupalContext::assertAnonymousUser()
When I go to "foobar" # DrupalDrupalExtensionContextMinkContext::visit()
Then I should get a 200 HTTP response # DrupalDrupalExtensionContextMinkContext::assertHttpResponse()
Current response status code is 404, but 200 expected. (BehatMinkExceptionExpectationException)
--- Failed scenarios:
features/test.feature:4
1 scenario (1 failed)
3 steps (2 passed, 1 failed)
0m0.25s (14.77Mb)
自然言語でテストが実行できる理由
よく使われる機能はPHPコードとして定義されておりbehatを実行すると
そのPHPコードが実行される。
class DrupalContext extends RawDrupalContext implements TranslatableContext
{
/**
* @Given I am an anonymous user
* @Given I am not logged in
* @Then I log out
*/
public function assertAnonymousUser()
{
// Verify the user is logged out.
$this->logout(true);
}
//中略
}
定義されているテストケース
定義されているテストケースは以下のコマンドで確認することができる。
$ {drupal_root}/vendor/bin/behat -dl
default | Given I am an anonymous user
default | Given I am not logged in
default | Then I log out
default | Given I am logged in as a user with the :role role(s)
default | Given I am logged in as a/an :role
default | Given I am logged in as a user with the :role role(s) and I have the following fields:
default | Given I am logged in as :name
まとめ
今回はDrupalでBDDテストを実行する方法を紹介した。次回以降でテスト
シナリオについて詳細を説明する。
参考文献
• 駆動開発が多すぎる件
• TDD(テスト駆動開発)とは?開発手法、メリットをわかりやすく解説
• TDD/BDDにおける「振る舞い」の意味するところとは何なのか
• Testing your site with the Drupal Extension to Behat and Mink
• How to use behavior-driven development in Drupal with Behat
• docomoinnovations/drupalextension
• Drupal 8 に Drupal 向け Behat のスタンドアロンでの導入とシンプルなテストシナリオの作成

More Related Content

PDF
DrupalでBDDテストを 実施してみる②
PPTX
Behat Driven Development
PDF
Symfony2 Behat/BDD (#Symfony2study 4)
PDF
Behatで行う、E2Eテスト入門
PDF
Drupal 8 へのスタンドアロン behat の導入
PPTX
Perlでbdd
PPTX
Python製BDDツールで自動化してみた
PDF
phpspecで始めるBDD
DrupalでBDDテストを 実施してみる②
Behat Driven Development
Symfony2 Behat/BDD (#Symfony2study 4)
Behatで行う、E2Eテスト入門
Drupal 8 へのスタンドアロン behat の導入
Perlでbdd
Python製BDDツールで自動化してみた
phpspecで始めるBDD

More from iPride Co., Ltd. (20)

PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
PPTX
色について.pptx .
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
PPTX
やってみた!OpenAI Function Calling 入門 .
PPTX
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
PDF
Drupal10 Theme Starterkit入門.pdf .
PDF
サイクリングはいいぞ .
PDF
DDEVでらくらくDrupalローカル環境構築。2025/2/28の勉強会で発表されたものです。
PDF
DeepSeekの紹介( 2025/2/21の勉強会で発表されたものになります)
PPTX
Azure で RDB を作成してみた (2024/12/20 の勉強会で発表)
PPTX
vi / vim の基本コマンドについて(2024/12/20 の勉強会で発表)
PPTX
WebAuthnについてのざっくり説明[2024/10/25]の勉強会で発表されたものです。
PPTX
AWSの勉強、AWS S3編。2024/10/11の勉強会で発表されたものです。
PPTX
AWSの勉強リージョン編  2024/09/27の勉強会で発表されたものです。
PPTX
AWSサポートに学ぶ、エラーなどの報告をする際のコツ(2024/09/13 勉強会)
PPTX
最近のDrupalバージョンアップで起きた問題まとめ(2024/09/13 勉強会)
PPTX
AWSとIPv6 2時間目  2024/09/06の勉強会で発表されたものです。
PPTX
AWSとIPv6       2024/08/30の勉強会で発表されたものです。
PPTX
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
色について.pptx .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
やってみた!OpenAI Function Calling 入門 .
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
Drupal10 Theme Starterkit入門.pdf .
サイクリングはいいぞ .
DDEVでらくらくDrupalローカル環境構築。2025/2/28の勉強会で発表されたものです。
DeepSeekの紹介( 2025/2/21の勉強会で発表されたものになります)
Azure で RDB を作成してみた (2024/12/20 の勉強会で発表)
vi / vim の基本コマンドについて(2024/12/20 の勉強会で発表)
WebAuthnについてのざっくり説明[2024/10/25]の勉強会で発表されたものです。
AWSの勉強、AWS S3編。2024/10/11の勉強会で発表されたものです。
AWSの勉強リージョン編  2024/09/27の勉強会で発表されたものです。
AWSサポートに学ぶ、エラーなどの報告をする際のコツ(2024/09/13 勉強会)
最近のDrupalバージョンアップで起きた問題まとめ(2024/09/13 勉強会)
AWSとIPv6 2時間目  2024/09/06の勉強会で発表されたものです。
AWSとIPv6       2024/08/30の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
Ad

DrupalでBDDテストを実施してみる①