SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
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?

Contenu connexe

Similaire à PHP Codeception テスト -- 日本語

Windows Phone 7はじめました
Windows Phone 7はじめましたWindows Phone 7はじめました
Windows Phone 7はじめましたAkira Hatsune
 
Web applicationpenetrationtest その2
Web applicationpenetrationtest その2Web applicationpenetrationtest その2
Web applicationpenetrationtest その2Tetsuya Hasegawa
 
Php勉強会資料20090629
Php勉強会資料20090629Php勉強会資料20090629
Php勉強会資料20090629Takako Miyagawa
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf耕二 阿部
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) kunihikokaneko1
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!leverages_event
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編Hiroshi Urabe
 

Similaire à PHP Codeception テスト -- 日本語 (10)

Windows Phone 7はじめました
Windows Phone 7はじめましたWindows Phone 7はじめました
Windows Phone 7はじめました
 
Twitter4Jとテスト
Twitter4JとテストTwitter4Jとテスト
Twitter4Jとテスト
 
Web applicationpenetrationtest その2
Web applicationpenetrationtest その2Web applicationpenetrationtest その2
Web applicationpenetrationtest その2
 
Php勉強会資料20090629
Php勉強会資料20090629Php勉強会資料20090629
Php勉強会資料20090629
 
Python Autotest pdc2008w
Python Autotest pdc2008wPython Autotest pdc2008w
Python Autotest pdc2008w
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
 

PHP Codeception テスト -- 日本語