SlideShare uma empresa Scribd logo
1 de 44
PHPUni t _Ext ensi ons
_Sel eni um2Test Case
による結合試験でらくら
            くテスト♪
             2012/ 11/ 19( Mon)
                  t chi kuba@ l com
                             bi
about t chi kuba


          所属
              – ビルコム株式会社
          自社サービス
              – ReBuy ht t p: / / r ebuy. j p/
              – Okkr u ht t ps: / / okkr u. j p
          役割
              – 開発 PM
              – PM = Pl ayi ng Manager
          いいね!
              – Li nux 、ビール、宇宙平和
          f acebook/ t wi t t er
              – t chi kuba
ビルコム株式会社 BI LCOM I NC
                ,

デジタルエージェンシー i n Asi a
自社サービスご紹介: ReBuy
自社サービスご紹介: Okkr u
本題に入る前に・・
        ・
聞いてみたいことがあります。

PHPer な皆さんはどういう開発プロセスですか?
我々の開発プロセス

リーンソフトウェア開発! キタ━ ( ゚∀゚ ) ━!  ※
 詳細省略
我々の諸環境

• OS : Cent OS( ni f t y cl oud)
• web サーバ: Ngi nx / Apache
• DB サーバ: M     ySQL
• CI サーバ: Jenki ns / Sel eni um     Ser ver
• 言語: PHP / Zendf r am     ewor k /
  j Quer y( Mobi l e)
• SCM: Subver si on→Gi t
• BTS : Bac kl og
我々のテストスタイル

V モデル vs Wモデル
我々のテストスタイル

V モデル vs Wモデル
具体的なテストの肝は・
         ・・
自
動
徹底的に自動化すべし!

Pr oj ect としてテスト自動化しているフェーズは
  以下の 2 つ
   – 受入試験:ユーザ主動線をカバー
   – 結合/単体試験:ユニットテスト
テスト着手の優先度
   – ビジネス価値:単体<結合<受入
   – 開発フェーズ:単体>結合>受入

※ 「該当フェーズ毎」にビジネス的に価値の高い
 ものを
  都度判断して決定
テストフレームワーク種別

• 当 Pr oj ect では PHPUni t を採用
• 採用している PHPUni t は大別して以下の通り
  – 単体/結合試験用
   • PHPUni t _Fr amewor k_Test Case
   • Zend_Test _PHPUni t _Cont r ol l er Test Case

 – 受入試験用
   • PHPUni t _Ext ensi ons_Sel eni um2Test Case
   • ※ 単体試験用の 2 つとは全く別モノなので注意!
リーンな実行環境の要件

• 環境を用途により分ける必要性

• ( ビルド ) デプロイ自動化

• リポジトリ変更をタイムリーにハンドル

• デプロイ時に必ずテストを自動実行

• 開発者にタイムリーに通知

• 本番環境でユーザテスト実施

• デザインモックをタイムリーに最新化
我々の CI 環境
•   環境
     – 開発環境:開発コード
     – ステージング環境:リポジトリ最新コード
     – 本番環境:ある時点のリビジョン
•   Capi st r ano
     – 環境毎のデプロイをコマンド化
     – DB 更新 ( m gr at e)
                  i
     – f acebook グループに更新内容を通知
•   Jenki ns
     – テストケース実行
     – ステージング環境自動デプロイ
     – 本番環境用フローチェック
     – デザインモック最新化
•   Facebook
     – テストユーザ
     – 開発者用グループ
•   実装
     – ブランチ非採用
     – フラグ採用: β 版 vi ew, j s, css のみ
【 FYI 】 PHPUni t _Fr amewor k_Test Ca
se
• 主に M    odel の単体/結合試験に採用
• 複数の M      odel を多用する Ser vi ceM       odel は set Up メ
  ソッド内にて M          OCK_OBJECT を定義して疎結合化
   – i f ( ! def i ned( ' MOCK_OBJECT' ) )
     def i ne( ' M  OCK_OBJECT' , t r ue) ;
   – $t hi s- >get M  odel ( ‘ [ Model 名 ] ’ ) ;  ※直接
     new×
• 単体の M      odel で完結する M        odel はステージング環境
  DB に接続して試験
【 FYI 】 Zend_Test _PHPUni t _Cont r ol l er Test Case


• 主に Cont r ol l er の単体試験に採用
• 以下環境でサポート外なので注意
   – Zendf r amewor k1. x
   – PHPUni t 3. 6 以降
• とはいえ意外と便利なので PHPUni t 3. 7 系でも無理やり使用
• 無理やり使用 t i ps
   – テストケース落ちでも unser i al i ze エラーが発生し実際のエ
     ラーの中身が不明
   – なので / usr / shar e/ pear / PHPUni t / Ut i l / PHP. php の 238
     行目付近をまさぐってテスト実行結果を / t m 等に出力                p
   – 出力内容に実際のエラーが記述されている
• MOCK_OBJECT は基本必ず set Up( ) 内で定義
• 新規に手を入れる Act i on のテストケースをまず作成
• 結果、 Cont r ol l er 実装における 3 大原則を守れるように
   – フローコントロールに注力するよう実装
   – Model データ引き回しは厳禁
   – セッションを多用しない
PHPUni t _Ext ensi ons_Sel en
               i um2Test Case
【本命】 PHPUni t _ Ext ens i ons_Sel eni um2Test Cas e


• 現在本番環境デプロイ直後に Capi st r ano→Jenki ns で
  自動実行
• ユーザが実行する遷移を忠実に再現
• クリティカルな問題を未然に防ぐ対策
   – ホントはステージング環境でも動かしたい
• Cent OS で動く Sel eni um     Ser ver に対して実行
• webDr i ver の擬似ブラウザで動作確認
   – $t hi s- >set Br owser ( ' ht m uni t ' ) ;
                                    l
結合試験デバッグ t i ps

テストコードサンプル
 – ht t ps: / / gi t hub. com sebast i anber gm
                             /                 ann/

テスト対象 ht m      l
 – ht t ps: / / gi t hub. com sebast i anber gm
                             /                 ann/
見れば分かるさ♪
以上
     tc hikuba @  bilcom
facebook/twitter :  tchikuba
・・・あまりにも酷いよ
うな気がするので・・・
phpuni t . de マニュアルより抜粋

f r om
    ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h
                                                                        .
    tm l
phpuni t . de マニュアルより抜粋

f r om
    ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h
                                                                        .
    tm l
以上!




・・・まじっすかw
phpuni t . de マニュアルより抜粋

 f r om
     ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h
                                                                         .
     tm l




ん?
Sel eni um2Test Case の gi t hub

・・・まぁリンクあるだけましか・・・w
f r om ht t ps: / / gi t hub. com sebast i anber gm
                                 /                 ann/ phpuni t - sel eni um bl ob/ m
                                                                             /        ast er / Test s/ Sel eni um2Test CaseTest . php
gi t hub サンプルの見方

URL とタイトルのアサーション
f r om ht t ps: / / gi t hub. com sebast i anber gm
                                 /                 ann/ phpuni t - sel eni um bl ob/ m
                                                                             /        ast er / Test s/ Sel eni um2Test CaseTest . php
gi t hub サンプルの見方

テスト対象は超絶シンプルな ht ml
f r om
         ht t ps: / / gi t hub. com sebast i anber gm
                                   /                 ann/ phpuni t - sel eni um bl ob/ m
                                                                               /        ast er / sel eni um 1- t est s/ ht m / Cam CasePage. ht m
                                                                                                           -                l     el             l
gi t hub サンプルの見方

• テストケースのおさらい
publ i c f unc t i on t es t Cam Cas eUrl s AreSupport ed( )
                                     el
{
        $t hi s - >ur l ( ' ht m / Cam CasePage. ht m ' ) ;
                                l     el                l
        $t hi s - >asser t St r i ngEndsW t h( ' ht m / Cam CasePage. ht m ' , $t hi s - >ur l ( ) ) ;
                                         i           l     el                l
        $t hi s - >asser t Equal s( ' Cam Case page' , $t hi s - >t i t l e( ) ) ;
                                         el
}



• 分かること
  – $t hi s - >ur l ( ) でコール
  – $t hi s - >asser t St r i ngEndsW t h( ) で URL チェッ
                                          i
    ク
  – $t hi s - >t i t l e( ) で <t i t l e> タグの値が引ける
我々のテストケース

こんな感じ


            L.21 // error check
            ・問合せにアクセス
            ・何も入力せずサブミット
            ・エラーメッセージ出力を確認
            ・ email 入力フォーム/確認フォームに
            a/b と入力してサブミット
            ・エラーメッセージ出力を確認
我々のテストケース

こんな感じ
我々のテストケース   L.36 // facebook login 以降
            (ざっくり)
            ・ FB コネクト
こんな感じ       ・正常系で問合せ入力
            ・確認画面の表示チェック
            ・完了画面の表示チェック
まとめ
我々のテストケース

• 今日紹介したのは一部
• 特に Okkr u フローは複雑
  – ユーザ A :商品・友人を選んで受注
  – ユーザ B :住所入力
  – ユーザ A :決済
• ビジネスモデル
  – 売上の~ %が我々の利益
  – どのフローで止まっても利益が得られない!
我々のテストケース

• 今日紹介したのは一部
• 特に Okkr u フローは複雑
  – ユーザ A :商品・友人を選んで受注
  – ユーザ B :住所入力
  – ユーザ A :決済
• ビジネスモデル
  – 売上の~ %が我々の利益
  – どのフローで止まっても利益が得られない!
フローチェックの継続的なトータルサポートは
 ビジネスモデルからも理に適っている!
Sel eni um のメリット/デメリット
          2

メリット
  – ht m uni t が使える
        l
     •   Sel eni um 系だと ht m uni t が使用不可 ( そうだった )
                   1        l
  – 最新なので更新が多頻度
     •   使えるメソッドもリアルタイムで増えてる
  – Sebast i an Ber gmann な恩恵(謎)
デメリット
  – Sel eni um DE によるテストコード生成が出来ない
              I
     •   I DE によるケースが既にあれば移植の手間
     •   ただし移植は比較的容易 ( Sel eni um前提知識必須 )
  – ドキュメント皆無
     •   gi t hub と戦う ( って程でもないかな? )
     •   フレームワークチェック用のテストコード参照で書ける
Sel eni um のメリット/デメリット
          2

メリット
  – ht m uni t が使える
        l
     •   Sel eni um 系だと ht m uni t が使用不可 ( そうだった )
                   1        l
  – 最新なので更新が多頻度
     •   使えるメソッドもリアルタイムで増えてる
  – Sebast i an Ber gmann な恩恵(謎)
デメリット
  – Sel eni um DE によるテストコード生成が出来ない
              I
     •   I DE によるケースが既にあれば移植の手間
     •   ただし移植は比較的容易 ( Sel eni um前提知識必須 )
  – ドキュメント皆無
     •   gi t hub と戦う ( って程でもないかな? )
     •   フレームワークチェック用のテストコード参照で書ける


       デメリット以上のメリットが大きいので
     PHPer な方にはとっつきやすい ( と思われる )
      PHPUnit_Extensions_Selenium2TestCase
        でテストケースを書いてみましょう~
( 時間あれば ) うちの Jenki ns さん
を紹介
本日の Jenki ns さんの
ごきげん
↓
Let ’ s
PHPUni t _ Ext ens i ons_Sel eni um2Test Cas e
                       !!!
以上
     tc hikuba @  bilcom
facebook/twitter :  tchikuba

Mais conteúdo relacionado

Mais procurados

ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門y-uti
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいdigitalghost
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング道化師 堂華
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論MITSUNARI Shigeo
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftTomohiro Kumagai
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32kikairoya
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)Akihiko Matuura
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talkmitamex4u
 

Mais procurados (20)

ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 

Destaque (13)

Career
CareerCareer
Career
 
boots_memory
boots_memoryboots_memory
boots_memory
 
Housemobile
HousemobileHousemobile
Housemobile
 
Christmas adrián . f . y david . c .
Christmas   adrián . f . y david . c . Christmas   adrián . f . y david . c .
Christmas adrián . f . y david . c .
 
ГРУППА ЭНЕРГОСЕРВИС ТЕХНОПЛАСТ
ГРУППА ЭНЕРГОСЕРВИС ТЕХНОПЛАСТГРУППА ЭНЕРГОСЕРВИС ТЕХНОПЛАСТ
ГРУППА ЭНЕРГОСЕРВИС ТЕХНОПЛАСТ
 
Pk thn 3 keusahawanan
Pk thn 3 keusahawananPk thn 3 keusahawanan
Pk thn 3 keusahawanan
 
Jobs 12
Jobs 12Jobs 12
Jobs 12
 
Changing the focus of a sentence
Changing the focus of a sentenceChanging the focus of a sentence
Changing the focus of a sentence
 
Villard WritingSample Cybersecurity and International Law
Villard WritingSample Cybersecurity and International LawVillard WritingSample Cybersecurity and International Law
Villard WritingSample Cybersecurity and International Law
 
Christhmas Rafa
Christhmas RafaChristhmas Rafa
Christhmas Rafa
 
Christmas Manuel
Christmas ManuelChristmas Manuel
Christmas Manuel
 
IntlTM
IntlTMIntlTM
IntlTM
 
CMD 2015: Automation completes Valmet's offering
CMD 2015: Automation completes Valmet's offeringCMD 2015: Automation completes Valmet's offering
CMD 2015: Automation completes Valmet's offering
 

Semelhante a Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪

ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
Yapc::Asia 2011 rejectConf Slide
Yapc::Asia 2011 rejectConf SlideYapc::Asia 2011 rejectConf Slide
Yapc::Asia 2011 rejectConf SlideSeiji Ohira
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出Shuyo Nakatani
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
Perlのテストがわからない
PerlのテストがわからないPerlのテストがわからない
PerlのテストがわからないYusuke Hosokoshi
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたjiro4989
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションMasanori Kado
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven DevelopmentRyo Tomidokoro
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~Takaaki Tanaka
 

Semelhante a Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪ (20)

Inside FastEnum
Inside FastEnumInside FastEnum
Inside FastEnum
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
Yapc::Asia 2011 rejectConf Slide
Yapc::Asia 2011 rejectConf SlideYapc::Asia 2011 rejectConf Slide
Yapc::Asia 2011 rejectConf Slide
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
Frequency with nltk
Frequency with nltkFrequency with nltk
Frequency with nltk
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
Perlのテストがわからない
PerlのテストがわからないPerlのテストがわからない
Perlのテストがわからない
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにした
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
ユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーションユーザーストーリー:ファースト・ジェネレーション
ユーザーストーリー:ファースト・ジェネレーション
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 

Mais de Tsutomu Chikuba

Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Tsutomu Chikuba
 
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Tsutomu Chikuba
 
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例Tsutomu Chikuba
 
turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私Tsutomu Chikuba
 
いよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こういよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こうTsutomu Chikuba
 
【参観レポート】Lean startupnight real startup dialog
【参観レポート】Lean startupnight   real startup dialog【参観レポート】Lean startupnight   real startup dialog
【参観レポート】Lean startupnight real startup dialogTsutomu Chikuba
 
リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発Tsutomu Chikuba
 

Mais de Tsutomu Chikuba (9)

Megurorb 15 lt
Megurorb 15 ltMegurorb 15 lt
Megurorb 15 lt
 
Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」
 
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
 
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
 
turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私
 
いよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こういよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こう
 
behatで始めるBDD
behatで始めるBDDbehatで始めるBDD
behatで始めるBDD
 
【参観レポート】Lean startupnight real startup dialog
【参観レポート】Lean startupnight   real startup dialog【参観レポート】Lean startupnight   real startup dialog
【参観レポート】Lean startupnight real startup dialog
 
リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発
 

Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪

  • 1. PHPUni t _Ext ensi ons _Sel eni um2Test Case による結合試験でらくら くテスト♪ 2012/ 11/ 19( Mon) t chi kuba@ l com bi
  • 2. about t chi kuba 所属 – ビルコム株式会社 自社サービス – ReBuy ht t p: / / r ebuy. j p/ – Okkr u ht t ps: / / okkr u. j p 役割 – 開発 PM – PM = Pl ayi ng Manager いいね! – Li nux 、ビール、宇宙平和 f acebook/ t wi t t er – t chi kuba
  • 3. ビルコム株式会社 BI LCOM I NC , デジタルエージェンシー i n Asi a
  • 9. 我々の諸環境 • OS : Cent OS( ni f t y cl oud) • web サーバ: Ngi nx / Apache • DB サーバ: M ySQL • CI サーバ: Jenki ns / Sel eni um Ser ver • 言語: PHP / Zendf r am ewor k / j Quer y( Mobi l e) • SCM: Subver si on→Gi t • BTS : Bac kl og
  • 14. 徹底的に自動化すべし! Pr oj ect としてテスト自動化しているフェーズは 以下の 2 つ – 受入試験:ユーザ主動線をカバー – 結合/単体試験:ユニットテスト テスト着手の優先度 – ビジネス価値:単体<結合<受入 – 開発フェーズ:単体>結合>受入 ※ 「該当フェーズ毎」にビジネス的に価値の高い ものを   都度判断して決定
  • 15. テストフレームワーク種別 • 当 Pr oj ect では PHPUni t を採用 • 採用している PHPUni t は大別して以下の通り – 単体/結合試験用 • PHPUni t _Fr amewor k_Test Case • Zend_Test _PHPUni t _Cont r ol l er Test Case – 受入試験用 • PHPUni t _Ext ensi ons_Sel eni um2Test Case • ※ 単体試験用の 2 つとは全く別モノなので注意!
  • 16. リーンな実行環境の要件 • 環境を用途により分ける必要性 • ( ビルド ) デプロイ自動化 • リポジトリ変更をタイムリーにハンドル • デプロイ時に必ずテストを自動実行 • 開発者にタイムリーに通知 • 本番環境でユーザテスト実施 • デザインモックをタイムリーに最新化
  • 17. 我々の CI 環境 • 環境 – 開発環境:開発コード – ステージング環境:リポジトリ最新コード – 本番環境:ある時点のリビジョン • Capi st r ano – 環境毎のデプロイをコマンド化 – DB 更新 ( m gr at e) i – f acebook グループに更新内容を通知 • Jenki ns – テストケース実行 – ステージング環境自動デプロイ – 本番環境用フローチェック – デザインモック最新化 • Facebook – テストユーザ – 開発者用グループ • 実装 – ブランチ非採用 – フラグ採用: β 版 vi ew, j s, css のみ
  • 18. 【 FYI 】 PHPUni t _Fr amewor k_Test Ca se • 主に M odel の単体/結合試験に採用 • 複数の M odel を多用する Ser vi ceM odel は set Up メ ソッド内にて M OCK_OBJECT を定義して疎結合化 – i f ( ! def i ned( ' MOCK_OBJECT' ) ) def i ne( ' M OCK_OBJECT' , t r ue) ; – $t hi s- >get M odel ( ‘ [ Model 名 ] ’ ) ;  ※直接 new× • 単体の M odel で完結する M odel はステージング環境 DB に接続して試験
  • 19. 【 FYI 】 Zend_Test _PHPUni t _Cont r ol l er Test Case • 主に Cont r ol l er の単体試験に採用 • 以下環境でサポート外なので注意 – Zendf r amewor k1. x – PHPUni t 3. 6 以降 • とはいえ意外と便利なので PHPUni t 3. 7 系でも無理やり使用 • 無理やり使用 t i ps – テストケース落ちでも unser i al i ze エラーが発生し実際のエ ラーの中身が不明 – なので / usr / shar e/ pear / PHPUni t / Ut i l / PHP. php の 238 行目付近をまさぐってテスト実行結果を / t m 等に出力 p – 出力内容に実際のエラーが記述されている • MOCK_OBJECT は基本必ず set Up( ) 内で定義 • 新規に手を入れる Act i on のテストケースをまず作成 • 結果、 Cont r ol l er 実装における 3 大原則を守れるように – フローコントロールに注力するよう実装 – Model データ引き回しは厳禁 – セッションを多用しない
  • 20. PHPUni t _Ext ensi ons_Sel en i um2Test Case
  • 21. 【本命】 PHPUni t _ Ext ens i ons_Sel eni um2Test Cas e • 現在本番環境デプロイ直後に Capi st r ano→Jenki ns で 自動実行 • ユーザが実行する遷移を忠実に再現 • クリティカルな問題を未然に防ぐ対策 – ホントはステージング環境でも動かしたい • Cent OS で動く Sel eni um Ser ver に対して実行 • webDr i ver の擬似ブラウザで動作確認 – $t hi s- >set Br owser ( ' ht m uni t ' ) ; l
  • 22. 結合試験デバッグ t i ps テストコードサンプル – ht t ps: / / gi t hub. com sebast i anber gm / ann/ テスト対象 ht m l – ht t ps: / / gi t hub. com sebast i anber gm / ann/
  • 24. 以上 tc hikuba @ bilcom facebook/twitter :  tchikuba
  • 26. phpuni t . de マニュアルより抜粋 f r om ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h . tm l
  • 27. phpuni t . de マニュアルより抜粋 f r om ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h . tm l
  • 29. phpuni t . de マニュアルより抜粋 f r om ht t p: / / www. phpuni t . de/ manual / cur r ent / j a/ sel eni um h . tm l ん?
  • 30. Sel eni um2Test Case の gi t hub ・・・まぁリンクあるだけましか・・・w f r om ht t ps: / / gi t hub. com sebast i anber gm / ann/ phpuni t - sel eni um bl ob/ m / ast er / Test s/ Sel eni um2Test CaseTest . php
  • 31. gi t hub サンプルの見方 URL とタイトルのアサーション f r om ht t ps: / / gi t hub. com sebast i anber gm / ann/ phpuni t - sel eni um bl ob/ m / ast er / Test s/ Sel eni um2Test CaseTest . php
  • 32. gi t hub サンプルの見方 テスト対象は超絶シンプルな ht ml f r om ht t ps: / / gi t hub. com sebast i anber gm / ann/ phpuni t - sel eni um bl ob/ m / ast er / sel eni um 1- t est s/ ht m / Cam CasePage. ht m - l el l
  • 33. gi t hub サンプルの見方 • テストケースのおさらい publ i c f unc t i on t es t Cam Cas eUrl s AreSupport ed( ) el {         $t hi s - >ur l ( ' ht m / Cam CasePage. ht m ' ) ; l el l         $t hi s - >asser t St r i ngEndsW t h( ' ht m / Cam CasePage. ht m ' , $t hi s - >ur l ( ) ) ; i l el l         $t hi s - >asser t Equal s( ' Cam Case page' , $t hi s - >t i t l e( ) ) ; el } • 分かること – $t hi s - >ur l ( ) でコール – $t hi s - >asser t St r i ngEndsW t h( ) で URL チェッ i ク – $t hi s - >t i t l e( ) で <t i t l e> タグの値が引ける
  • 34. 我々のテストケース こんな感じ L.21 // error check ・問合せにアクセス ・何も入力せずサブミット ・エラーメッセージ出力を確認 ・ email 入力フォーム/確認フォームに a/b と入力してサブミット ・エラーメッセージ出力を確認
  • 36. 我々のテストケース L.36 // facebook login 以降 (ざっくり) ・ FB コネクト こんな感じ ・正常系で問合せ入力 ・確認画面の表示チェック ・完了画面の表示チェック
  • 38. 我々のテストケース • 今日紹介したのは一部 • 特に Okkr u フローは複雑 – ユーザ A :商品・友人を選んで受注 – ユーザ B :住所入力 – ユーザ A :決済 • ビジネスモデル – 売上の~ %が我々の利益 – どのフローで止まっても利益が得られない!
  • 39. 我々のテストケース • 今日紹介したのは一部 • 特に Okkr u フローは複雑 – ユーザ A :商品・友人を選んで受注 – ユーザ B :住所入力 – ユーザ A :決済 • ビジネスモデル – 売上の~ %が我々の利益 – どのフローで止まっても利益が得られない! フローチェックの継続的なトータルサポートは ビジネスモデルからも理に適っている!
  • 40. Sel eni um のメリット/デメリット 2 メリット – ht m uni t が使える l • Sel eni um 系だと ht m uni t が使用不可 ( そうだった ) 1 l – 最新なので更新が多頻度 • 使えるメソッドもリアルタイムで増えてる – Sebast i an Ber gmann な恩恵(謎) デメリット – Sel eni um DE によるテストコード生成が出来ない I • I DE によるケースが既にあれば移植の手間 • ただし移植は比較的容易 ( Sel eni um前提知識必須 ) – ドキュメント皆無 • gi t hub と戦う ( って程でもないかな? ) • フレームワークチェック用のテストコード参照で書ける
  • 41. Sel eni um のメリット/デメリット 2 メリット – ht m uni t が使える l • Sel eni um 系だと ht m uni t が使用不可 ( そうだった ) 1 l – 最新なので更新が多頻度 • 使えるメソッドもリアルタイムで増えてる – Sebast i an Ber gmann な恩恵(謎) デメリット – Sel eni um DE によるテストコード生成が出来ない I • I DE によるケースが既にあれば移植の手間 • ただし移植は比較的容易 ( Sel eni um前提知識必須 ) – ドキュメント皆無 • gi t hub と戦う ( って程でもないかな? ) • フレームワークチェック用のテストコード参照で書ける デメリット以上のメリットが大きいので PHPer な方にはとっつきやすい ( と思われる ) PHPUnit_Extensions_Selenium2TestCase でテストケースを書いてみましょう~
  • 42. ( 時間あれば ) うちの Jenki ns さん を紹介 本日の Jenki ns さんの ごきげん ↓
  • 43. Let ’ s PHPUni t _ Ext ens i ons_Sel eni um2Test Cas e !!!
  • 44. 以上 tc hikuba @ bilcom facebook/twitter :  tchikuba