SlideShare a Scribd company logo
1 of 26
Download to read offline
DrupalでBDDテストを
実施してみる②
発表者 K.H
はじめに
前回はBDDの概要やBDDテストの実行環境の作成方法等について解説し
た。今回はテストシナリオの書き方を説明する。
テストシナリオ
テストシナリオはgherkinと呼ばれている言語で記載することができる。
gherkinの特徴は以下
• 自然言語で記載できる
• YAML等と同様にインデントが重要になる
• 行の最初に特別なキーワードを入れる必要がある(後述)
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
Given I am not logged in
When I go to "foobar"
Then I should get a 404 HTTP response
キーワード
行の最初に使用できるキーワードとしては以下がある。
• Feature
• Scenario
• Given
• When
• Then
Feature
Featureは何をしたいのかを簡潔で説明的な文章で記載する。1つのファ
イルで使用できるのは1回のみ。
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
Given I am not logged in
When I go to "foobar"
Then I should get a 404 HTTP response
Scenario
Scenarioでは実行するテストシナリオにタイトルをつけることができ
る。また、Scenarioは1つのファイルに複数記載することができる。
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
Given I am not logged in
When I go to "foobar"
Then I should get a 404 HTTP response
Scenario
Scenarioでタイトルを記載した後にテストケースを記載することができ
る。テストケースは基本的に以下の単語から始める。
• Given
• When
• Then
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
Given I am not logged in
When I go to "foobar"
Then I should get a 404 HTTP response
Scenario
• Given
• 初期条件を定義する
• When
• 実行するアクションを定義する
• Then
• whenで記載した処理を実行したときに期待する結果を定義する
Feature: テストフィーチャー
Scenario: 未ログインで存在しないページを表示
Given I am not logged in
When I go to "foobar"
Then I should get a 404 HTTP response
And
GivenやWhen等を複数行記載する場合はandを使用することができる。
これを使用することでテストシナリオの可読性を上げられる。
Scenario: Multiple Givens
Given one thing
Given another thing
Given yet another thing
When I open my eyes
Then I see something
Scenario: Multiple Givens
Given one thing
And another thing
And yet another thing
When I open my eyes
Then I see something
Givenを複数記載する例 Andに書き換えた例
Drushを使用する場合
一部のテストケースではDrushを使用している。これらのテストケースを
使用する場合は以下の3点に気をつける必要がある。
1. Drushのパスを通していること
2. behat.ymlにDrushの設定を記載する
3. テストシナリオの最初に「@api」をつける
behat.ymlにDrushの設定を記載する
以下3行を追記する。
「root」はDrupal rootのパスとなる。
DrupalDrupalExtension:
blackbox: ~
api̲driver: 'drush'
drush:
root: '/var/www/html/drupal'
テストシナリオに「@api」をつける
以下のようにテストシナリオに「@api」をつける
@api
Scenario: publisher can not create node
Given I am logged in as a "publisher"
When I go to "/node/add/basic"
Then the response status code should be 403
テストケース紹介の前に
これから紹介するテストケースは以下を前提としている。
• Drupalを英語でインストールしていること
• 日本語でインストールしている状態だとエラーになるため
実際のテストケース
今回はwork
fl
owモジュールを使用してwork
fl
owを設定する。その後にそ
の設定になっているかをBDDで確認する。work
fl
owに登場する役割は以
下の2つ。
• writer
• コンテンツを作成することができる
• コンテンツの状態はDraftのみ
• publisher
• コンテンツをDraftからPublishedに変更することができる
• コンテンツを作成することはできない
今回実行するテストケース
以下のテストケースを紹介する。2のテストを実施する場合は事前にDraft
状態のコンテンツを作成する必要がある。
正常系
1. writerでコンテンツを作成できること
2. publisherでコンテンツの公開ができること
writerでコンテンツを作成できること
writerでコンテンツが作成できることのテストケースは以下のようにな
る。
@api
Scenario: writer can create node
Given I am logged in as a "writer"
When I go to "/node/add/basic"
Then I should not see "Published" in the "select" element
And I should see "Draft" in the "select" element
【参考】コンテンツの作成画面
publisherでコンテンツの公開ができること
publisherでコンテンツの公開ができることのテストケースは以下のよう
になる。
@api
Scenario: publisher can change published
Given I am logged in as a "publisher"
When I go to "/node/37"
Then I should see "Published" in the "select" element
And I should see the button "Apply"
【参考】コンテンツの公開画面
小ネタ
ここからは小ネタとして以下を紹介していく。
• 「Given I am logged in as a/an :role」について
• デバッグ方法
• 定義されていないテストケースを記載した場合
• Drupalが日本語の場合どのようなエラーが発生するか
Given I am logged in as a "role"
「Given I am logged in as a "role"」ではランダムなユーザが作成され
る。作成されたユーザはテスト終了後に削除される。
/**
* Creates and authenticates a user with the given
role(s).
*
* @Given I am logged in as a user with the :role role(s)
* @Given I am logged in as a/an :role
*/
public function assertAuthenticatedByRole($role)
{
// Check if a user with this role is already logged in.
if (!$this->loggedInWithRole($role)) {
// Create user (and project)
$user = (object) [
'name' => $this->getRandom()->name(8),
'pass' => $this->getRandom()->name(16),
'role' => $role,
];
$user->mail = "{$user->name}@example.com";
//中略
}
デバッグ方法
「Then (I )break」でテストを一時的に中断してデバッグするができる。
例えば以下のように「 I break」を記載した場合はユーザが作成された状
態で中断する。
@api
Scenario: writer can create node
Given I am logged in as a "writer"
And I break
When I go to "/node/add/basic"
Then I should not see "Published" in the "select" element
And I should see "Draft" in the "select" element
デバッグ方法
中断した状態で管理者でログインしてユーザ一覧を表示するとテスト用の
ユーザが作成されていることが分かる。
定義されていないテストケースを実行した場合
定義されていないテストケースを実行した場合は以下のようにwarnが発
生する。
定義されていないテストケースを実行した場合
コンテキストを選択するとサンプルコードが表示される。このコードを指
定したコンテキストに記載し、処理を追記することでテストケースを定義
することができる。
参考文献
• user guide

More Related Content

More from iPride Co., Ltd.

AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
iPride Co., Ltd.
 

More from iPride Co., Ltd. (20)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
 
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
 
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
 
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
 
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
 
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
 
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものですAWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
 
AWS SAM入門 2024/01/26の勉強会で発表されたものです【アイ・プライド】
AWS SAM入門  2024/01/26の勉強会で発表されたものです【アイ・プライド】AWS SAM入門  2024/01/26の勉強会で発表されたものです【アイ・プライド】
AWS SAM入門 2024/01/26の勉強会で発表されたものです【アイ・プライド】
 
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
 
ChatGPTを用いてCDKを勉強
ChatGPTを用いてCDKを勉強ChatGPTを用いてCDKを勉強
ChatGPTを用いてCDKを勉強
 
OpenID Connectについて
OpenID ConnectについてOpenID Connectについて
OpenID Connectについて
 
画像生成AIの問題点
画像生成AIの問題点画像生成AIの問題点
画像生成AIの問題点
 
AI入門
AI入門AI入門
AI入門
 

Recently uploaded

Recently uploaded (7)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

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