SlideShare a Scribd company logo
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

More Related Content

What's hot (20)

PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
PDF
Template Meta Programming入門から応用まで
yoshihikoozaki5
 
PDF
Hack/HHVM 入門
y-uti
 
PDF
HHVM Hack
Masaaki Yonebayashi
 
PDF
君はまだ,本当のプリプロセスを知らない
digitalghost
 
PDF
第2回勉強会スライド
koturn 0;
 
PDF
第1回勉強会スライド
koturn 0;
 
PDF
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
 
PPTX
エラーハンドリング
道化師 堂華
 
PDF
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
 
PDF
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
 
KEY
Objc lambda
matuura_core
 
PDF
templateとautoの型推論
MITSUNARI Shigeo
 
PPTX
C++0x総復習
道化師 堂華
 
PDF
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
 
PDF
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
 
PPTX
C# 8.0 null許容参照型
信之 岩永
 
PDF
SEH on mingw32
kikairoya
 
PPTX
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
 
PPT
2008.10.18 L4u Tech Talk
mitamex4u
 
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
Template Meta Programming入門から応用まで
yoshihikoozaki5
 
Hack/HHVM 入門
y-uti
 
君はまだ,本当のプリプロセスを知らない
digitalghost
 
第2回勉強会スライド
koturn 0;
 
第1回勉強会スライド
koturn 0;
 
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
 
エラーハンドリング
道化師 堂華
 
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
 
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
 
Objc lambda
matuura_core
 
templateとautoの型推論
MITSUNARI Shigeo
 
C++0x総復習
道化師 堂華
 
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
 
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
 
C# 8.0 null許容参照型
信之 岩永
 
SEH on mingw32
kikairoya
 
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
 
2008.10.18 L4u Tech Talk
mitamex4u
 

Viewers also liked (13)

PPT
Career
Isabel Ferreira
 
PDF
boots_memory
dylan Bickerstaffe
 
PDF
Housemobile
Ana Freixo
 
PPTX
Christmas adrián . f . y david . c .
beatrizteacherbreton
 
PDF
ГРУППА ЭНЕРГОСЕРВИС ТЕХНОПЛАСТ
Alexey Musiyenko
 
PPT
Pk thn 3 keusahawanan
serimol
 
PDF
Jobs 12
Ana Freixo
 
PPT
Changing the focus of a sentence
lcslidepresentations
 
PDF
Villard WritingSample Cybersecurity and International Law
Bruce Villard, JD, MBA, Esq., PMP®
 
PPTX
Christhmas Rafa
beatrizteacherbreton
 
PPTX
Christmas Manuel
beatrizteacherbreton
 
PPTX
IntlTM
Jadunath Behera
 
PDF
CMD 2015: Automation completes Valmet's offering
Valmet Oyj
 
boots_memory
dylan Bickerstaffe
 
Housemobile
Ana Freixo
 
Christmas adrián . f . y david . c .
beatrizteacherbreton
 
ГРУППА ЭНЕРГОСЕРВИС ТЕХНОПЛАСТ
Alexey Musiyenko
 
Pk thn 3 keusahawanan
serimol
 
Jobs 12
Ana Freixo
 
Changing the focus of a sentence
lcslidepresentations
 
Villard WritingSample Cybersecurity and International Law
Bruce Villard, JD, MBA, Esq., PMP®
 
Christhmas Rafa
beatrizteacherbreton
 
Christmas Manuel
beatrizteacherbreton
 
CMD 2015: Automation completes Valmet's offering
Valmet Oyj
 
Ad

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

PPT
PHP agile test tips
Tsutomu Chikuba
 
PPT
ビジネス的に高価値なアジャイルテスト
Tsutomu Chikuba
 
PDF
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
PDF
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo
 
PDF
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
PDF
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo
 
PDF
Php勉強会資料20090629
Takako Miyagawa
 
KEY
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
 
PDF
関西Php勉強会のlimeの話
Hisateru Tanaka
 
KEY
Behat+Symfony2ではじめるBDD超入門
晃 遠山
 
PDF
Local php-100828 2
Akio Ishida
 
PDF
あなたの安心を高速に守る Container-based CI
Wataru MIYAGUNI
 
PDF
Eclipse PDT + MakeGoodによるPHPコードのテスト
Atsuhiro Kubo
 
PDF
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Kazunori Sakamoto
 
PDF
Testing PHP extension on Travis CI
Yoshio Hanawa
 
PDF
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
PPTX
php-src の歩き方
do_aki
 
PDF
Eclipse PDT + MakeGood による PHP コードのテスト
Atsuhiro Kubo
 
PDF
G*workshop 2011/11/22 Geb+Betamax
Nobuhiro Sue
 
PDF
behatで始めるBDD
Tsutomu Chikuba
 
PHP agile test tips
Tsutomu Chikuba
 
ビジネス的に高価値なアジャイルテスト
Tsutomu Chikuba
 
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo
 
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo
 
Php勉強会資料20090629
Takako Miyagawa
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
 
関西Php勉強会のlimeの話
Hisateru Tanaka
 
Behat+Symfony2ではじめるBDD超入門
晃 遠山
 
Local php-100828 2
Akio Ishida
 
あなたの安心を高速に守る Container-based CI
Wataru MIYAGUNI
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Atsuhiro Kubo
 
Webアプリの動的部分に着目したグレーボックス統合テストとテンプレート変数カバレッジの提案
Kazunori Sakamoto
 
Testing PHP extension on Travis CI
Yoshio Hanawa
 
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
php-src の歩き方
do_aki
 
Eclipse PDT + MakeGood による PHP コードのテスト
Atsuhiro Kubo
 
G*workshop 2011/11/22 Geb+Betamax
Nobuhiro Sue
 
behatで始めるBDD
Tsutomu Chikuba
 
Ad

More from Tsutomu Chikuba (8)

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

Recently uploaded (9)

PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
 
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
 
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
 

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