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 Tests
Acceptance testsと一緒けどブラウザを使ってない
フレームワークにプラグインすることができ、直接内部関
数やプロパティにアクセスします (Models, validation)
$_REQUESTや$_POST や $_GETを使ってる
もっと早い
DOM 触れない (JS/Ajax/Events)
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']));
}
インストール
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 practices
1. ローカル/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 & Answers
Do you have any questions?

PHP Codeception テスト -- 日本語