behatエクステンションの作り方

1,840 views

Published on

behatの説明 & behatエクステンションの作り方

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,840
On SlideShare
0
From Embeds
0
Number of Embeds
808
Actions
Shares
0
Downloads
3
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

behatエクステンションの作り方

  1. 1. Behatエクステンション の作り方 @hanhan1978 2015/06/28 PHP Conf Fukuoka 2015
  2. 2. 自己紹介 所属 @hanhan1978 Ryo Tomidokoro Blog : http://hanhans.net/blog/hanhan/
  3. 3. アウトライン 1.Behatについて 2.Behatエクステンションの作り方
  4. 4. 1. Behatについて
  5. 5. Behatについて • BDDテストフレームワーク • Cucumberにinspireされて作られた。 • テストシナリオはGherkin形式 • PHP製
  6. 6. Behatでできること • デフォルト状態では何もない。 • テスト(feature)、アサーション(step)は自分で 作る • extensionを導入して使うことが多い
  7. 7. 主なextension • Mink • Symfony2 • Laravel • CakePHP • Drupal
  8. 8. 最近のトレンド behat phpspec
  9. 9. rspecにはまだまだ及ばない behat phpspec rspec
  10. 10. Behatでテストを作る流れ
  11. 11. 1. Featureを書く # language: en Feature: Do Some Sample Testing Scenario: ls Given I am in the "directory" When I execute "command" Then I should get "file1,file2"
  12. 12. 2. Stepを実装する <?php /** * Defines application features from the specific context. */ class FeatureContext implements Context, SnippetAcceptingContext { /** * @Given I am in the :arg1 */ public function iAmInThe($arg1) { throw new PendingException(); } }
  13. 13. 3. テストを実行する ./bin/behat Feature: Do Some Sample Testing Scenario: ls Given I am in the "directory" TODO: write pending definition When I execute "command" Then I should get "file1,file2" 1 scenario (1 pending) 3 steps (1 pending, 2 skipped) 0m0.06s (9.26Mb)
  14. 14. 作るファイルは最低限2つ .features/ ├── bootstrap │   └── FeatureContext.php └── sample.feature
  15. 15. Minkを使ったウェブアプリのE2E テスト
  16. 16. 1. エクステンションの読み込み default: extensions: BehatMinkExtension: base_url: http://www.yahoo.co.jp/ goutte: ~ suites: default: contexts: - 'BehatMinkExtensionContextMinkContext' paths: features: features bootstrap: %behat.paths.features%/bootstrap
  17. 17. 2. Featureを書く # language : en Feature: stock search Scenario: get stock code Given I am on the homepage When I follow "ファイナンス" When I fill in "searchText" with "九州電力" When I press "searchButton" Then I should see "9508"
  18. 18. 3. テストを実行する .$ ./bin/behat Feature: stock search Scenario: get stock code Given I am on the homepage) When I follow "ファイナンス" When I fill in "searchText" with "九州電力" When I press "searchButton" Then I should see "9508" 1 scenario (1 passed) 5 steps (5 passed) 0m0.77s (13.74Mb)
  19. 19. 作るファイルは最低限3つ . ├─ behat.yml └─ features/ ├── bootstrap │   └── FeatureContext.php └── sample.feature
  20. 20. Behatの良さとは? • PHP製であるということ • featureを書く => stepを書く「直感的」 • テスト作成のコストが低い
 (エクステンション利用)
  21. 21. 2. Behatエクステンション の作成
  22. 22. エクステンションとは? • 実体はstepの集まり • 自作のstepをプロジェクト間で共有する
  23. 23. エクステンションを作る流れ
  24. 24. 1. インタフェースを用意する src ├── Context │   ├── Initializer │   │   └── RestApiAwareInitializer.php │    └── RestApiContext.php └── ServiceContainer └── RestApiExtension.php
  25. 25. 2. 自作エクステンションの読み込み default: extensions: BehatRestApiExtension: base_url: http://127.0.0.1:3000/ suites: default: contexts: - 'BehatRestApiExtensionContextRestApiContext' paths: features: features bootstrap: %behat.paths.features%/bootstrap
  26. 26. 3. RestAPIテスト用拡張Step一覧 $ ./bin/behat -dl default | When /^I set header "([^"]*)" with "([^"]*)"$/ default | When /^I set parameter "([^"]*)" with "([^"]*)"$/ default | When /^I set array parameter "([^"]*)" with "([^"]*)"$/ default | When /^I send GET request to "([^"]*)"$/ default | Then /^I should get json response equal to '([^']*)'$/ default | Then /^the response status code should be (d+)$/ default | Then /^the response content-type should be "([^"]*)"$/ default | When /^I send POST request to "([^"]*)"$/
  27. 27. 4. Featureを書く # language : en # Feature: REST API TEST Scenario: Test GET Request When I set header "Authorization" with "Bearer 12345678" When I set parameter "username" with "hanhan1978" When I send GET request to "get" Then I should get json response equal to '{"user":"hanhan","prof":"PHPer"}' Then the response status code should be 200 Then the response content-type should be "application/json"
  28. 28. 5. テスト実行する Feature: REST API TEST Scenario: Test GET Request When I set header "Authorization" with "Bearer 12345678" When I set parameter "username" with "hanhan1978" When I send GET request to "get" Then I should get json response equal to '{"username":"hanhan1978","profile":"PHPer"}' Then the response status code should be 200 TThen the response content-type should be application/json"
  29. 29. サンプルソース https://github.com/hanhan1978/RestApiExtension
  30. 30. エクステンションを作る意味 • テストstepを共有する • OSSエクステンションによるBehatの普及 • 既存エクステンションへの理解も深まる
  31. 31. まとめ
  32. 32. • Behatは、使い勝手の良いBDDフレームワーク • 操作は直感的。PHP製 • お昼休みとかに試せるよ!
  33. 33. http://hanhans.net/blog/hanhan/2015/06/26/15分で 作れるbehatテスト-e2e編/ http://hanhans.net/blog/hanhan/2015/06/26/behat エクステンション作成/ http://hanhans.net/blog/hanhan/2015/06/26/はじめて のbehat/ 関連Blogポスト

×