41
Text Codeception テスト の活用 (TDD)—>Test Driven Development

PHP Codeception テスト -- 日本語

Embed Size (px)

Citation preview

Page 1: PHP Codeception テスト -- 日本語

Text

Codeception テストの活用(TDD)—>Test Driven Development

Page 2: PHP Codeception テスト -- 日本語

アジェンダ自己紹介

Codeception紹介

テストタイプ

デモとハンズオン

Best Practices

リファレンス

質問(Q&A)

@phpcon_kansai #phpkansai

Page 3: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 4: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 5: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 6: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 7: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 8: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 9: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 10: PHP Codeception テスト -- 日本語

この外国人って誰?Batard Florent (28 歳)(Shenril)

Twitter: @shenril

Facebook: Florent Btd

セキュリティエンジニア (ハッカー)

フランス人

フランス、スイス、アメリカ、イギリス、日本に住んでた

日本が大好き、特に関西:食べ物、人、空気

日本語はまだ勉強中。。すみません

Page 11: PHP Codeception テスト -- 日本語

何でスピーカーになった?実務経験:

W3C

国連(セキュリーティ)

プライベート·バンキング

スイステレビ放送(Eurovision)

ヨーロッパでスピーカーしました

だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)

OWASPメンバー (ウェブセキュリティプロジェクト)

10年間ウェブ開発者

DevOps ,サーバー,インフラ,AI

いつも新しいことをやりたい

Page 12: PHP Codeception テスト -- 日本語

何でスピーカーになった?実務経験:

W3C

国連(セキュリーティ)

プライベート·バンキング

スイステレビ放送(Eurovision)

ヨーロッパでスピーカーしました

だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)

OWASPメンバー (ウェブセキュリティプロジェクト)

10年間ウェブ開発者

DevOps ,サーバー,インフラ,AI

いつも新しいことをやりたい

Page 13: PHP Codeception テスト -- 日本語

何でスピーカーになった?実務経験:

W3C

国連(セキュリーティ)

プライベート·バンキング

スイステレビ放送(Eurovision)

ヨーロッパでスピーカーしました

だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)

OWASPメンバー (ウェブセキュリティプロジェクト)

10年間ウェブ開発者

DevOps ,サーバー,インフラ,AI

いつも新しいことをやりたい

Page 14: PHP Codeception テスト -- 日本語

何でスピーカーになった?実務経験:

W3C

国連(セキュリーティ)

プライベート·バンキング

スイステレビ放送(Eurovision)

ヨーロッパでスピーカーしました

だいたいセキュリティのトッピク (Youtube) (英語とフランス語。。)

OWASPメンバー (ウェブセキュリティプロジェクト)

10年間ウェブ開発者

DevOps ,サーバー,インフラ,AI

いつも新しいことをやりたい

Page 15: PHP Codeception テスト -- 日本語

ベスト会社!クックビズ株式会社 すごいチーム

すごい課題

Page 16: PHP Codeception テスト -- 日本語

ベスト会社!クックビズ株式会社 すごいチーム

すごい課題

Page 17: PHP Codeception テスト -- 日本語

ベスト会社!クックビズ株式会社 すごいチーム

すごい課題

Page 18: PHP Codeception テスト -- 日本語

前提条件を減らします->何かを仮定すれば、それは絶対失敗します

機能後退(リグレッション)がないことを確認

コードが期待通りに動いているか確認

境界値テスト (セキュリティ,大きいデータ)

繰り返し作業を自動化 -> Good developers are lazy developers!!!

デバッグは簡単になります

なぜコードをテストする必要がありますか?

Page 19: PHP Codeception テスト -- 日本語

しかし…だいたい開発者はテストを書くことが好きじゃない

実行するには長すぎます

ビジネスロジックやユーザーシナリオと合ってない

Page 20: PHP Codeception テスト -- 日本語

CodeCeption(1)http://codeception.com/ (English)

テストフレームワーク

Acceptance Tests

Functional Tests

Unit Tests

簡単

書きやすい

読みやすい

デバッグしやすい

PHPUnitを使ってる -> 標準

Page 21: PHP Codeception テスト -- 日本語

CodeCeption(2)BDDテスト(ビヘイビア駆動開発スタイルのシナリオ作成)

WebServices テスト出来る (SOAP/REST/XML-RPC)

レポートを生成(HTML/XML/JSON)

Laravel/Zend/Phalcon/Yii2/Symfony/Composer モジュール -> 絶対できる!言い訳しない!

CIツールとの統合 (Jenkins/Bamboo)

そして Selenium2 や PhantomJS と同時で使える

Page 22: PHP Codeception テスト -- 日本語

どんな感じですか?<?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')); ?>

Page 23: PHP Codeception テスト -- 日本語
Page 24: PHP Codeception テスト -- 日本語

テストタイプAcceptance

Tests

Functional Tests

Unit Tests

Yii2 BackendFrontend

Browser Selenium

PhantomJS

HTML

HTML

$_GET,$_POST,

$_REQUEST

Yii2 Module Backend

Page 25: PHP Codeception テスト -- 日本語

テストタイプAcceptance

Tests

Functional Tests

Unit Tests

Yii2 BackendFrontend

Browser Selenium

PhantomJS

HTML

HTML

$_GET,$_POST,

$_REQUEST

Yii2 Module Backend

Page 26: PHP Codeception テスト -- 日本語

テストタイプAcceptance

Tests

Functional Tests

Unit Tests

Yii2 BackendFrontend

Browser Selenium

PhantomJS

HTML

HTML

$_GET,$_POST,

$_REQUEST

Yii2 Module Backend

User Scenario

Page 27: PHP Codeception テスト -- 日本語

テストタイプAcceptance

Tests

Functional Tests

Unit Tests

Yii2 BackendFrontend

Browser Selenium

PhantomJS

HTML

HTML

$_GET,$_POST,

$_REQUEST

Yii2 Module Backend

User Scenario

Page 28: PHP Codeception テスト -- 日本語

テストタイプAcceptance

Tests

Functional Tests

Unit Tests

Yii2 BackendFrontend

Browser Selenium

PhantomJS

HTML

HTML

$_GET,$_POST,

$_REQUEST

Yii2 Module Backend

User Scenario

Developer Scenario

Page 29: PHP Codeception テスト -- 日本語

テストタイプAcceptance

Tests

Functional Tests

Unit Tests

Yii2 BackendFrontend

Browser Selenium

PhantomJS

HTML

HTML

$_GET,$_POST,

$_REQUEST

Yii2 Module Backend

User Scenario

Developer Scenario

Page 30: PHP Codeception テスト -- 日本語

テストタイプ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

Page 31: PHP Codeception テスト -- 日本語

Acceptance Testsリクエスト出来る、DOMさわれる

クエリを実行するために偽のブラウザを使用して

クリックとか、フォームを埋めることができます

JavaScriptとスクリーンショットを確認するためにSelenium/ PhantomJSで接続することができます

一番遅い

Page 32: PHP Codeception テスト -- 日本語

Functional TestsAcceptance testsと一緒けどブラウザを使ってない

フレームワークにプラグインすることができ、直接内部関数やプロパティにアクセスします (Models, validation)

$_REQUESTや$_POST や $_GETを使ってる

もっと早い

DOM 触れない (JS/Ajax/Events)

Page 33: PHP Codeception テスト -- 日本語

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'])); }

Page 34: PHP Codeception テスト -- 日本語

インストール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:*”

Page 35: PHP 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/’

Page 36: PHP Codeception テスト -- 日本語

パーティー始めましょう>codecept run

>codecept run —debug

Bonus

>codecept generate:scenarios acceptance //英語シナリオ

>codecept console acceptance //Interactive console

>codecept run —debug —env test //環境設定も出来るし

Page 37: PHP Codeception テスト -- 日本語

デモ タイム!!!!!> PHP conference Kansai サイトをテストしよう!

Page 38: PHP Codeception テスト -- 日本語

Best practices1. ローカル/Vagrantでテストして -> テストに合格出来たらGIT PUSH

2. テストサーバーでデプロイして -> もう一回テストをして(環境)

3. テストサーバーでテストに合格出来たら本番に展開します

4.本番でしないで ! NEVER!!! ダメ!ゼッタイ!

1. 新しいエントリの作成とデータベースの変更をします

2. 本番サーバーの負荷が増えます

3. 本番サーバーをチェックするためにMonitoringは必要

Page 39: PHP Codeception テスト -- 日本語

まとめ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と統合しにくい)

Page 40: PHP Codeception テスト -- 日本語

募集中

PHP Developers iOS Developers

Let’s work together !!!!

Page 41: PHP Codeception テスト -- 日本語

Questions & AnswersDo you have any questions?