æ©èœïŒè¿œå æããªééããé¿ããããã« æ°åŠãã«ãšã㊠2ã€ã®æ°åã®åèšãæããŠããããã ã·ããªãªïŒ2ã€ã®æ°åãè¿œå ãã é»åã«50ãå ¥åãããšããŸã ãããŠãç§ã¯é»åã«70ãå ¥åããŸãã è¿œå ãæŒããš ãã®åŸãçµæã¯ã¹ã¯ãªãŒã§120ã«ãªãã¯ãã§ã
Cucumberã®ãããã§ãã¬ãŒã«äžã®BDDã«å€¢äžã«ãªããŸããã ããããã»ãšãã©ã®æéã§äœæ¥ããªããã°ãªããªãPHPã§ã¯ãBDDãšã®é¢ä¿ã¯ã©ããããããããŸããããŸããã§ããã ãããŠãŸã第äžã«ããã¡ããšããããŒã«ããªãããã§ãã ããããããæ¥ãéåœã¯ç§ãBehatã©ã€ãã©ãªããŒãž ïŒã¡ãªã¿ã«ãeverzet habrayuzerãæžãã ïŒã«é£ããŠè¡ã£ãŠãããŸããã ãããŠãç§ã«å¹žããéãããã£ã...
ã€ã³ã¹ããŒã«ãšããªã»ãã
å®éãBehatã¯ãPHPã®äžçãããã ãããã§ãã åãæ§æïŒ ã¬ãŒãã³èšèªã䜿çšïŒãåããã¡ã€ã«æ§é ãã¹ãããã決å®ããããã®ã»ãŒåäžã®æ¹æ³ã èè ã¯ã圌ãé ããŠããªãå³æžé€šã®ãå ãã«è§ŠçºãããããšãããããŸãã ãã¹ãŠãçŸããèŠããŸãããç§ãã¡ã¯ãããèŠãŸããã§ããã åäœäžã®è£œåãè©Šãæéã§ãã
ããã«äºçŽããŸã-Behatã®äœæ¥ã«ã¯PHP 5.3.1ãå¿ èŠã§ãã ãããã£ãŠããŸã å ¥æããŠããªãå Žåã¯ããããè¡ãæéã§ãã
ãµã€ãã®äœæè ã¯ãBehatãã€ã³ã¹ããŒã«ããããã€ãã®æ¹æ³ãæäŸããŠããŸãã äžçªæåã§æãç°¡åãªãã®ãéžæããŸã-PearãéããŠïŒ
$ pear channel-discover pear.everzet.com
$ pear install everzet/behat-beta
ã¿ãã ïŒ ç§ãã¡ã¯Behatã®å¹žéãªææè ã§ã:)ååãšããŠããã¹ãæžã¿ãããžã§ã¯ãã®ãããã©ã«ããŒã«ç§»åããŠã¹ã¯ãªããã®äœæãéå§ããããšãã§ããŸãããã©ã€ãã©ãªãå°ãã調æŽãããããšã奜ã¿ãŸãã ããã§ã¯ããŸãããããžã§ã¯ããã©ã«ããŒã«Behatã®ãã€ãã£ãããã¿ãããäœæããŸãããã æ¢ã«è¿°ã¹ãããã«ãCucumberããåçšãããŠããã次ã®åœ¢åŒãæã£ãŠããŸãã
|-æ©èœ `-ã¹ããã | `-* _steps.php `-ãµããŒã `-env.php
ç§ãã¡ãæã£ãŠãããã®ã®è©³çŽ°ïŒ
- æ©èœ -ããã¯ã¹ã¯ãªãããä¿åãããã©ã«ããŒã§ãïŒ* .featureãã¡ã€ã«ããããã«ã€ããŠã¯å°ãåŸã§ïŒã
- æ©èœ/ã¹ããã -ããã¯ããã¹ãã®ãã¹ããããã®èª¬æãå«ããã©ã«ããŒã§ãã
- æ©èœ/ãµããŒã -ãµããŒãã¹ã¯ãªããã®ãããã©ã«ããŒã ããã§ç¹ã«éèŠãªã®ã¯ãç°å¢ã®æ§æãèšè¿°ããenv.phpãã¡ã€ã«ã§ãã éããŸãã
env.phpãã¡ã€ã«ã¯æåã¯ç©ºã§ãã ç§ãã¡ã«ãšã£ãŠã®äž»ãªéèŠæ§ã¯ã次ã®ã¹ã¯ãªããã®å®è¡åã«æ¯åå®è¡ãããããšã§ãã ãããŠãããã«å¿ èŠãªãã¹ãŠã®ã©ã€ãã©ãªãšãããžã§ã¯ããã¡ã€ã«ãæ¥ç¶ãããšäŸ¿å©ã§ãã ãŸãããã¹ãã«å¿ èŠãªå€æ°ãšé¢æ°ãå®çŸ©ããããšã䟿å©ã§ãã ã¡ãªã¿ã«ããããã®ã¹ãã¬ãŒãžã«ã¯ã$ worldå€æ°ã䜿çšããã®ãéåžžã«äŸ¿å©ã§ããããã¯ãå ¥åãããã³ã«ãæ°ãããã³ã«æäŸãããŸãã æŠããŠãåºæ¬çãªæ©èœã䜿çšããããã«ãäœãèšå®ããå¿ èŠã¯ãããŸãããBehatãšPHPèªäœãæäŸããŠãããã°ååã§ãã ããããç§ã¯ãŸã PHPUnitã®æ€èšŒé¢æ°ã䜿çšãããã®ã§ãèš±å¯ãåŸãŠããããæ¥ç¶ããŸãã
PHPUnitãã€ã³ã¹ããŒã«ãããŠããªãå ŽåãåãPearãä»ããŠéåžžã«ç°¡åã«ã€ã³ã¹ããŒã«ãããŸãã
$ pear channel-discover pear.phpunit.de
$ pear channel-discover components.ez.no
$ pear channel-discover pear.symfony-project.com
$ pear install phpunit/PHPUnit
å®äºãenv.phpã«ç»é²ããã ãã§ãïŒ
<ïŒphp require_once 'PHPUnit / Autoload.php'; require_once 'PHPUnit / Framework / Assert / Functions.php'; ïŒ>
ãŸãããããžã§ã¯ãã®ã¯ã©ã¹ãšé¢æ°ã䜿çšã§ããããã«ããã«ã¯ãé©åãªãã¡ã€ã«ãç°å¢ã«æ¥ç¶ããå¿ èŠããããŸãã ç°å¢ã®åæåã«äœåãªã€ã³ã¯ã«ãŒããæ£ããããããªãã®ã§ããããã1ã€ã®ãã¡ã€ã«-includes.phpã«çµåãããã§ã«ç°å¢ã«æ¥ç¶ããŸãã ãã®çµæãenv.phpãã¡ã€ã«ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
<ïŒphp require_once 'PHPUnit / Autoload.php'; require_once 'PHPUnit / Framework / Assert / Functions.php'; include 'includes.php'; ïŒ>
æ©èœã«ã€ããŠèª¬æããæåã®ãªãªãŒã¹ãè¡ããŸã
ããŠãããã§ãã¹ãã®æºåãã§ããŸãããæ©èœã®èª¬æãå§ããããšãã§ããŸãã äŸãšããŠã2ã€ã®æ°åãè¿œå ãããªã©ãå®è£ ãšãã¹ããé£ãããã®ãæ¡çšããããšã«ããŸããã ãããã£ãŠã æ©èœãã©ã«ããŒã«calc.featureãã¡ã€ã«ãäœæãã 次ã®ããã«èšè¿°ããŸãã
æ©èœïŒè¿œå æããªééããé¿ããããã« æ°åŠãã«ãšã㊠2ã€ã®æ°åã®åèšãæããŠããããã ã·ããªãªïŒ é»åããããš æåã®çªå·ãšããŠ30ãå ¥åãããšã ãããŠã2çªç®ã®çªå·ãšããŠ20ãå ¥åããŸãã ãããŠããè¿œå ããæŒããŸã ãã®åŸãçµæã¯50ã«ãªããŸã
ã³ãã³ããä¿åããŠã³ã³ãœãŒã«ã«å ¥åããŸã
$ behat features
åºåã¯æ¬¡ã®ãšããã§ãã
1ã€ã®ã·ããªãªïŒ1ã€ã®æªå®çŸ©ïŒ 5ã¹ãããïŒ5æªå®çŸ©ïŒ 0.091ç§ æ¬¡ã®ã¹ããããã䜿çšããŠãæªå®çŸ©ã®ã¹ãããã®ã¹ãããå®çŸ©ãå®è£ ã§ããŸãã $ steps->äžããããïŒ '/ ^ç§ã¯é»åãæã£ãŠããŸã$ /'ãfunctionïŒ$ worldïŒ{ new \ Everzet \ Behat \ Exception \ PendingïŒïŒ; }ïŒ; $ steps-> WhenïŒ '/ ^ I areïŒ\ d +ïŒas first number $ /'ãfunctionïŒ$ worldã$ arg1ïŒ{ new \ Everzet \ Behat \ Exception \ PendingïŒïŒ; }ïŒ; $ steps-> AndïŒ '/ ^ I areïŒ\ d +ïŒas second number $ /'ãfunctionïŒ$ worldã$ arg1ïŒ{ new \ Everzet \ Behat \ Exception \ PendingïŒïŒ; }ïŒ; $ steps-> AndïŒ '/ ^ I press \'ïŒ[^ \ '] *ïŒ\' $ / 'ãfunctionïŒ$ worldã$ arg1ïŒ{ new \ Everzet \ Behat \ Exception \ PendingïŒïŒ; }ïŒ; $ steps-> ThenïŒ '/ ^çµæã¯ïŒ\ d +ïŒ$ /'ãfunctionïŒ$ worldã$ arg1ïŒ{ new \ Everzet \ Behat \ Exception \ PendingïŒïŒ; }ïŒ;
ããã¯ãã·ããªãªã®ãã¹ãããããå®çŸ©ããŠããªãããšã瀺ããŠããŸãã ããããç§ãã¡ã¯ããã«å€ããç¥ã£ãŠããŸã-èšç®æ©ã¯ã©ã¹ã¯ãããŸããã åé¡ã§ã¯ãªããæžããŠãã ããã
ã¯ã©ã¹Calc { ä¿è·ããã$ first = 0; ä¿è·ããã$ç§= 0; ä¿è·ããã$ result = 0; ãããªãã¯é¢æ°setFirstïŒ$ numïŒ{$ this-> first = $ num; } ãããªãã¯é¢æ°setSecondïŒ$ numïŒ{$ this-> second = $ num; } public function addïŒïŒ{$ this-> result = $ this-> first + $ this-> second; } public function getResultïŒïŒ{return $ this-> result; } }
æé ã説æãããã¹ããæåãããŸãã
ããã§ã¯ãã¹ãããã®èª¬æã«ç§»ããŸãã ã¯ããã¡ãªã¿ã«ããã¡ã€ã«æ©èœ/ãµããŒã/includes.phpã®èšç®æ©ã®ã¯ã©ã¹ã«ãã¡ã€ã«ãå«ããããšãå¿ããªãã§ãã ããã ã芧ã®ãšãããBehatã¯èŠªåã«æé ãå®çŸ©ããããã®ãã¿ãŒã³ãæäŸããŠãããŸããã ããããã³ããŒããŠå°ã調æŽãã features / steps / calc_steps.phpãã¡ã€ã«ã«ä¿åããŸã ã 次ã®ãããªãã®ãåŸãããã¯ãã§ãã
<ïŒphp $ steps->äžããããïŒ '/ ^ç§ã¯é»åãæã£ãŠããŸã$ /'ãfunctionïŒ$ worldïŒ{ $ world-> calc = new CalcïŒïŒ; }ïŒ; $ steps-> whenïŒ '/ ^ Iãæåã®æ°å$ /'ãšããŠïŒ\ d +ïŒãå ¥åããå ŽåãfunctionïŒ$ worldã$ numïŒ{ $ world-> calc-> setFirstïŒ$ numïŒ; }ïŒ; $ steps-> WhenïŒ '/ ^ Iã2çªç®ã®æ°å€$ /'ãšããŠïŒ\ d +ïŒãå ¥åããå ŽåãfunctionïŒ$ worldã$ numïŒ{ $ world-> calc-> setSecondïŒ$ numïŒ; }ïŒ; $ steps-> WhenïŒ '/ ^ I press \' Add \ '$ /'ãfunctionïŒ$ worldïŒ{ $ world-> calc-> addïŒïŒ; }ïŒ; $ steps-> ThenïŒ '/ ^çµæã¯ïŒ\ d +ïŒ$ /'ãfunctionïŒ$ worldã$ resïŒ{ assertEqualsïŒ$ resã$ world-> calc-> getResultïŒïŒïŒ; }ïŒ; ïŒ>
ãã¹ããåéããŸã-åºæ¥äžããã§ãïŒ ãã¹ãã«åæ ŒããŸãã:)
æ©èœïŒè¿œå æããªééããé¿ããããã« æ°åŠãã«ãšã㊠2ã€ã®æ°åã®åèšãæããŠããããã ã·ããªãªïŒïŒfeatures / calc.featureïŒ6 èšç®æ©ïŒfeatures / steps / calc_steps.phpãããå ŽåïŒ5 æåã®çªå·ãšããŠ30ãå ¥åããå ŽåïŒfeatures / steps / calc_steps.phpïŒ9 ãããŠã2çªç®ã®çªå·ãšããŠ20ãå ¥åããŸããïŒfeatures / steps / calc_steps.phpïŒ13 ãããŠããè¿œå ããæŒããŸãïŒfeatures / steps / calc_steps.phpïŒ17 ãã®åŸãçµæã¯50ïŒfeatures / steps / calc_steps.phpã«ãªãã¯ãã§ãïŒ21 1ã·ããªãªïŒ1åæ ŒïŒ 5ã¹ãããïŒ5åæ ŒïŒ 0.114ç§
ããŒãžããã¹ãããããšããŠããŸãã
ãã¡ãããã¯ã©ã¹ã®åäœããã¹ãããããšã¯ãããžã§ã¯ãã®éèŠãªéšåã§ãã ãããã顧客ã¯ããã€ãã®ããã«ãç§ãã¡ããã®äœæ¥ã¯ã©ã¹ã§ã¯ãªããæ£ããæ©èœããïŒåœŒã®æèŠã§ã¯ïŒã¢ããªã±ãŒã·ã§ã³ãæãã§ããŸãã ç°¡åã«èšãã°-圌ã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®æ£ããæäœãå¿ èŠã§ãã çŸåšã®åäœã®æ€èšŒã Ruby on Railsã¯åŸæ¥ãcucumer + webrat + nokogiriã䜿çšããŠããŒãžããã¹ãããŸãã PHPã®äžçã§ã¯ããã¹ãŠãå°ãè€éã§ããããšãå€æããŸãã...ãã®ããŒãžã«ãããšããŒãŒããèªäœã¯ããã®ããã«Symfony 2ã«åºã¥ããGoutteã©ã€ãã©ãªã䜿çšããããšã瀺åããŠããŸãã ãç»é²è§£é€ããŠãã ããïŒã Goutteã®ã€ã³ã¹ããŒã«ã¯éåžžã«ç°¡åã§ããpharã¢ãŒã«ã€ããããŠã³ããŒãããŠenv.phpã«æ¥ç¶ããŸãã
ãã¹ãã®äŸãšããŠãç°¡åãªããŒãžãã¹ã±ããããŸããã
<ïŒDOCTYPE html> <html> <head> </ head> <æ¬äœ> <div> <ïŒ ifïŒ$ _GET ["submit"]ïŒ{ echo "Text ="ã $ _GET ['textfield']ã "<br />"; echo "Checkbox ="ã $ _GET ['ãã§ãã¯ããã¯ã¹']ã "<br />"; echo "Radio ="ã $ _GET ['radio']ã "<br />"; echo "Select ="ã $ _GET ['selectbox']ã "<br />"; } ïŒ> </ div> <form method = "get" action = "behat.php"> <div> <input type = "text" name = "textfield" value = ""> </ div> <div> <å ¥åã¿ã€ã=ããã§ãã¯ããã¯ã¹ãåå=ããã§ãã¯ããã¯ã¹ãå€=ããã§ãã¯ããã¯ã¹ã> </ div> <div> <å ¥åã¿ã€ã= "ã©ãžãª"åå= "ã©ãžãª"å€= "ã©ãžãª1"ãã§ãã¯= "ãã§ãã¯"> <å ¥åã¿ã€ã= "radio" name = "radio" value = "radio2"> <å ¥åã¿ã€ã= "radio" name = "radio" value = "radio3"> </ div> <div> <select name = "selectbox"> <option value = "option1" selected = "selected"> option1 </ option> <option value = "option2"> option2 </ option> <option value = "option3"> option3 </ option> </ select> </ div> <div> <å ¥åã¿ã€ã=ãéä¿¡ãåå=ãéä¿¡ãå€=ãéä¿¡ã> </ div> <div id = "linkdiv"> <a href="behat.php?textfield=text&checkbox=checkbox&radio=radio3&selectbox=option2&submit=Submit">ã¯ãªãã¯</a> </ div> </ form> </ body> </ html>
ã¿ã¹ã¯ïŒãã®ãã©ãŒã ã®åäœã確èªããŸãã ã¯ããã¿ã¹ã¯ã¯éåžžã«åæçã§ãããããã¯åãªãäŸã§ã:)ããã§ããã¹ãã®ãªã¹ããã«ããŒããŸãïŒ
æ©èœïŒãã¹ã ãã©ãŒã ãéä¿¡ããåŸããã£ãŒã«ãã®ãã¹ãŠã®å€ ããŒãžã®äžéšã«è¡šç€ºããå¿ èŠããããŸã ã·ããªãªïŒãã£ãŒã«ããåãã ç§ããã¹ãããŒãžã«ãããšä»®å®ã㊠ãéä¿¡ããã©ãŒã ã§ãããã¹ããã£ãŒã«ããã«ãããã¹ãããå ¥åãããš ãããŠããã©ãŒã 'Submit'ãéä¿¡ããŸã 次ã«ããããã¹ã=ããã¹ããã衚瀺ãããŸã ã·ããªãªïŒãã§ãã¯ããã¯ã¹ããªã³ã«ãã ç§ããã¹ãããŒãžã«ãããšä»®å®ã㊠ãã©ãŒã ãéä¿¡ãã®ãã§ãã¯ããã¯ã¹ããã§ãã¯ããã¯ã¹ãã«ãã§ãã¯ããŒã¯ãä»ãããš ãããŠããã©ãŒã 'Submit'ãéä¿¡ããŸã 次ã«ãããã§ãã¯ããã¯ã¹=ãã§ãã¯ããã¯ã¹ãã衚瀺ãããŸã ã·ããªãªïŒã©ãžãªã®éžæ ç§ããã¹ãããŒãžã«ãããšä»®å®ã㊠ãSubmitããã©ãŒã ã®ãradioãã©ãžãªã§ãradio2ããéžæãããš ãããŠããã©ãŒã 'Submit'ãéä¿¡ããŸã 次ã«ããRadio = radio2ãã衚瀺ãããŸã ãã®åŸããRadio = radio1ãã衚瀺ãããªãã¯ãã§ã ã·ããªãªïŒéžæããã¯ã¹ã§ãªãã·ã§ã³ãéžæãã ç§ããã¹ãããŒãžã«ãããšä»®å®ã㊠ãã©ãŒã ãéä¿¡ãã®éžæããã¯ã¹ãselectboxãã§ãoption3ããéžæãããš ãããŠããã©ãŒã 'Submit'ãéä¿¡ããŸã 次ã«ããSelect = option3ãã衚瀺ãããŸã ãã®åŸããSelect = option1ãã衚瀺ãããªãã¯ãã§ã ã·ããªãªïŒããã€ãã®ãã£ãŒã«ããåãã ç§ããã¹ãããŒãžã«ãããšä»®å®ã㊠ãã©ãŒã ãSubmitãã«ä»¥äžãå ¥åãããšïŒ | ããã¹ããã£ãŒã«ã| ããã¹ã| | ãã§ãã¯ããã¯ã¹| ç| | ã©ãžãª| radio3 | | ã»ã¬ã¯ãããã¯ã¹| ãªãã·ã§ã³2 | ãããŠããã©ãŒã 'Submit'ãéä¿¡ããŸã 次ã«ããããã¹ã=ããã¹ããã衚瀺ãããŸã ãããŠãç§ã¯ããã§ãã¯ããã¯ã¹=ãã§ãã¯ããã¯ã¹ãã衚瀺ãããã¯ãã§ã ãããŠããRadio = radio3ãã衚瀺ãããã¯ãã§ãã ãããŠããdivãå ã«ãSelect = option2ãã衚瀺ãããã¯ãã§ãã ã·ããªãªïŒãªã³ã¯ãã¯ãªãã¯ãã ç§ããã¹ãããŒãžã«ãããšä»®å®ã㊠ã#linkdivãå ã®ãClick meããªã³ã¯ãã¯ãªãã¯ãã㚠次ã«ããããã¹ã=ããã¹ããã衚瀺ãããŸã ãããŠãç§ã¯ããã§ãã¯ããã¯ã¹=ãã§ãã¯ããã¯ã¹ãã衚瀺ãããã¯ãã§ã ãããŠããRadio = radio3ãã衚瀺ãããã¯ãã§ãã ãããŠããdivãå ã«ãSelect = option2ãã衚瀺ãããã¯ãã§ãã ãããŠããSubmitããã©ãŒã ã®ãtextfieldããã£ãŒã«ãã¯ç©ºçœã«ããå¿ èŠããããŸã
ãã¹ãã®ãã©ãŒã ããéä¿¡ããšåŒã°ããçç±ã®ç°¡åãªèª¬æã Goutteã§ã¯ããã©ãŒã ã¯éä¿¡ãã¿ã³ã§éžæãããŸãã ãã¿ã³èªäœã¯IDãŸãã¯å€ã§æ€çŽ¢ãããŸãã ãããŠããã¹ãããŒãžã®ãã¿ã³ã¯èªãããã«Submitãšããååã«ãªã£ãŠããããããã®èšèé£ãã§ãã
å€ãã®æé ããããæé ã¯ç°ãªãã誰ããGoutteã§ã®äœæ¥ã«é¢äžããŠããŸãã 幞ããªããšã«ããããã®ãã¹ãŠã®æé ã¯ãã§ã«èª¬æãããŠããããã¡ã€ã«ã«ãŸãšããããŠããŸãã gitãªããžããªgitïŒ//github.com/DarthSim/behat_websteps.gitããç®çã®ãã®ããã«ã§ããŸãã ãªããžããªã«ã¯æ¬¡ã®ãã®ããããŸãã
- æ©èœ/ãµããŒã/ãã¹ãããŒãžçšã«æ¢ã«æ§æãããç°å¢ãæã€env.phpãã¡ã€ã« ã
- ãã¡ã€ã«æ©èœ/ãµããŒã/ãã¹ã説æããpaths.php ïŒè©³çŽ°ã¯ä»¥äžïŒ;
- ã¯ã©ã¹ãæ¥ç¶ããããã®æ©èœ/ãµããŒã/includes.phpãã¡ã€ã«ã
- ãã¡ã€ã«æ©èœ/ãµããŒã/ goutte.phar-å®éã«ã¯Goutteã
- ããŒãžããã¹ãããããã®ã¹ãããã®èª¬æãå«ãæ©èœ/ã¹ããã/custom.phpãã¡ã€ã« ã
éå±€ãä¿æãããŸãŸããããžã§ã¯ããšå ±ã«ãã©ã«ããŒã«ãã¡ã€ã«ãã³ããŒãããã¹ããå®è¡ããŸãã ãããŠããšã©ãŒãçºçããŸã...
Unknown path 'test page'. You can define it in [features_folder]/support/paths.php
ãšã©ãŒã¯ããèªäœãç©èªã£ãŠããŸã-ãã¹ãã¯ãã©ã®çš®é¡ã®ããã¹ãããŒãžãããã§ãã¯ãããããç¥ããŸããã æãç°¡åãªä¿®æ£æ¹æ³ã¯ã features / support / paths.phpãã¡ã€ã«ã§ ããã¹ãããŒãžãããŒãžã®ãã¹ãèšå®ããããšã§ã ã ãã¹ãããŒãžãtests.dev/behat.phpã«ãããšããŸã ããã®ããããã¹ãã¡ã€ã«ã«æ¬¡ã®ããã«èšè¿°ããå¿ èŠããããŸãã
$world->paths['test page'] = "http://tests.dev/behat.php";
ãã¹ããå®è¡ããŸã-çŽ æŽãããããã¹ãã«åæ ŒããŸããïŒ æ®ãã®ã¹ãããã®åæã¯ãwebratã®é¡äŒŒç©ã«äŒŒãŠãããããèªè ã«ä»»ããŸãã ãã¡ãããçµæã®æ©èœã¯webratãããã¯ããã«å£ã£ãŠããŸãããããã¯ã»ãã®å§ãŸãã«éããªããšæããŸãã
çµè«ãå°ãããªã³ã¯ãæäŸãã
ãããã£ãŠãBehatã¯PHPã®äžçã§Cucumberã®åŸç¶ã«ãµãããããšèšã£ãŠãéèšã§ã¯ãããŸããã ã©ã€ãã©ãªã¯ãŸã ããŒãžã§ã³1.0ã«æé·ããŠããŸãããããã§ã«é«å質ã®å®æåãè¡šããŠããŸãã ç§ãã¡ã¯ãéçºè ã圌ã®çºæ¡ã®éçºã«æåããããšãæã¿ã圌ã«è¯ãå ç·ãéããŸãã 以äžã¯äŸ¿å©ãªãªã³ã¯ã§ãã
githubã®Behatãªããžããª
Behat WIKI
Behat API
Goutteãªããžããª
Symfony 2 API ïŒGoutteã«åœ¹ç«ã¡ãŸãïŒ