çµ±åãã¹ãã¿ã¹ã¯ã¯æ¬¡ã®ããã«å®åŒåãããŸãããã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ããèªååããŠãã€ã³ã¹ããŒã«ãããããŒãžã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãªãã¹ãã·ããªãªããã¹ãŠæ£åžžã«å®è¡ããããšããã°ãã確èªã§ããããã«ããŸãã
ã€ãŸããæ°ããããŒãžã§ã³ã顧客ã«ã€ã³ã¹ããŒã«ããŠäœæ¥ãéå§ãããšã©ããªããããã°ãã確èªããå¿ èŠããããŸãã ãããã®ãã¹ãã®çµæã¯äœæãããã¢ããªã±ãŒã·ã§ã³ã®å質ã®ææšã§ãããããã¢ããªã±ãŒã·ã§ã³ã®å質ããããã£ãŠçŸåšã®ç¶æ³ãåžžã«ç¥ãããšãã§ããŸãã
çµ±åãã¹ãã§ã¯ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãã·ãã¥ã¬ãŒãã§ãããããToRã®ç¹å®ã®ãã€ã³ããæ£åžžã«å®äºãããšããäºå®ãæ€èšŒã§ãããšèšããŸãã TORã®åé ç®ã®ãã¹ããäœæãïŒããã°ã©ã ãšãã¹ãæ¹æ³è«-PMIïŒãååŸïŒãããããèªååããå Žåãæ£åžžã«å®äºãããã¹ãã®æ°ã¯ãTKãäœããŒã»ã³ãå®äºãããã«é¢ããå®éã®æ å ±ãæå³ããŸãã ãã以å€ã®å Žåãã·ã¹ãã ã®ç¶æ ã®è©äŸ¡ã¯æ¬¡ã®ããã«ãªããŸãã
ããŸããäžèšã§èšãã°ãä»æ¥ã®ã·ã¹ãã ã¯ã©ãã§ããïŒã
ãäžèšã§èšãã°ã...ããã¯æ©èœããŸããã
-ãããŠãç°¡åã«èšãã°ïŒ
-ç°¡åã«èšãã°ãæ©èœããŸããã
ãã®ãããªãã¹ãäžã«ç¢ºèªããå¿ èŠããããã®ïŒ
-ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã€ã«ãšã¢ã»ã³ããª
-ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãŸãã¯æŽæ°ããæé ïŒ
-æ°èŠããŒã¿ããŒã¹ã®ã€ã³ã¹ããŒã«ãŸãã¯æ¢åã®ããŒã¿ããŒã¹ã®æŽæ°
-æ°ããASP.NETã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«
-ããããã®ãã¹ãã·ããªãªã®å®è¡ïŒ
-ã·ã¹ãã ã¯ã¹ã¯ãªãããå®è¡ããæºåãã§ããŠããŸãã åã·ããªãªã«ã¯åææ¡ä»¶ããããããã·ã¹ãã ããããã®æ¡ä»¶ã«é©åãããå¿ èŠããããŸãã ããšãã°ããŠãŒã¶ãŒãã·ã¹ãã ã§3ã€ã®æ³šæãäœæããå¿ èŠãããã·ããªãªã®å ŽåããŠãŒã¶ãŒããŒã¿ããŒã¹ã§äœããã®æ¹æ³ã§3ã€ã®æ³šæãååŸããå¿ èŠããããŸãã
-ãã¹ãã¹ã¯ãªããã¯ããã©ãŠã¶ãŒã§ã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã®ãšãã¥ã¬ãŒã·ã§ã³ãéããŠå®è¡ãããŸãã
-ã·ã¹ãã ã¯ãã¹ã¯ãªãããå®è¡ãããåã®ç¶æ ãå®éã«ã¯ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããçŽåŸã®ç¶æ ã«æ»ããŸã
-ã¢ããªã±ãŒã·ã§ã³å質ã®å ±å
-å質ãããã£ãŠããã¢ããªã±ãŒã·ã§ã³ãå«ãã€ã³ã¹ããŒã«ããã±ãŒãžã®ã¢ã»ã³ããªã
ãã®ããã»ã¹ãäžã®å³ã«ç€ºããŸãã
ãã®ã¹ããŒã ã«ãããæŽæ°ãããã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«äžããã³ã€ã³ã¹ããŒã«åŸã«ç£æ¥ç°å¢ã§å®è¡ãããã®ãšåãã¢ã¯ã·ã§ã³ãéçºè ã®ãã·ã³ãšContinues Integration Serverã§åçŸã§ããããšã«æ³šæããŠãã ããã
åºæ¬æ§æ
以äžã«ãçµ±åãã¹ãããã³ç£æ¥çšäœ¿çšäžã«ç°ãªãç°å¢ã«æ§æãå±éããæ¹æ³ã瀺ããŸãã ãã¹ãŠã®ç°å¢ã§ã®ã¢ããªã±ãŒã·ã§ã³ãšã®çžäºäœçšã¯åãã§ããããšã«ããã«æ³šæããŸãã ã¢ããªã±ãŒã·ã§ã³ãšã®å¯Ÿè©±ã¯ãã©ãŠã¶ãä»ããŠè¡ãããããŒã¿ããŒã¹ã¯ããŒã¿ããŒã¹æŽæ°ã¹ã¯ãªããã®åœ¢åŒã§æŽæ°ãããASP.NETã¢ããªã±ãŒã·ã§ã³ã¯æšæºã®å±éãä»ããŠæŽæ°ãããŸãã
Developer Machineã§ã®æ§æ
éçºè ã®æ§æã§ã¯ãVisual Studioãã¡ã€ã³ããŒã«ãšããŠäœ¿çšãããŸãã
ãã®æ§æã§ã¯ãéçºè ã®ãã·ã³ã§DBMSã䜿çšããããšã«ãªã£ãŠããŸãã ãã®ãªãã·ã§ã³ã¯ããã¹ãŠã®éçºè ã1ã€ã®å ±éããŒã¿ããŒã¹ã䜿çšããå Žåã®ãªãã·ã§ã³ãããåªããŠãããšæããŸãã äžæ¹ã§ã¯ãå ±éã®ããŒã¿ããŒã¹ã¯ç¶æè²»ãå®ãããã¹ãŠã®éçºè ã¯åžžã«ããŒã¿ããŒã¹ã®ææ°ããŒãžã§ã³ãæã£ãŠããŸãã ãããäžæ¹ã§ããã®ãããªããŒã¿ããŒã¹ã§ã¯ãéçºè ãäœããã®æ€èšŒãè¡ãã®ãå¿ãããããããšãã°ãããã€ãã®èª€ã£ã泚æãå ¥åã§ãããªã©ãããŒã¿ã®æŽåæ§ã®éåãç°¡åã«ååŸã§ããŸãã ãã¡ããã圌ã¯åŸã§æ€èšŒãè¡ããããå€ãã®äžæ£ãªæ³šæãã·ã¹ãã ã«äœæãããããšã¯ãããŸããã ããããå¥ã®éçºè ã¯ãééã£ãé åºã§æ©èœããããã°ãç¶ããå€ãã®é ãããšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã
å人çšããŒã¿ââããŒã¹ã®å Žåãå®å šãªããŒã¿ãäœæããã¿ã¹ã¯ã¯ãæ瀺çã§ç°¡åã«è§£æ±ºã§ããŸãã ããã«ã€ããŠã¯ãããªãã«ããªãã¯ãã»ã¯ã·ã§ã³ã§èª¬æããŸãã
çµ±åãã¹ãã®åã«ãéçºè ã¯äœæ¥çšããŒã¿ããŒã¹ãç£æ¥çšãµãŒããŒããçµ±åãã¹ãDBMSã«åŸ©å ããå¿ èŠããããŸãã ãã¡ãããç£æ¥çšã¹ã¿ã³ãããäœæ¥çšããŒã¿ããŒã¹ãååŸããã®ã¯éçŸå®çã§ãããããŒã¿ããŒã¹ã®æŽæ°ããã»ã¹ãæ£ãã確èªããã«ã¯ãå¯èœãªéãè¿ãããŒã¿ããŒã¹ãå¿ èŠã§ãã ãªãã·ã§ã³ãšããŠãäœæ¥çšããŒã¿ããŒã¹ã®å¿ååãè¡ãããšãã§ããŸããã€ãŸããäœæ¥çšããŒã¿ããŒã¹ã®ã³ããŒãäœæããŠããã顧客ã®ååãšå¥çŽã®éãå€æŽããŠãåçšæ å ±ãéçºè ããã¹ã¿ãŒã«ââå±ããªãããã«ããŸãã
ãã¹ãã®æåã®æ®µéã¯ãããŒã¿ããŒã¹ã®å±éãæ€èšŒããããšã§ããã€ãŸããéçºè ã¯ããŒã¿ããŒã¹ãå ¬éããŸãã ãããè¡ãã«ã¯ãéçºè ãããŒã¿ããŒã¹ãããžã§ã¯ããã¿ãŒã²ããããŒã¿ããŒã¹ã«å ¬éããŸãã ãããžã§ã¯ãã®ã¢ã»ã³ããªäžã«ãVisual Studioã¯ã¿ãŒã²ããããŒã¿ããŒã¹ã«ã¯ããŒã«ããçŸåšã®ãããžã§ã¯ãã®ã¹ã¯ãªãããšæ¯èŒããŠãå®è¡ãããå·®åã¹ã¯ãªãããäœæããŸãã ããã§ãšã©ãŒãçºçããå¯èœæ§ããããŸããããšãã°ãã»ã«ã³ããªããŒãåç §ãããã£ãŒã«ãã®äœæãå¿ããããåæããŒã¿ã®æ¿å ¥æã«ãã©ã€ããªããŒã®ç«¶ââåãçºçãããããŸãã éçºè ã¯ãå®è£ 段éã§ã¯ãªããã¹ã段éã§ãããã®ãšã©ãŒããã¹ãŠæ€åºããŠä¿®æ£ããããšãããããŸããã誰ãããããã©ãã»ã©ç¥çµãç¯çŽãããç¥ã£ãŠãããšæããŸãã
次ã®ã¹ãããã§ã¯ãéçºè ã¯Visual Studioãã¹ãã©ã³ããŒãéããŠãã¹ããå®è¡ããŸãã å®è¡äžã®çµ±åãã¹ãã¯ããã¹ãã«å¿ èŠãªããŒã¿ã§ããŒã¿ããŒã¹ãæºãããããã«ãã£ãŠãã¹ãã®äºåèŠä»¶ãæºãããŸãããã®åŸããã¹ãã¯Selenium RC Serverãä»ããŠãã©ãŠã¶ãŒãåŒã³åºãããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãã·ãã¥ã¬ãŒãããŸãã ãã¹ãã®çµæã¯ãã©ãŠã¶ãä»ããŠå床ãã§ãã¯ãããŸãããŸããåç §ãšæ¯èŒããããã«ããŒã¿ããŒã¹ããããŒã¿ãååŸããããšãã§ããŸãã
ãã¹ããå®äºãããšãããŒã¿ããŒã¹ã¯å ã®ç¶æ ã«æ»ããŸãã
ãã®çµæããã¹ãã®å®è¡åŸãã·ã¹ãã ã®äžè¬çãªç¶æ ã確èªã§ããŸãã
Continuesçµ±åãµãŒããŒã§ã®æ§æ
ããã§ã¯ãVisual Studioã®ä»£ããã«Continuesçµ±åãµãŒããŒã䜿çšãããŸããããã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯éçºè ã®ãã·ã³äžã®ã¢ã¯ã·ã§ã³ã«äŒŒãŠããŸã
ç£æ¥çšæ§æ
ç£æ¥ç°å¢ã§ã¯ãæŽæ°ããã°ã©ã ã¯ãçµ±åãã¹ãã®å Žåãšåãããã«ç£æ¥ç°å¢ã§åäœããã€ã³ã¹ããŒã©ãŒãä»ããŠã€ã³ã¹ããŒã«ãããŸãã ãŠãŒã¶ãŒã¯ããã¹ãã§ãã¹ããããã®ãšåãæ¹æ³ã§ã·ã¹ãã ãæäœããŸãã äžå¿«ãªé©ãã¯ãã§ã«ããã¯ãã§ãã
å¿ èŠãªããŒã«
å¿ èŠãªã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæããã«ã¯ã次ã®ããŒã«ãå¿ èŠã§ãã
ããã€ãã®ãããžã§ã¯ããå«ãVisual Studioãœãªã¥ãŒã·ã§ã³ïŒ
-ãããžã§ã¯ããSQL Server Database Projectãã ãåãã®ããã«ããã®ãããªãããžã§ã¯ãã§ã¯ãããŒã¿ããŒã¹ã®æ§é ãšåæã³ã³ãã³ããéçºããããã«å¿ èŠãªãã¹ãŠã®DDLããã³SQLã¹ã¯ãªãããä¿åã§ããŸãã ãã®ãããžã§ã¯ãã®äž»ãªå©ç¹ã¯ãæ¢åã®ããŒã¿ããŒã¹ãææ°ããŒãžã§ã³ã«æŽæ°ããããã®å·®åã¹ã¯ãªãããçæã§ããããšã§ãã ããã«ãããæ¢åã®ããŒã¿ãåé€ããã«æŽæ°ããã°ã©ã ãã€ã³ã¹ããŒã«ã§ããŸãã ããã«ããã®æäœã¯MSBuildãä»ããŠèªååããContinuous IntegrationãµãŒããŒã§å®è¡ã§ããŸãã
-ASP.NETã¢ããªã±ãŒã·ã§ã³ã䜿çšãããããžã§ã¯ãã ã¢ããªã±ãŒã·ã§ã³èªäœãå«ãŸããŠããŸãã ãã®ãããžã§ã¯ãã¯ããµãŒããŒãžã®Webã¢ããªã±ãŒã·ã§ã³ã®å±éã確èªãââãããã«ã䜿çšãããŸãããããMSBuildã䜿çšããŠèªåçã«è¡ãããŸãã
-çµ±åãã¹ããå«ããããžã§ã¯ãã ããã¯MSTestãŸãã¯NUnitãããžã§ã¯ãã§ãã ãã®ãããžã§ã¯ãã¯ããã¹ãã®å®è¡ãšãã¹ãã¬ããŒãã®äœæã«äœ¿çšãããŸãã
ããã¯ãèªååãããçµ±åãã¹ããç·šæããããã«å¿ èŠãªãããžã§ã¯ãã®æå°ã»ããã§ãã
ãã¡ããããœãªã¥ãŒã·ã§ã³ã¯SVNãªã©ã®ããŒãžã§ã³ç®¡çã·ã¹ãã ã«ä¿åãããŸãã
ããã«ããœãªã¥ãŒã·ã§ã³ã«ã¯nuGetããã±ãŒãžãSelenuim Remote Contolããå«ãŸããŠããŸãã æ®å¿µãªãããSelenim IDEã¯æ°ãããSelenium WebDriverããå®å šã«ãµããŒãããŠããªããããSelenim IDEããCïŒã³ãŒããžã®ãã¹ãã¹ã¯ãªããã®ãšã¯ã¹ããŒãã¯ãRemote Contolã§ã®ã¿å¯èœã§ãã ããããªããšãäžéšã®ã¹ããããCïŒã«ãšã¯ã¹ããŒãããããæäœæ¥ã§äœæããå¿ èŠããããŸããããã¯ãSelenim IDEããã®ãšã¯ã¹ããŒããããèããé ããªããŸãã
ãSelenuim Remote Contolãã®å ŽåãJavaã¢ããªã±ãŒã·ã§ã³ãselenium-server-standalone-xxxjarããå¿ èŠã§ã
ãã¹ãããã°ãã䟿å©ã«èšé²ããã«ã¯ãSelenim IDEã¢ããªã³ãã€ã³ã¹ããŒã«ãããFireFoxãå¿ èŠã§ãã
SVNããåžžã«ææ°ããŒãžã§ã³ãååŸããŠãã¹ããå®è¡ããã«ã¯ãContinues IntegrationãµãŒããŒãå¿ èŠã§ãã
ç°å¢èšå®
äžèšã®è£œåãããŸããŸãªã¹ã¿ã³ãã§ã€ã³ã¹ããŒã«ããã³æ§æããæ¹æ³ã瀺ããŸãã
ããŒã¿ããŒã¹ãããžã§ã¯ã
ããŒã¿ããŒã¹ã®èšèšããå§ããŸãããã ããŒã¿ããŒã¹ãããžã§ã¯ãã«ã¯ãããã€ãã®publish.xmlãã¡ã€ã«ãå«ããããšãã§ããŸããåãã¡ã€ã«ã«ã¯ãããŒã¿ããŒã¹ã®å ¬éå Žæãšå ¬éæ¹æ³ãèšè¿°ãããŠããŸãã åéçºè ã®ããŒã¿ããŒã¹ã¯ç¬èªã®ã¢ãã¬ã¹ã«ããããããããã®ãã¡ã€ã«ã¯ããŒãžã§ã³ç®¡çã·ã¹ãã ããåé€ããéçºè ããšã«åå¥ã«æ§æããå¿ èŠããããŸãã
ããŒã¿ããŒã¹ãå ¬éããã«ã¯ãVisual Studioã§ãã®ãã¡ã€ã«ãå³ã¯ãªãã¯ãã[å ¬é]ãéžæããŸãã å ¬éã¯ãå±éãªãã·ã§ã³ããããžã§ã¯ãããããã£ã«ä¿åãããå ¬éãªãã·ã§ã³ãpublish.xmlã«ä¿åãããããšãé€ããŠãå±éã«äŒŒãŠããŸãã
ã³ãã³ãã©ã€ã³ããããŒã¿ããŒã¹ãå ¬éããã«ã¯ã次ã®ã³ãã³ããåŒã³åºãå¿ èŠããããŸãã
> MSBuild / tïŒçºè¡/ pïŒSqlPublishProfilePath = beatmypublishfile.publish.xml»DBProject.sqlproj
Webã¢ããªã±ãŒã·ã§ã³
Visual Studioã®ASP.NETã¢ããªã±ãŒã·ã§ã³ã¯ããå®è¡ãã³ãã³ãã䜿çšããŠèµ·åããããæšæºã®Visual StudioããŒã«ã䜿çšããŠå±éã§ããŸãã Continues Integration Serverã§ã¯ãããã¯ãxCopyãªã©ãããŸããŸãªæ¹æ³ã§ãå®è¡ã§ããŸãã ããã«ã€ããŠã¯ããå°ã詳ãã説æããŸããããªããªããäžæ¹ã§ã¯éåžžã«å€ãã®è³æã§ãããä»æ¹ã§ã¯ã€ã³ã¿ãŒãããäžã§ç°¡åã«èŠã€ããããšãã§ããããã§ãã
SeleniumãµãŒããŒ
ããããããŠã³ããŒãã§ããSelenium RCãµãŒããŒãå¿ èŠã«ãªããŸãïŒ docs.seleniumhq.org/download
次ã®ã³ãã³ãã§ãµãŒããŒãèµ·åããŸã
> java -jar cïŒ\ selenium \ selenium-server.jar -multiwindow
ãµãŒããŒã®å®è¡äžã«ããã¹ããå®è¡ã§ããŸãã
çµ±åãã¹ããå«ããã¹ããããžã§ã¯ã
ããã¯ãMSTestãããžã§ã¯ããŸãã¯NUnitãããžã§ã¯ãã§ãã
ãŸããnuGetããã±ãŒãžSelenium.RCãã€ã³ã¹ããŒã«ããå¿ èŠããããŸã
åãã¹ãã®åé ã§æ¢ã«è¿°ã¹ãããã«ãããŒã¿ããŒã¹ã«ãã¹ãçšã®ããŒã¿ãå ¥åããSQLã¹ã¯ãªãããå®è¡ããå¿ èŠããããŸãã ç§ã¯SQL Server Management Studioã§äœæãããã¹ã¯ãªãããé »ç¹ã«äœ¿çšãããããGOã³ãã³ãã¯åžžã«ã¹ã¯ãªããå ã«ãããŸãã ãã®ãããªã¹ã¯ãªãããå®è¡ããã«ã¯ãsmoã©ã€ãã©ãªã䜿çšãããŸãããããã¯MSSQL Server SDKã®äžéšãšããŠã€ã³ã¹ããŒã«ã§ããããã€ãã®ã¢ã»ã³ããªã§ãããšãã°ãCïŒ\ Program FilesïŒx86ïŒ\ Microsoft SQL Server \ 110 \ SDK \ Assembliesãã«ãããŸããããããã¯.Net 2.0çšã«ã³ã³ãã€ã«ãããŠããããã.Net 4.0以åã§åäœãããããšã¯ã§ããŸããã ãããã£ãŠããã¹ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéåžž.Net 3.5çšã«æ§æããŸãã
ãã®åŸããã¹ããããžã§ã¯ãã§ãã®ãããªè£å©ã¯ã©ã¹ãäœæã§ããŸãã
public class TestDBHelper { public static void ExecScript(String scriptName) { string sqlConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["TestDBConnection"].ConnectionString; FileInfo file = new FileInfo(Path.Combine("SQL", scriptName)); string script = file.OpenText().ReadToEnd(); SqlConnection conn = new SqlConnection(sqlConnectionString); Server server = new Server(new ServerConnection(conn)); server.ConnectionContext.ExecuteNonQuery(script); } public static void BackupBeforeTest() { TestDBHelper.ExecScript("BackupBeforeTest.sql"); } public static void RestoreAfterTest() { TestDBHelper.ExecScript("RestoreAfterTest.sql"); } }
ãã¹ãŠã®SQLã¹ã¯ãªããã¯ãSQLããã©ã«ããŒã®åããã¹ããããžã§ã¯ãã«ãããåã¹ã¯ãªããã®ãåºåãã£ã¬ã¯ããªã«ã³ããŒãããããã£ã¯ãæ°ããå Žåã«ã³ããŒãã«èšå®ãããŠããŸãã
ã¹ã¯ãªãããBackupBeforeTest.sqlãããã³ãRestoreAfterTest.sqlãã®å 容ã¯ä»¥äžã®ãšããã§ãã
ãã®çµæããã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
[TestClass] public class SimpleTest { private ISelenium selenium; private StringBuilder verificationErrors; [TestInitialize] public void Init() { TestDBHelper.BackupBeforeTest(); TestDBHelper.ExecScript("CreateTestUser.sql"); selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://localhost:12945/"); selenium.Start(); verificationErrors = new StringBuilder(); } [TestCleanup] public void CleanUp() { selenium.Stop(); TestDBHelper.RestoreAfterTest(); } [TestMethod] public void TestLogin() { if (selenium.IsElementPresent("link= []")) { selenium.Click("link= []"); selenium.WaitForPageToLoad("30000"); } selenium.Open("/"); selenium.Click("link="); selenium.WaitForPageToLoad("30000"); selenium.Type("id=UserName", "TestUser"); selenium.Type("id=Password", "123456"); selenium.Click("css=input.btn"); selenium.WaitForPageToLoad("30000"); Assert.IsFalse(selenium.IsElementPresent("css=div.validation-summary-errors > ul > li"), " "); Assert.IsTrue(selenium.IsElementPresent("link= []"), " "); } }
ãã®ç°¡åãªãã¹ãã§ã¯ããŠãŒã¶ãŒã®ãã°ã€ã³ã確èªããŸãã
ãã¹ããå®è¡ããåã«ãããã¯ã¢ããããŒã¿ããŒã¹ãå®è¡ãããã¹ã¯ãªãããCreateTestUser.sqlããå®è¡ãããŸãããã®ã¹ã¯ãªããã¯ãå¿ èŠãªãã©ã¡ãŒã¿ãŒãæã€ãŠãŒã¶ãŒãäœæããã ãã§ãã
ãã¹ããå®äºãããšããã¹ãåŸã«æ®ã£ãŠããããŒã¿ã®ããŒã¿ããŒã¹ãã¯ãªã¢ããããã«ãããŒã¿ããŒã¹ãããã¯ã¢ãããã埩å ãããŸãã
æ®å¿µãªãããçµ±åãã¹ããäºãã«å®å šã«åé¢ããããšã¯ã§ããŸãããç¹ã«ãSeleniunããŒã«ã䜿çšãããšããASP.NET_SessionãCookieã¯HTTPOnlyãšããŠããŒã¯ãããŠããããããã©ãŠã¶ãŒããåé€ã§ããŸããã ãã®ããããŠãŒã¶ãŒãæåŸã®ãã¹ããããã°ã€ã³ãããŸãŸã§ãããã©ããã確èªããå¿ èŠããããŸããæ»åšããå Žåã¯ãã·ã¹ãã ãããã°ã¢ãŠããããŠãŒã¶ãŒãã·ãã¥ã¬ãŒãããã»ãã·ã§ã³ç¶æ ããªã»ããããå¿ èŠããããŸãã
ãã¹ãã®æ®ãã®éšåã¯ããªãæçœã§ãã ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããããšã©ãŒã¡ãã»ãŒãžããªãããšã確èªãããã·ã¹ãã ãçµäºãããªã³ã¯ã衚瀺ãããŸãã Selenium IDEã䜿çšããŠãã®ãããªãã¹ããäœæããæ¹æ³ã¯ã以äžãåç §ããŠãã ããã
FireFoxããã³Selenium IDEã ãã¹ãäœæ
Seleniumã䜿çšãããšãå€ãã®ãã©ãŠã¶ãŒã§ãã¹ããå®è¡ã§ããŸãããè¿ éã«äœæããã«ã¯ãFireFoxã«ãSelenium IDEããè¿œå ããŠã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ãã®Selenium IDEãåªããŠããã®ã¯ãªãã§ããïŒ
ãŸãããã¹ãããã°ããæžãã®ã«éåžžã«äŸ¿å©ã§ãã èšé²ã¢ãŒãããªã³ã«ããŠWebã¢ããªã±ãŒã·ã§ã³ã§ã®äœæ¥ãéå§ãããšãã»ã¬ã³ã¯ãã¹ãŠã®ã¢ã¯ã·ã§ã³ãèšé²ããŸãã ãã ããAJAXã¢ããªã±ãŒã·ã§ã³ã®å ŽåããµãŒããŒãå¿çããã®ãåžžã«åŸ ã€å¿ èŠãããããããã®ãSelenium IDEãã¯èªåçã«ã¯æ©èœããªããããããã¯ããŸããããŸããã ããã§ãããã®å Žåã§ãããã¹ãããã»ã¹ã«ãã®ãããªæåŸ ãå ããããšãã§ããŸãã
ãã®å³ã¯ããã£ã¬ã¯ããªå ã®ãšã³ããªã®å€æŽããã§ãã¯ãããã¹ãã®åãå ¥ãã瀺ããŠããŸãã ãã®ããŒãžã¯ãDevExpress MVCæ¡åŒµã䜿çšããŠå®è£ ãããå€ãã®AJAXã³ãŒããå«ãŸããŠããããããWaitFor ...ããªã©ã®ã¹ããããè¿œå ãããå¿ èŠãªæŽæ°ããã©ãŠã¶ã«è¡šç€ºãããã®ãåŸ ã¡ãŸãã
ãã1ã€ã®å€§ããªå©ç¹ã¯ããSelenium IDEãã䜿çšããŠãã¹ãããã°ãããããã°ã§ããããšã§ãã [ãã¹ãã®å®è¡]ãã¿ã³ãã¯ãªãã¯ããŠããã¹ãŠãæ©èœããããšã確èªããŸãã
ãã¹ãã®ãããã°åŸãã³ãã³ããExport Sute Asã/ãCïŒ/ NUnit / Remote Controlãã䜿çšããŠcïŒãã¡ã€ã«ã«ä¿åãããã¹ãã¡ãœããã®å 容ããã¹ããããžã§ã¯ãã«ã³ããŒã§ããŸãã ããã«ããããã¹ããããã«CïŒã§èšè¿°ããMSTestãŸãã¯NUnitãå®è¡ããŠãããã°ããå Žåã«æ¯ã¹ãŠããã¹ãã®äœæé床ãå€§å¹ ã«åäžããŸãã
ãŸããSelenium IDEã®æã泚ç®ãã¹ãç¹æ§ã¯ããã¹ã¿ãŒãç¬èªã®ç®çã§ãããã®ãã¹ããäœæã§ãããšããäºå®ã§ããããã¹ããéåžžã«éèŠãªå Žåã¯ãéçºè ã«æž¡ãããšãã§ããçµ±åãã¹ãã®ãªã¹ãã«è¿œå ã§ããããšã§ãã ãã®çµæããã¹ã¿ãŒã¯ãã¹ãã®äœæãæ¯æŽããŸããããã¡ããããã¹ã¿ãŒã¯ããŒã¿ããŒã¹ããã¹ãçšã«æºåããSQLã¹ã¯ãªãããäœæã§ããªãããšãå¿ããªãã§ãã ãããããã¯ãã¹ãã®éèŠãªéšåã§ãã
ã¡ãã£ãšããããªãã¯
ããŒã¿ããŒã¹ã§ã®ãã¹ãããŒã¿ã®äœæãšèªã¿èŸŒã¿
ãã¹ãã®ããŒã¿ã¯ãã·ã¹ãã ããã¹ãã®åææ¡ä»¶ã§èª¬æãããç¶æ ã«ããããã«å¿ èŠã§ãã ããšãã°ã3ã€ã®æ³šæãè¡ã£ããã€ã€ãŒãå¿ èŠã§ãã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããè³Œå ¥è ãšæ³šæãäœæããæãç°¡åãªæ¹æ³ã 次ã«ãå¿ èŠãªããŒãã«ããSQL Dumpã®åœ¢åŒã§SQLã¹ã¯ãªããã«ããŒã¿ãã¢ã³ããŒãããå¿ èŠããããŸãã ãããŠããã¹ãã®å®è¡æã«ãã®ã¹ã¯ãªããã䜿çšããŸãã
ãã®ãããªã¹ã¯ãªããã®äŸïŒ
SET IDENTITY_INSERT [dbo].[User] ON INSERT [dbo].[User] ([UserId], [Login], [Password], [DisplayName]) VALUES (1000001, N'TestUser', N'7dHZDOYgwADlGdinx9u/c4Cmhtc=', N' ') SET IDENTITY_INSERT [dbo].[User] OFF SET IDENTITY_INSERT [dbo].[Order] ON INSERT [dbo].[Order] ([OrderId], [UserId], [Description], [Price]) VALUES (1000001, 1000001, N' â1', 100.0) INSERT [dbo].[Order] ([OrderId], [UserId], [Description], [Price]) VALUES (1000002, 1000001, N' â2', 200.0) INSERT [dbo].[Order] ([OrderId], [UserId], [Description], [Price]) VALUES (1000003, 1000001, N' â3', 300.0) SET IDENTITY_INSERT [dbo].[Order] OFF
ãã®ã¹ã¯ãªããã¯ããSQL Dumperããªã©ã®ããã°ã©ã ãŸãã¯SQL Server Management StudioããååŸã§ããŸããSQLServer Management Studioã«ã¯ãããŒãã«ããŒã¿ãå«ãããŒã¿ããŒã¹ãªããžã§ã¯ãã§ã¹ã¯ãªãããçæããããã®åªãããŠã£ã¶ãŒãããããŸãã
-[ããŒã¿ããŒã¹ã¬ã³ãŒãèå¥åã®ç®¡ç]-
ããŒã¿äœæã¹ã¯ãªããã®èå¥åã1ã§ã¯ãªã1,000,000ã§å§ãŸãããšã«ãã§ã«æ°ã¥ãããšæããŸãã
ããã¯ãæŠéããŒã¿ããŒã¹ãããå Žåãããããå°ããªå€ã®èå¥åãæ¢ã«äœ¿çšãããŠããããããããã®å€ãã¹ã¯ãªããã«æ¿å ¥ããããšãããšãèå¥åã®äžææ§ã®éåãçºçããããã§ãã
ãããåé¿ããã«ã¯ãéçºããã³ãã¹ãããŒã¿ããŒã¹ã®èå¥åãžã§ãã¬ãŒã¿ãŒã®åæå€ã100äžãŸãã¯10åã«ããã«èšå®ããå¿ èŠããããŸãã
ãã¹ãåŸã®ããŒã¿ããŒã¹ã®ã¯ãªãŒã³ã¢ãã
æãç°¡åã§å¹æçãªæ¹æ³ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããããšã§ããããã®æ§æã§ã¯ããã¹ããšã¢ããªã±ãŒã·ã§ã³ã¯ç°ãªãããã»ã¹ã§å®è¡ãããäž¡æ¹ã®ããã»ã¹ã§åããã©ã³ã¶ã¯ã·ã§ã³ãç°¡åã«äœ¿çšããããšã¯ã§ããŸããã
ããã§ããããŒã¿ããŒã¹ããã¯ã¢ããã®ã·ã³ãã«ã§é«éãªã¡ã«ããºã ã䜿çšã§ããŸãã ãã ããéåžžã®ããã¯ã¢ããã®äœæãšåŸ©å ã¯æ¯èŒçé·ãããã»ã¹ã§ããããšã«æ³šæããå¿ èŠããããŸãããã¹ãããã·ã§ããããã¯ã¢ããããããŸããããã¯ãããŒã¿ããŒã¹ãè¿ éã«äœæããã³åŸ©å ããããã ãã«äœæãããŸããã
ãããã£ãŠãåãã¹ãã®åã«ããBackupBeforeTest.sqlããã¡ã€ã«ããããã¯ã¢ããã¹ã¯ãªãããäœæããŸã
USE [master] GO IF EXISTS (SELECT name FROM sys.databases WHERE name = N'MyDataBase_Spanpshot') DROP DATABASE MyDataBase_Spanpshot GO CREATE DATABASE MyDataBase_Spanpshot ON (NAME = 'DataBase_data_File', FILENAME = 'C:\MyDataBase_TestBU.SNP') AS SNAPSHOT OF MyDataBase;
ãããŠããã¹ãåŸã«ãRestoreAfterTest.sqlããã次ã®ã¹ã¯ãªããã埩å ããŸãã
USE master; DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'MyDataBase' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + ' BEGIN TRY Kill ' + Convert(varchar, SPId) + '; END TRY BEGIN CATCH END CATCH;' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId EXEC(@SQL) RESTORE DATABASE MyDataBase_Spanpshot from DATABASE_SNAPSHOT = 'MyDataBase_Spanpshot'; GO IF EXISTS (SELECT name FROM sys.databases WHERE name = N'MyDataBase_Spanpshot') DROP DATABASE MyDataBase_Spanpshot GO
ã芧ã®ãšããã埩å ããåã«ããã¹ãåŸã«æ¥ç¶ãããŸãŸã®ãã¹ãŠã®ãŠãŒã¶ãŒãåæããå¿ èŠããããŸãã ããããªããšãããŒã¿ããŒã¹ã埩å ã§ããŸããã
ãã¹ãåã®ããŒã¿ããŒã¹ã®å¢åå å¡«ã®ããã®SQLã¹ã¯ãªããã®ç·šæ
ã¹ã¯ãªãããå®è¡ããåã«ãããŒã¿ããŒã¹ãæºåããå¿ èŠãããããšãäœåºŠãèšããŸããã ããããããå°ãæ·±ãæãäžãããšããããã®ã¹ã¯ãªããã¯äºãã«äŸåããŠããããšãããããŸãã
ãŒãã¬ãã«ããå§ããŸããããåç §ããŒã¿ã¯ããŒã¿ããŒã¹ã®åæå±éã®äžéšãšããŠäœæãããã·ã¹ãã å ã®å€ãã®ãšã³ãã£ãã£ããã®åç §ããŒã¿ãåç §ããŸãã ããã«ãŠãŒã¶ãŒãããŸãããå€ãã®ãŠãŒã¶ãŒãããããåç §ããŠããŸãã ãããªãäŸãšããŠãååã®ã«ã¿ãã°ãããã³ååããŠãŒã¶ãŒããã£ã¬ã¯ããªã«ãªã³ã¯ãã泚æãååŸã§ããŸãã
æããã«ã泚æã®ãã¹ãããŒã¿ãæºåããå Žåãæ¢åã®ããŒã¿ã䜿çšããŠãŠãŒã¶ãŒãšè£œåã«ã¿ãã°ãäœæããã®ãåççã§ããããã«ãããå°ãªããšãæéãç¯çŽã§ããŸãã
ããããå®éã«ã¯ããã«å€ãã®å©ç¹ããããŸãã ããšãã°ãããéçºè ã補åã«ã¿ãã°ã§äœæ¥ããŠããŠãããã«ãŒã«ãå®è£ ããã®ãå¿ããŠããã¹ãããŒã¿ãå«ãããã€ãã®èª€ã£ãããŒã¿ãäœæãããšããäžèšã®äŸãæãåºããŠãã ããã 泚æãåŠçããå¥ã®éçºè ã¯ã誀ã£ã補åããŒã¿ã䜿çšããŠã³ãŒããäœæããŸããã
äŸåãã¹ãããŒã¿ã®å Žåãæåã®éçºè ãã³ãŒããšãã¹ãããŒã¿ãä¿®æ£ãããšããã«ã2çªç®ã®éçºè ã¯ããã®ã«ãŒã«ãéèŠã§ããå Žåããã¹ããããããããŸãã ãããã£ãŠãæåã®éçºè ã¯ã補åã®ã«ã¿ãã°ã®ãã¹ãããŒã¿ããããã°ããŠããéãå®éã«ã¯æ³šæã®ãã¹ãããŒã¿ããããã°ããããã泚æã®ãšã©ãŒãããéããªããŸãã
ãã®ååã¯ä»ã®æ¹æ³ã§æ©èœããŸãã 泚æã®éçºè ããŸã å©çšã§ããªã補åã®æ°ãããã¹ãããŒã¿ãå¿ èŠãšããå Žåããã®ãããªããŒã¿ãèªåã§æºåãããã®æ°ãã補åã§æ³šæãã¹ããå®è¡ããå¿ èŠããããŸãã ãã ãããã®æ°ãã補åã¯ã補åã«ã¿ãã°ã«é¢é£ä»ããããŠãããã¹ãŠã®ãã¹ãã«åæ Œããå¿ èŠãããããšãæå³ããŸãã 補åã«ã¿ãã°ã®ãã¹ããæ°ãã補åã§å€±æããå Žåãããã¯æ³šæéçºè ã補åã«ã¿ãã°ã®éçºè ã®ã³ââãŒãã§ãšã©ãŒãæ€åºããããšãæå³ããŸãã ç¹°ãè¿ããŸãããåéçºè ãèªåã§ãã¹ãŠã®ãã¹ãããŒã¿ãæºåããå Žåãšæ¯èŒããŠã補åã«ã¿ãã°ã®ãšã©ãŒãããæ©ãæ€åºãããããšãããããŸãã
ãããã«
説æããèªåçµ±åãã¹ãã®ç·šææ¹æ³ã«ãããå®å®å段éã ãã§ãªããéçºæ®µéå šäœã§äœæãããWebã¢ããªã±ãŒã·ã§ã³ã®å質ãèªåçã«è©äŸ¡ã§ããŸãã ãšã©ãŒãæ©ãçºèŠããããšãä¿®æ£ã®ã³ã¹ããå®ããªããŸããæãéèŠãªããšã¯ãå®å®åã ãã§ãªããããã«ãæ®ãã®äœæ¥éãèŠããããããããžã§ã¯ããããŒãžã£ãŒã¯äœæ¥ãããæ£ç¢ºã«èšç»ã§ããŸãã
ãã¡ããã説æããã€ã³ãã©ã¹ãã©ã¯ãã£ãç¶æããã«ã¯äžå®ã®ã³ã¹ããå¿ èŠã§ãããæåãã¹ãã®ã³ã¹ããäœãããããããã®ã³ã¹ãã¯å ±ããããšèããŠããŸãã