SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
Testman
2012.11.24 PyFes
Success

                           Fail

rhacoのキャラクターを書いてくれる人を募集するために書いたダサいカエルの絵が会社のJenkinsで
使われています。rhacoのテストはxUnit形式のxmlを出力していなくてjenkinsが使えない。同僚は仕
方なくphpUnitを使おうとしたようですが…
phpUnitが全く気に入らず、結果の保存や、カバレッジ含んだ画面を見られるTestmanを開発してし
まいました。わたしは再度ダサキャラを…。OSSもゆるキャラ時代になるに違いないっす。
• curl -L -O 
    https://github.com/downloads/tokushima/
    testman/testman.php




   http://localhost/testman.php/web/index.php




Testmanはファイル一つ。ブラウザで表示できる。使い方のドキュメントも含んでいる。
• php testman.php -report




xDebugを有効にして、reportオプション付きでテストを実行すれば、カバレッジ確認できる。
• php testman.php -report




詳細でマウスオーバーすれば、どのファイルでカバーされているかもわかる。
test client
       • https://github.com/tokushima/
         testman/blob/master/example/test/
         entry/top.php

     <?php
     eq(1,1);

     $b = b();
     $b->do_get(test_map_url('top','HOGE','AAA'));
     eq('TOP_HOGEAAA',$b->body());




URLの設定から逆引きして決定したURLに対してブラウザの振りをしたクライアントでのテストもでき
る。
doctest
            <?php
            class Sample{
              public function abc($str){
                return '('.$str.')';
                /∗∗∗
                 ∗ $self = new self();
                 ∗ eq("(hoge)",$self->abc("hoge"));
                 ∗/
                /∗∗∗
                  # fuga
                  $self = new self();
                  eq("(fuga)",$self->abc("fuga"));
                 ∗/
              }
              static public function def($str){
                return '('.$str.')';
                /∗∗∗
                  eq("(hoge)",self::def("hoge"));
                 ∗/
              }
              /∗∗∗
                eq("(hoge)",self::def("hoge"));
                $self = new self();
                eq("(fuga)",$self->abc("fuga"));
               ∗/
              
              /∗∗∗
                # __setup__
                eq(true,true);
               ∗/
              /∗∗∗
                # __teardown__
                eq(true,true);
               ∗/
            }



Pythonistaにはおなじみのdoctest。doctestなのにsetupとteardownがある。
https://github.com/tokushima/testman

Contenu connexe

Tendances

Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
dekosuke
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
kumatch kumatch
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
 

Tendances (20)

大人のお型付け
大人のお型付け大人のお型付け
大人のお型付け
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
シェル入門
シェル入門シェル入門
シェル入門
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
ALPSチュートリアル(6) Matplotlib入門
ALPSチュートリアル(6) Matplotlib入門ALPSチュートリアル(6) Matplotlib入門
ALPSチュートリアル(6) Matplotlib入門
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 

En vedette

Cabelos de Lelê
Cabelos de LelêCabelos de Lelê
Cabelos de Lelê
MAIEVS2
 
Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM
Arnau Martí
 
Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012
Jefferson Willian
 
Apresentação jbs abril v1
Apresentação  jbs abril v1Apresentação  jbs abril v1
Apresentação jbs abril v1
JBS RI
 
Trab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalezTrab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalez
romeogolf
 
Fechas de abril
Fechas de abrilFechas de abril
Fechas de abril
escuelamdp
 
Apresentação 4T11 teleconferência
Apresentação 4T11 teleconferênciaApresentação 4T11 teleconferência
Apresentação 4T11 teleconferência
JBS RI
 
Betrekkelijke voornaamwoorden
Betrekkelijke voornaamwoordenBetrekkelijke voornaamwoorden
Betrekkelijke voornaamwoorden
Adrienne de Kock
 
Caminito De NúMeros
Caminito De NúMerosCaminito De NúMeros
Caminito De NúMeros
escuelamdp
 
Muestra de 1ro C
Muestra de 1ro CMuestra de 1ro C
Muestra de 1ro C
escuelamdp
 
Taller de medios digitales clase 2
Taller de medios digitales   clase 2Taller de medios digitales   clase 2
Taller de medios digitales clase 2
rjtassi
 
Seguridad exp osiciion
Seguridad exp osiciionSeguridad exp osiciion
Seguridad exp osiciion
lizethromerob
 
Ukuran panjang
Ukuran panjangUkuran panjang
Ukuran panjang
bhlim313
 
201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix
xshotex
 

En vedette (20)

Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
 
Cell Phone Evolution
Cell Phone EvolutionCell Phone Evolution
Cell Phone Evolution
 
Week 12 Recap
Week 12 RecapWeek 12 Recap
Week 12 Recap
 
Cabelos de Lelê
Cabelos de LelêCabelos de Lelê
Cabelos de Lelê
 
Panellets
PanelletsPanellets
Panellets
 
Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM
 
Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012
 
Apresentação jbs abril v1
Apresentação  jbs abril v1Apresentação  jbs abril v1
Apresentação jbs abril v1
 
Trab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalezTrab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalez
 
Fechas de abril
Fechas de abrilFechas de abril
Fechas de abril
 
Apresentação 4T11 teleconferência
Apresentação 4T11 teleconferênciaApresentação 4T11 teleconferência
Apresentação 4T11 teleconferência
 
Betrekkelijke voornaamwoorden
Betrekkelijke voornaamwoordenBetrekkelijke voornaamwoorden
Betrekkelijke voornaamwoorden
 
Pratica 17 silde share
Pratica 17 silde sharePratica 17 silde share
Pratica 17 silde share
 
Caminito De NúMeros
Caminito De NúMerosCaminito De NúMeros
Caminito De NúMeros
 
Muestra de 1ro C
Muestra de 1ro CMuestra de 1ro C
Muestra de 1ro C
 
Taller de medios digitales clase 2
Taller de medios digitales   clase 2Taller de medios digitales   clase 2
Taller de medios digitales clase 2
 
Globalmouth at wednesday relations 20121128
Globalmouth at wednesday relations 20121128Globalmouth at wednesday relations 20121128
Globalmouth at wednesday relations 20121128
 
Seguridad exp osiciion
Seguridad exp osiciionSeguridad exp osiciion
Seguridad exp osiciion
 
Ukuran panjang
Ukuran panjangUkuran panjang
Ukuran panjang
 
201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix
 

Similaire à Testman

第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
株式会社ランチェスター
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
Ashitaba YOSHIOKA
 

Similaire à Testman (20)

第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
 
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Junit4
Junit4Junit4
Junit4
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 

Plus de makoto tsuyuki

Plus de makoto tsuyuki (10)

スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
 
Erulolo at Kamakurago #1
Erulolo at Kamakurago #1Erulolo at Kamakurago #1
Erulolo at Kamakurago #1
 
Not free
Not freeNot free
Not free
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3
 
引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7
 
Python Workshop the Edge - django
Python Workshop the Edge - djangoPython Workshop the Edge - django
Python Workshop the Edge - django
 
伝説のギタリストじゃない方のDjango
伝説のギタリストじゃない方のDjango伝説のギタリストじゃない方のDjango
伝説のギタリストじゃない方のDjango
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco
 
継承だろJK
継承だろJK継承だろJK
継承だろJK
 

Testman

  • 2. Success Fail rhacoのキャラクターを書いてくれる人を募集するために書いたダサいカエルの絵が会社のJenkinsで 使われています。rhacoのテストはxUnit形式のxmlを出力していなくてjenkinsが使えない。同僚は仕 方なくphpUnitを使おうとしたようですが…
  • 4. • curl -L -O https://github.com/downloads/tokushima/ testman/testman.php http://localhost/testman.php/web/index.php Testmanはファイル一つ。ブラウザで表示できる。使い方のドキュメントも含んでいる。
  • 5. • php testman.php -report xDebugを有効にして、reportオプション付きでテストを実行すれば、カバレッジ確認できる。
  • 6. • php testman.php -report 詳細でマウスオーバーすれば、どのファイルでカバーされているかもわかる。
  • 7. test client • https://github.com/tokushima/ testman/blob/master/example/test/ entry/top.php <?php eq(1,1); $b = b(); $b->do_get(test_map_url('top','HOGE','AAA')); eq('TOP_HOGEAAA',$b->body()); URLの設定から逆引きして決定したURLに対してブラウザの振りをしたクライアントでのテストもでき る。
  • 8. doctest <?php class Sample{   public function abc($str){     return '('.$str.')';     /∗∗∗      ∗ $self = new self();      ∗ eq("(hoge)",$self->abc("hoge"));      ∗/     /∗∗∗       # fuga       $self = new self();       eq("(fuga)",$self->abc("fuga"));      ∗/   }   static public function def($str){     return '('.$str.')';     /∗∗∗       eq("(hoge)",self::def("hoge"));      ∗/   }   /∗∗∗     eq("(hoge)",self::def("hoge"));     $self = new self();     eq("(fuga)",$self->abc("fuga"));    ∗/      /∗∗∗     # __setup__     eq(true,true);    ∗/   /∗∗∗     # __teardown__     eq(true,true);    ∗/ } Pythonistaにはおなじみのdoctest。doctestなのにsetupとteardownがある。