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.
Text
Codeception テストの活用
(TDD)—>Test Driven Development
アジェンダ
自己紹介
Codeception紹介
テストタイプ
デモとハンズオン
Best Practices
リファレンス
質問(Q&A)
@phpcon_kansai
#phpkansai
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
この外国人って誰?
Batard Florent (28 歳)(Shenril)
Twitter: @shenril
Facebook: Florent Btd
セキュリティエンジニア (ハッカー)
フランス人
フランス、スイス、アメリカ、イギ...
何でスピーカーになった?
実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。...
何でスピーカーになった?
実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。...
何でスピーカーになった?
実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。...
何でスピーカーになった?
実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。...
ベスト会社!
クックビズ株式会社
すごいチーム
すごい課題
ベスト会社!
クックビズ株式会社
すごいチーム
すごい課題
ベスト会社!
クックビズ株式会社
すごいチーム
すごい課題
前提条件を減らします->何かを仮定すれば、それは絶対失敗
します
機能後退(リグレッション)がないことを確認
コードが期待通りに動いているか確認
境界値テスト (セキュリティ,大きいデータ)
繰り返し作業を自動化 -> Good develop...
しかし…
だいたい開発者はテストを書くことが好
きじゃない
実行するには長すぎます
ビジネスロジックやユーザーシナリオと
合ってない
CodeCeption(1)
http://codeception.com/ (English)
テストフレームワーク
Acceptance Tests
Functional Tests
Unit Tests
簡単
書きやすい
読みやすい
デバ...
CodeCeption(2)
BDDテスト(ビヘイビア駆動開発スタイルのシナリオ作成)
WebServices テスト出来る (SOAP/REST/XML-RPC)
レポートを生成(HTML/XML/JSON)
Laravel/Zend/Pha...
どんな感じですか?
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('create wiki page');
$I->amOnPage('/');
$I->click('Pages'...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
テストタイプ
Acceptance
Tests
Functional
Tests
Unit Tests
Yii2 BackendFrontend
Browser
Selenium
PhantomJS
HTML
HTML
$_GET,$_POST...
Acceptance Tests
リクエスト出来る、DOMさわれる
クエリを実行するために偽のブラウザを使用して
クリックとか、フォームを埋めることができます
JavaScriptとスクリーンショットを確認するために
Selenium/ Pha...
Functional Tests
Acceptance testsと一緒けどブラウザを使ってない
フレームワークにプラグインすることができ、直接内部関
数やプロパティにアクセスします (Models, validation)
$_REQUEST...
Unit Tests
Functionsのテスト
フレームワークにプラグインすることができ、直接内部関数やプロ
パティにアクセスします (Models, Validation)
一番早い
MVCでやりにくい
人間で読みにくい。。
コードレビュー...
インストール
Mac OSX:
brew update && brew install homebrew/php/codeception
Linux:
wget http://codeception.com/codecept.phar .
ph...
Bootstrap
>codecept bootstrap
>codecept generate:cept acceptance Validation
設定ファイル : tests/acceptance.suite.yml
class_name...
パーティー始めましょう
>codecept run
>codecept run —debug
Bonus
>codecept generate:scenarios acceptance //英語シナリオ
>codecept console ac...
デモ タイム!!!!!
> PHP conference Kansai サイトをテストしよう!
Best practices
1. ローカル/Vagrantでテストして -> テストに合格出来たらGIT PUSH
2. テストサーバーでデプロイして -> もう一回テストをして(環境)
3. テストサーバーでテストに合格出来たら本番に展開し...
まとめ
Installation : http://codeception.com/install
Acceptance Tests : http://codeception.com/docs/04-AcceptanceTests
Yii2 m...
募集中
PHP Developers
iOS Developers
Let’s work together !!!!
Questions & Answers
Do you have any questions?
PHP Codeception テスト -- 日本語
Upcoming SlideShare
Loading in …5
×

PHP Codeception テスト -- 日本語

9,504 views

Published on

Codeceptionテスト
やっと辛く無いテスト!

Published in: Software
  • Be the first to comment

PHP Codeception テスト -- 日本語

  1. 1. Text Codeception テストの活用 (TDD)—>Test Driven Development
  2. 2. アジェンダ 自己紹介 Codeception紹介 テストタイプ デモとハンズオン Best Practices リファレンス 質問(Q&A) @phpcon_kansai #phpkansai
  3. 3. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  4. 4. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  5. 5. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  6. 6. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  7. 7. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  8. 8. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  9. 9. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  10. 10. この外国人って誰? Batard Florent (28 歳)(Shenril) Twitter: @shenril Facebook: Florent Btd セキュリティエンジニア (ハッカー) フランス人 フランス、スイス、アメリカ、イギリス、日本に住んでた 日本が大好き、特に関西:食べ物、人、空気 日本語はまだ勉強中。。すみません
  11. 11. 何でスピーカーになった? 実務経験: W3C 国連(セキュリーティ) プライベート·バンキング スイステレビ放送(Eurovision) ヨーロッパでスピーカーしました だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。) OWASPメンバー (ウェブセキュリティプロジェクト) 10年間ウェブ開発者 DevOps ,サーバー,インフラ,AI いつも新しいことをやりたい
  12. 12. 何でスピーカーになった? 実務経験: W3C 国連(セキュリーティ) プライベート·バンキング スイステレビ放送(Eurovision) ヨーロッパでスピーカーしました だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。) OWASPメンバー (ウェブセキュリティプロジェクト) 10年間ウェブ開発者 DevOps ,サーバー,インフラ,AI いつも新しいことをやりたい
  13. 13. 何でスピーカーになった? 実務経験: W3C 国連(セキュリーティ) プライベート·バンキング スイステレビ放送(Eurovision) ヨーロッパでスピーカーしました だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。) OWASPメンバー (ウェブセキュリティプロジェクト) 10年間ウェブ開発者 DevOps ,サーバー,インフラ,AI いつも新しいことをやりたい
  14. 14. 何でスピーカーになった? 実務経験: W3C 国連(セキュリーティ) プライベート·バンキング スイステレビ放送(Eurovision) ヨーロッパでスピーカーしました だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。) OWASPメンバー (ウェブセキュリティプロジェクト) 10年間ウェブ開発者 DevOps ,サーバー,インフラ,AI いつも新しいことをやりたい
  15. 15. ベスト会社! クックビズ株式会社 すごいチーム すごい課題
  16. 16. ベスト会社! クックビズ株式会社 すごいチーム すごい課題
  17. 17. ベスト会社! クックビズ株式会社 すごいチーム すごい課題
  18. 18. 前提条件を減らします->何かを仮定すれば、それは絶対失敗 します 機能後退(リグレッション)がないことを確認 コードが期待通りに動いているか確認 境界値テスト (セキュリティ,大きいデータ) 繰り返し作業を自動化 -> Good developers are lazy developers!!! デバッグは簡単になります なぜコードをテストする必要がありますか?
  19. 19. しかし… だいたい開発者はテストを書くことが好 きじゃない 実行するには長すぎます ビジネスロジックやユーザーシナリオと 合ってない
  20. 20. CodeCeption(1) http://codeception.com/ (English) テストフレームワーク Acceptance Tests Functional Tests Unit Tests 簡単 書きやすい 読みやすい デバッグしやすい PHPUnitを使ってる -> 標準
  21. 21. CodeCeption(2) BDDテスト(ビヘイビア駆動開発スタイルのシナリオ作成) WebServices テスト出来る (SOAP/REST/XML-RPC) レポートを生成(HTML/XML/JSON) Laravel/Zend/Phalcon/Yii2/Symfony/Composer モジュール -> 絶対できる!言い訳しない! CIツールとの統合 (Jenkins/Bamboo) そして Selenium2 や PhantomJS と同時で使える
  22. 22. どんな感じですか? <?php $I = new AcceptanceTester($scenario); $I->wantTo('create wiki page'); $I->amOnPage('/'); $I->click('Pages'); $I->click('New'); $I->see('New Page'); $I->fillField('title', 'Hobbit'); $I->fillField('body', 'By Peter Jackson'); $I->click('Save'); $I->see('page created'); // notice generated $I->see('Hobbit','h1'); // head of page of is our title $I->seeInCurrentUrl('pages/hobbit'); $I->seeInDatabase('pages', array('title' => ‘Hobbit')); ?>
  23. 23. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend
  24. 24. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend
  25. 25. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend User Scenario
  26. 26. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend User Scenario
  27. 27. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend User Scenario Developer Scenario
  28. 28. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend User Scenario Developer Scenario
  29. 29. テストタイプ Acceptance Tests Functional Tests Unit Tests Yii2 BackendFrontend Browser Selenium PhantomJS HTML HTML $_GET,$_POST, $_REQUEST Yii2 Module Backend User Scenario Developer Scenario Function Testing
  30. 30. Acceptance Tests リクエスト出来る、DOMさわれる クエリを実行するために偽のブラウザを使用して クリックとか、フォームを埋めることができます JavaScriptとスクリーンショットを確認するために Selenium/ PhantomJSで接続することができます 一番遅い
  31. 31. Functional Tests Acceptance testsと一緒けどブラウザを使ってない フレームワークにプラグインすることができ、直接内部関 数やプロパティにアクセスします (Models, validation) $_REQUESTや$_POST や $_GETを使ってる もっと早い DOM 触れない (JS/Ajax/Events)
  32. 32. Unit Tests Functionsのテスト フレームワークにプラグインすることができ、直接内部関数やプロ パティにアクセスします (Models, Validation) 一番早い MVCでやりにくい 人間で読みにくい。。 コードレビューも大変 public function testValidation() { $user = User::create(); $user->username = null; $this->assertFalse($user->validate(['username'])); $user->username = 'toolooooongnaaaaaaameeee'; $this->assertFalse($user->validate(['username'])); $user->username = 'davert'; $this->assertTrue($user->validate(['username'])); }
  33. 33. インストール Mac OSX: brew update && brew install homebrew/php/codeception Linux: wget http://codeception.com/codecept.phar . php codecept.phar bootstrap Windows: php composer.phar global require “codeception/codeception:*” Composer/ PhpStorm: php composer.phar require “codeception/codeception:*”
  34. 34. Bootstrap >codecept bootstrap >codecept generate:cept acceptance Validation 設定ファイル : tests/acceptance.suite.yml class_name: AcceptanceTester modules: enabled: - PhpBrowser - AcceptanceHelper config: PhpBrowser: url: ‘http://conference.kphpug.jp/2015/’
  35. 35. パーティー始めましょう >codecept run >codecept run —debug Bonus >codecept generate:scenarios acceptance //英語シナリオ >codecept console acceptance //Interactive console >codecept run —debug —env test //環境設定も出来るし
  36. 36. デモ タイム!!!!! > PHP conference Kansai サイトをテストしよう!
  37. 37. Best practices 1. ローカル/Vagrantでテストして -> テストに合格出来たらGIT PUSH 2. テストサーバーでデプロイして -> もう一回テストをして(環境) 3. テストサーバーでテストに合格出来たら本番に展開します 4. 本番でしないで ! NEVER!!! ダメ!ゼッタイ! 1. 新しいエントリの作成とデータベースの変更をします 2. 本番サーバーの負荷が増えます 3. 本番サーバーをチェックするためにMonitoringは必要
  38. 38. まとめ Installation : http://codeception.com/install Acceptance Tests : http://codeception.com/docs/04-AcceptanceTests Yii2 module : http://codeception.com/docs/modules/Yii2 WebDriver : http://codeception.com/docs/modules/WebDriver Yii2 Database Faker : http://qiita.com/tanakahisateru/items/ c4d39cc77a71067ed658 別のツール PHPUnit Framework(難しい) phpspec (使用 & Unit Testing) Pure Selenium/PhantomJS (PHPと統合しにくい)
  39. 39. 募集中 PHP Developers iOS Developers Let’s work together !!!!
  40. 40. Questions & Answers Do you have any questions?

×