Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Drupal 8 へのスタンドアロン behat の導入

168 views

Published on

Drupal Meetup Tokyo Dec.2016 で発表した内容です。

Published in: Software
  • Be the first to comment

  • Be the first to like this

Drupal 8 へのスタンドアロン behat の導入

  1. 1. Drupal8 へのスタンドアロンBehat の導入 TomKonda
  2. 2. Behat とは PHP で動作するBDD のテストフレームワーク Wordpress、Laravel、Moodleなど各種PHP フレームワーク対応 もちろんDrupal向けも存在
  3. 3. Drupal向けBehat のスタンドアロンインストール Drupal向けBehat のインストール手順 i. Behat 用のディレクトリの作成 ii. Composer を利用して、必要パッケージの導入 iii. Behat の設定 基本的にDrupal向けBehat のインストールガイドに沿えばOK https://behat‑drupal‑ extension.readthedocs.io/en/3.1/localinstall.html
  4. 4. Behat 用のディレクトリの作成 適当なディレクトリにBehat のテストを行うディレクトリの作成 cd /path/to/behat/ mkdir behat-tests cd behat-tests
  5. 5. Composer を利用して、必要パッケージの導入 Composer で必要なモジュールを導入 日本国内なら、いわゆる『光遅い問題』への対処がベター 必要なモジュールを記述するため、composer.jsonの作成 touch composer.json
  6. 6. 必要なモジュールの記述 Behat のインストールマニュアルのまま記述 { "require": { "drupal/drupal-extension": "~3.0", "guzzlehttp/guzzle" : "^6.0@dev" }, "config": { "bin-dir": "bin/" } }
  7. 7. 必要なモジュールのインストール Composer でパッケージのインストール composer install
  8. 8. Behat の設定 Behat の設定を記述するため、behat.ymlの作成 touch behat.yml
  9. 9. Behat の設定の記述 公式サイトのドキュメントを参考にDrupalサーバのアドレス設定 default: suites: default: contexts: - FeatureContext - DrupalDrupalExtensionContextDrupalContext - DrupalDrupalExtensionContextMinkContext - DrupalDrupalExtensionContextMessageContext - DrupalDrupalExtensionContextDrushContext extensions: BehatMinkExtension: goutte: ~ selenium2: ~ base_url: http://drupal-server-addr.example.com/ DrupalDrupalExtension: blackbox: ~
  10. 10. Behat の設定の初期化 以下のコマンドでBehat の初期化の実行 ./bin/behat --init
  11. 11. Behat のインストール成否の確認 Behat 用ディレクトリの下に FeatureContext.php があれば成功 成功していれば定義済みの命令一覧が以下のコマンドで表示 ./bin/behat -dl --lang en default | Given I am an anonymous user default | Given I am not logged in 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) default | Given I am logged in as :name (省略)
  12. 12. Behat 定義済みの命令一覧について  --lang en で英語表示がオススメ  Given や When 、 Then が日本語化されると分かりづらい 英語以外だと他のBehat のテストスクリプトが読みづらい
  13. 13. Behat のテストスクリプトの流れ # Feature 名 Feature: Feature Name # Scenario 名 Scenario: Scenario Name # シナリオの中身 Given hogehoge When foobar Then xyzzy 1. Givenで前提条件の記述 例: GivenI amananonymous user 2. Whenでこれから行う動作の記述 例: I goto"admin/content" 3. Thenで期待される結果の記述 例: Thentheresponsestatus codeshouldbe403
  14. 14. Behat テストスクリプトの作成 テストスクリプトの作成場所 ‑ /path/to/behat/behat-tests/features に作成 拡張子は *.feature  今回は、 test.feature というファイルで作成 touch features/test.feature
  15. 15. 作成するテストシナリオ このシナリオに合致する、定義済み命令を一覧から探す Feature 名 テストフィーチャー シナリオ名 未ログインで存在しないページを表示 前提条件 ユーザはログインしていない 行う動作 foobar にアクセス 期待する結果 HTTP ステータスコードが404 になる
  16. 16. 作成するファイル # Feature 名 Feature: テストフィーチャー # Scenario 名 Scenario: 未ログインで存在しないページを表示 # シナリオの中身 Given I am not logged in When I go to "foobar" Then the response status code should be 404
  17. 17. テストスクリプトの実行 テストを実行する時は、下記のコマンド実行 テストスクリプトがすべて実行 ./bin/behat Feature: テストフィーチャー Scenario: 管理者でユーザ一覧を表示 # features/test Given I am not logged in # DrupalDrupal When I go to "foobar" # DrupalDrupal Then the response status code should be 404 # DrupalDrupal 1 個のシナリオ (1 個成功) 3 個のステップ (3 個成功) 0m1.09s (12.85Mb)
  18. 18. 定義されていない命令を書いてしまった場合 エラーメッセージで定義の追加の仕方が表示 拡張を行う場合はこれを参考に追加するとベター ./bin/behat Feature: テストフィーチャー Scenario: 未ログインで存在しないページを表示 (中略) 1 個のシナリオ (1 個未定義) 3 個のステップ (2 個成功, 1 個未定義) 0m0.69s (12.76Mb) --- FeatureContext のステップが見つかりません。 次のスニペットで定義でき /** * @Then Then the response status code should be :arg1 */ public function thenTheResponseStatusCodeShouldBe($arg1 { throw new PendingException(); }
  19. 19. まとめ Drupal向けのBehat のスタンドアロンでの導入方法を示した 簡単なテストスクリプトの作成方法を示した DrupalでのBDD テストの第一歩を踏み出せるようになった

×