Upload
florent-batard
View
4.526
Download
1
Embed Size (px)
Citation preview
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) (英語とフランス語。。)
OWASPメンバー (ウェブセキュリティプロジェクト)
10年間ウェブ開発者
DevOps ,サーバー,インフラ,AI
いつも新しいことをやりたい
何でスピーカーになった?実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)
OWASPメンバー (ウェブセキュリティプロジェクト)
10年間ウェブ開発者
DevOps ,サーバー,インフラ,AI
いつも新しいことをやりたい
何でスピーカーになった?実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)
OWASPメンバー (ウェブセキュリティプロジェクト)
10年間ウェブ開発者
DevOps ,サーバー,インフラ,AI
いつも新しいことをやりたい
何でスピーカーになった?実務経験:
W3C
国連(セキュリーティ)
プライベート·バンキング
スイステレビ放送(Eurovision)
ヨーロッパでスピーカーしました
だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)
OWASPメンバー (ウェブセキュリティプロジェクト)
10年間ウェブ開発者
DevOps ,サーバー,インフラ,AI
いつも新しいことをやりたい
ベスト会社!クックビズ株式会社 すごいチーム
すごい課題
ベスト会社!クックビズ株式会社 すごいチーム
すごい課題
ベスト会社!クックビズ株式会社 すごいチーム
すごい課題
前提条件を減らします->何かを仮定すれば、それは絶対失敗します
機能後退(リグレッション)がないことを確認
コードが期待通りに動いているか確認
境界値テスト (セキュリティ,大きいデータ)
繰り返し作業を自動化 -> Good developers are lazy developers!!!
デバッグは簡単になります
なぜコードをテストする必要がありますか?
しかし…だいたい開発者はテストを書くことが好きじゃない
実行するには長すぎます
ビジネスロジックやユーザーシナリオと合ってない
CodeCeption(1)http://codeception.com/ (English)
テストフレームワーク
Acceptance Tests
Functional Tests
Unit Tests
簡単
書きやすい
読みやすい
デバッグしやすい
PHPUnitを使ってる -> 標準
CodeCeption(2)BDDテスト(ビヘイビア駆動開発スタイルのシナリオ作成)
WebServices テスト出来る (SOAP/REST/XML-RPC)
レポートを生成(HTML/XML/JSON)
Laravel/Zend/Phalcon/Yii2/Symfony/Composer モジュール -> 絶対できる!言い訳しない!
CIツールとの統合 (Jenkins/Bamboo)
そして Selenium2 や PhantomJS と同時で使える
どんな感じですか?<?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')); ?>
テストタイプAcceptance
Tests
Functional Tests
Unit Tests
Yii2 BackendFrontend
Browser Selenium
PhantomJS
HTML
HTML
$_GET,$_POST,
$_REQUEST
Yii2 Module Backend
テストタイプAcceptance
Tests
Functional Tests
Unit Tests
Yii2 BackendFrontend
Browser Selenium
PhantomJS
HTML
HTML
$_GET,$_POST,
$_REQUEST
Yii2 Module Backend
テストタイプAcceptance
Tests
Functional Tests
Unit Tests
Yii2 BackendFrontend
Browser Selenium
PhantomJS
HTML
HTML
$_GET,$_POST,
$_REQUEST
Yii2 Module Backend
User Scenario
テストタイプAcceptance
Tests
Functional Tests
Unit Tests
Yii2 BackendFrontend
Browser Selenium
PhantomJS
HTML
HTML
$_GET,$_POST,
$_REQUEST
Yii2 Module Backend
User Scenario
テストタイプAcceptance
Tests
Functional Tests
Unit Tests
Yii2 BackendFrontend
Browser Selenium
PhantomJS
HTML
HTML
$_GET,$_POST,
$_REQUEST
Yii2 Module Backend
User Scenario
Developer Scenario
テストタイプAcceptance
Tests
Functional Tests
Unit Tests
Yii2 BackendFrontend
Browser Selenium
PhantomJS
HTML
HTML
$_GET,$_POST,
$_REQUEST
Yii2 Module Backend
User Scenario
Developer Scenario
テストタイプ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
Acceptance Testsリクエスト出来る、DOMさわれる
クエリを実行するために偽のブラウザを使用して
クリックとか、フォームを埋めることができます
JavaScriptとスクリーンショットを確認するためにSelenium/ PhantomJSで接続することができます
一番遅い
Functional TestsAcceptance testsと一緒けどブラウザを使ってない
フレームワークにプラグインすることができ、直接内部関数やプロパティにアクセスします (Models, validation)
$_REQUESTや$_POST や $_GETを使ってる
もっと早い
DOM 触れない (JS/Ajax/Events)
Unit TestsFunctionsのテスト
フレームワークにプラグインすることができ、直接内部関数やプロパティにアクセスします (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'])); }
インストール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:*”
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/’
パーティー始めましょう>codecept run
>codecept run —debug
Bonus
>codecept generate:scenarios acceptance //英語シナリオ
>codecept console acceptance //Interactive console
>codecept run —debug —env test //環境設定も出来るし
デモ タイム!!!!!> PHP conference Kansai サイトをテストしよう!
Best practices1. ローカル/Vagrantでテストして -> テストに合格出来たらGIT PUSH
2. テストサーバーでデプロイして -> もう一回テストをして(環境)
3. テストサーバーでテストに合格出来たら本番に展開します
4.本番でしないで ! NEVER!!! ダメ!ゼッタイ!
1. 新しいエントリの作成とデータベースの変更をします
2. 本番サーバーの負荷が増えます
3. 本番サーバーをチェックするためにMonitoringは必要
まとめ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と統合しにくい)
募集中
PHP Developers iOS Developers
Let’s work together !!!!
Questions & AnswersDo you have any questions?