ã¿ãªããããã«ã¡ã¯ïŒ ç§ã¯Avitoã§åããŠããããã¹ãããŒã«ãéçºããŠããŸãã å€ãã®UIãã¹ããååŸãããšããSeleniumãµãŒããŒã®ã¹ã±ãŒãªã³ã°ã®åé¡ã«çŽé¢ããŸããã次ã«ããããã©ã®ããã«è§£æ±ºãããã説æããŸãã
ããã§ã¯ãSelenium Gridã䜿çšããŠå€ãã®UIãã¹ããã©ã®ããã«äžŠè¡ããŠå®è¡ããã®ã§ããããïŒ æ®å¿µãªãããäœããããŸããã
Selenium Gridã¯ãå€æ°ã®ã¿ã¹ã¯ã䞊è¡ããŠå®è¡ããããšã¯ã§ããŸããã
æ¬åœã«å€æ°ã®ããŒããç»é²ãããã§ããïŒ ãŸãããããè©ŠããŠãã ããã
ã¹ããŒãã欲ããã§ããïŒ ã°ãªããã«ç»é²ãããŠããããŒããå€ãã»ã©ãåãã¹ãã®å®å®æ§ã¯äœäžããŸãã ãã®çµæãåèµ·åããŸãã
ã°ãªãããå¿çããªããªã£ãå Žåã®ãã©ãŒã«ããã¬ã©ã³ã¹ãå¿
èŠã§ããïŒ ãŸããè€æ°ã®ã¬ããªã«ãèµ·åããŠããããã®åã«ãã©ã³ãµãŒãé
眮ããããšãã§ããŸããã
ããŠã³ã¿ã€ã ãªãã§ã°ãªãããæŽæ°ããçŸåšå®è¡äžã®ãã¹ãã倱æããªãããã«ããŸããïŒ ããããããã¯Selenium Gridã«é¢ãããã®ã§ã¯ãããŸããã
äœåãã®ç°ãªãæ§æã®Seleniumãã¡ã¢ãªã«ä¿æããã®ã§ã¯ãªãããããããªã³ããã³ãã§å¢ããããã§ããïŒ åäœããŸããã
ããããã¹ãŠã®åé¡ã解決ããæ¹æ³ãç¥ãããã§ããïŒ æ¬¡ã«ããã®èšäºãèªãããšãå§ããŸãã
* ïŒåãååã®ç§ã®å ±åã¯ã Heisenbug 2017 Moscowã§æ¢ã«èãããŠãããããããäžéšã®èªè
ã¯ããã«ç²ŸéããŠããã§ãããã
SeleniumãµãŒããŒã®åäœã«é¢ããå°ããªäœè«ã
- ãã©ãŠã¶ãŒã®ç®¡çãéå§ããã«ã¯ã
create session
èŠæ±ãSeleniumãµãŒããŒã«éä¿¡ããå¿ èŠããããŸãã - ãã®çµæãããŒãã§ãã©ãŠã¶ãŒãéãã
sessionId
ããŒã¯ã³ãè¿ãããåãªã¯ãšã¹ãã§sessionId
ããã©ãŠã¶ãŒãå¶åŸ¡ããŸãã
ããŠããªãSelenium Gridãå¿ èŠãªã®ã§ããïŒ Selenium Gridã¯ãããŸããŸãªæ§æã®å€ãã®SeleniumãµãŒããŒã§äœæ¥ããããã®åäžã®ãã€ã³ããæäŸããŸãã
- ããšãã°ããã©ãŠã¶ã®ããŒãžã§ã³ã«å¿ããŠããã£ã«ã¿ãªã³ã°åºæºã«äžèŽããç¡æã®ããŒãã§ã»ãã·ã§ã³ãäœæã§ããŸãã
- ã©ã®ã»ãã·ã§ã³ãã©ã®ããŒãã§éãããŠãããã«é¢ããæ å ±ãä¿åãããã¹ãŠã®ãªã¯ãšã¹ããã¿ãŒã²ããããŒãã«ãããã·ããŸãããã®ãããã¯ã©ã€ã¢ã³ãã1ã€ã®ããŒããŸãã¯ã°ãªããã§äœæ¥ããŠãéãã¯ãããŸããã
çŽ æŽãããããŒã«ã§ãããïŒ
ããããããã䜿çšãããšãã«ãããã€ãã®åé¡ãçºçããŸããã
1.äºæž¬ã§ããªãåäœ
èŠããã«ãããªãã¯åœŒãæãã§ãããã®ãšåœŒãæãã§ãããšãã«èœã¡ãã§ãããããããŠããªãã¯ããããããªãæ¹æ³ã§ã圱é¿ããããšã¯ã§ããŸããã
- ãã¹ãã1ã€ã®ã¹ã¬ããã§å®å
šã«æ©èœããç¶æ³ã«éåžžã«ããçŽé¢ããŸããããã°ãªãããä»ãããã«ãã¹ã¬ããã®å®è¡ã§ã¯ãäºæããªãã¯ã©ãã·ã¥ãçºçããŸããã
- æã
ããã¹ãã¯åã«ããŒãã®äžéšã«è©²åœããŸããã§ããããç©ççã«ã¯äœ¿çšã§ããŸãããããã¹ãã®ãã¥ãŒã¯ã°ãªããã«èç©ãããŸããã ãã®çµæããªãªãŒã¹ã¹ã€ãŒãã®ååãã¿ã€ã ã¢ãŠãã«ãã£ãŠèœã¡ãŸããã
2.å€æ°ã®ããŒãã®ãµããŒãã®æ¬ åŠ
å€ãã®ããŒããç»é²ããããšãããšïŒãããŠå€ãã®ããŒããå¿
èŠã«ãªããŸãïŒãç»é²ã¯è¡ãããŸãããå€ãã®ãã¹ãã¯å€±æãããããå€ãã®ã¹ã¬ããã§ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã¯å€±æããŸãã
3.ã¹ã±ãŒã©ããªãã£
ã»ã¬ã³ã°ãªããã®ããŒãã®å¶é= Nã«éãããšãã«æåã«é ã«æµ®ãã¶ã®ã¯ãå®å®æ§ãæãªãããªãå Žåã2ã3ã5ãïŒå°ãªããšã10ïŒã°ãªãããåããããããã«NããŒããç»é²ãããã®ãã¹ãŠã®åã«ç·šã¿ãŸã芪åã«ãã©ã³ãµãŒãå®è¡ãã10 * Nã¹ã¬ããã§ãã¹ããå®è¡ããŸãã ãã ããSelenium Gridã¯ãã®ããã«ã¯æ©èœããŸããã ããŒããšã»ãã·ã§ã³ã«é¢ãããã¹ãŠã®æ
å ±ã¯ç¹å®ã®ããŒãã®ã¡ã¢ãªã«ä¿åããããããã®éã§åéãããªãããã§ãã 次ã®åé¡ã¯ãããšå¯æ¥ã«é¢é£ããŠããŸãã
4.èé害æ§
ãããé
眮ãããŠãããã·ã³ã®é»æºãåããšããã¹ãŠã®ãã¹ããããã«çµäºããŸããããã¯ã次ã®ãªã¯ãšã¹ããéä¿¡ã§ããããã¯ã¢ããããããªãããã§ãã ãããŠãããã¯çµ¶å¯Ÿã«ã¹ã±ãŒã«ããŸããïŒãã¡ããããã€ã§ãããã€ãã®ã°ãªããã¯ã©ã¹ãæžãæããããšãã§ããŸãããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãïŒã 匱ç¹ã¯Selenium Hubã§ãããèœã¡ãå ŽåãããŒãã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã
5.ã³ã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã·ã¹ãã ã䜿çšããŠããŒããåçã«äœæã§ããªã
ãã¹ãã®ããã«ãç°ãªããã©ãŠã¶ãŒæ§æã®ããŒãã®å€ãã®ç°ãªãæ§æãå¿
èŠãªå Žåãå¥ã®åé¡ãçºçããŸãããã®åç©åå
šäœãéåžžã«å€ãã®ã¡ã¢ãªç©ºéãå æããŸãã Google ChromeïŒ150GB RAMïŒãæèŒãã300ããŒã+ FirefoxïŒ150GB RAMïŒãæèŒãã300ããŒããšãããžãã¯ãã©ã°ã€ã³ãæèŒããFirefox NightlyïŒ100GB RAMïŒãæèŒãã300ããŒããçšæãããšããŸãã 400GBã®RAMã¯åžžã«ããžãŒã§ããããã«ã1ã€ã®ã¹ã€ãŒãããã¹ããããšãã«700ã¯ããŒã ã§400GBããã¹ãŠäœ¿çšããä»ã®ããŒãºã®ãã¹ãããã¥ãŒã«è¡šç€ºããããšãã«æè»ã«äº€æãããªã©ã1æ¥ãéããŠããŒããå¹æçã«åé
åžããŸãã
Dockerã¯ããã®åé¡ã解決ããã®ã«çæ³çã§ããããã¯ããã¹ããå®äºããåŸãæ°ããSeleniumã§ã³ã³ããããã°ããæã¡äžããŠãããã«çµäºã§ããããã§ãã ãŸããå€ãã®ã»ã¬ã³ãå¿ èŠãªããããããã¯ãã¹ãŠ1ã€ã®ã¢ã€ãã³ãµãŒããŒã«åãŸããªããããã¯ã©ã¹ã¿ãŒäžã§ã³ã³ãããŒãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãå¿ èŠã«ãªããŸãã ãã®ã¿ã¹ã¯ã«ã¯ãåžå Žã«ããã€ãã®äžè¬çãªãœãªã¥ãŒã·ã§ã³ããããŸããKubernetesã䜿çšããŸãã Kubernetesãéžãã çç±ã¯ã ãã¡ãã§ç¢ºèªã§ããŸã ã Seleniumã®æšæºçãªæ¹æ³ã§ã¯ããã®åé¡ã解決ã§ããŸããã
6.ããŠã³ã¿ã€ã ãªãã§ã°ãªãããæŽæ°/åèµ·åããããšã¯äžå¯èœã§ã
ã»ãã·ã§ã³ãã¡ã¢ãªã«ä¿åããå¥ã®çµæã ããã¯è¶
èšçãã€ãã¹ã§ã¯ãããŸããããããã§ãäžå¿«ã§ãã
äžèšã®ãã¹ãŠã¯ãç§ãã¡ããã€ãèªåèªèº«ãèŠã€ããç¶æ³ã§ãã
æ¢ç¥ã®ãœãªã¥ãŒã·ã§ã³
ã°ãªããã«ãŒã¿ãŒãšæ°ããGoã°ãªããã«ãŒã¿ãŒã®å®è£
ã¯åªãããœãªã¥ãŒã·ã§ã³ã§ãããæ®å¿µãªããçæ³ããã¯ã»ã©é ããã®ã§ãã ãã®æ©èœã®äž»ãªåé¡ã¯ã Selenium Hubã®ä»£ããã§ã¯ãªããäžããã®å¥ã®ãããã·ã§ããããšã§ãã
ãããã£ãŠãã°ãªããã«ãŒã¿ãŒãšããååã¯ãã°ãªããã§ã¯ãªãã°ãªããã管çããããããã¡ãªããããããŸãã
- æ°ããã»ãã·ã§ã³ãäœæããããšããè©Šã¿ã¯ã空ãããŒãã®ããã°ãªããã§ã¯ãªããã©ã³ãã ãªããŒãã§çºçããŸãïŒéã¿ã䜿çšããŠã©ã³ãã å€æ°ã®ååžãå¶åŸ¡ã§ããŸãïŒã ã°ãªããã®1ã€ã§ã»ãã·ã§ã³ãäœæã§ããªãã£ãå ŽåãèŠæ±ã¯æ¬¡ã®ãã®ã«é²ã¿ãã°ãªããããªããªããŸã§ç¶ããŸãã ãããã£ãŠãæ°ããã»ãã·ã§ã³ãäœæããæéãå€§å¹ ã«é ãããããšãã§ããŸãã
- ã»ã¬ã³ã®ããã®1ã€ãèœã¡ãå Žåãã»ãã·ã§ã³ã«é¢ãããã¹ãŠã®æ å ±ã倱ãããããŒãã¯ãããã¯ãŒã¯ããåæãããŸãã ãããŸã§ã®ãã¹ãŠã®å¯Ÿè©±ã¯ãããçµç±ããã»ãã·ã§ã³ããŒã¿ã¯ããã«ä¿åãããŸãã
- ããäžã®ããŒã¿ã¯xmlãã¡ã€ã«ã«ä¿åããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ä¿¡å·ã«åŸã£ãŠãã¡ã€ã«ãšã®åæãè¡ããããããã·ã¹ãã ã«å¥ã®ãããè¿œå ããããšã¯éåžžã«å°é£ã§ãã ååŒã¯ãããŸããããã¹ãŠãæªãã§ãã
Selenoidã¯ãDockerã³ã³ããã§ãã¹ããå®è¡ããããã®ããŒã«ã§ãã ã»ãã·ã§ã³ãäœæãããªã¯ãšã¹ãããšã«ãæ°ããã³ã³ãããèµ·åãããã»ãã·ã§ã³ãéãããããšåé€ãããŸãã ããŒã«ã¯çŽ æŽãããã§ãããæ¬ ç¹ããããŸãïŒ
- ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã·ã¹ãã ããµããŒãããŠããŸããã
- ã»ãã·ã§ã³æ å ±ãã¡ã¢ãªã«ä¿åãããããã¹ã±ãŒãªã³ã°ãšãã©ãŒã«ããã¬ã©ã³ã¹ã«åé¡ããããŸãã
ããããã¹ãŠã®åé¡ã«çŽé¢ãããšããç§ãã¡ã¯ä»ã®äŒç€Ÿã®çµéšã«èå³ãæã€ããšã«ããŸããã Yandex 㯠Habrahabrããã°ã§ãå€ãã®ããŒããç»é²ããŠæäœããããšã¯äžå¯èœã§ããããã®åé¡ã解決ããããã«ã°ãªããã«ãŒã¿ãŒã䜿çšããŠãããšæžããŠããŸãã ã°ãªããã«ãŒã¿ãŒã¯ãã¿ã¹ã¯ã«é©ããŠããŸããã
Alfa-Bank 㯠ãã°ãªããããã°ãã䜿çšãããªããšãã¹ãŠããã³ã°ããããšãæžããŠãããç§ãã¡ã®çµéšã¯ããã確èªããŠããŸã-ç§ãã¡ã¯å®æçã«åãããšãããŠããŸããã
ãã¡ãããããã€ãã®åé¡ãçºèŠããgithubã®ã»ã¬ã³ãç¡èŠããŸããã§ãã...ããã«ãäœãèµ·ãã£ãŠããã®ãã«å¯Ÿããèè
ã®æ
床ã®äŸã瀺ããŸãã
QïŒãã»ã¬ã³ã°ãªããããŒãžã§ã³3.0+ã¯ããã®é«å¯çšæ§ããµããŒãããŸããïŒã
AïŒããããç£èŠããå¥ã®ãµãŒããŒãçšæããããšããå§ãããŸãããããããŠã³ãŸãã¯ããŠã³ããå Žåãããã埩å ããæ¹æ³ãããããŸããã
ç§ãã¡ã¯æã¿ããªãããšã«æ°ã¥ããèªåã§åé¡ã解決ãå§ããŸããã
ãªãµãŒã
åçŽãªãã¹ããéå§ããå€æ°ã®ã»ã¬ã³ãkubernetesã¯ã©ã¹ã¿ãŒã«å±éããããŒã¿ããŒã¹ã«IPãå
¥ããŠãããŒã¿ããŒã¹setUp()
ãã¹ãã®setUp()
çŽæ¥ç§»åããæãé·ã䜿çšãããªãã£ãIPããsessionId
ãä¿åããã«ãã¹ããéå§ããããšã«ãsessionId
ã <seleniumã¯ãŒã«ãŒããã¹ããè¡ã£ãŠããããããªãŒããŒãããŒã¯çºçããŸããã§ããã
ãã®æ±ºå®ã¯ããã«ãã®å®è¡å¯èœæ§ã瀺ããŸããã
ç§éã¯åãåã£ãïŒ
- äºæž¬å¯èœãªåäœ;
- ããŒã¿ããŒã¹ã¬ãã«ã§ã®ãã©ãŒã«ããã¬ã©ã³ã¹ã
- æ¡åŒµæ§
- å€æ°ã®ããŒãã®ãµããŒãã
- ãã¹ããåæ¢ããã«ã¢ããã°ã¬ãŒãããŸããããã¯ãã³ãŒãããªããžããªã«ããããã¹ãã®å®è¡æã«å®è¡ãããããã§ãã
ããããå€ãã®åé¡ã«çŽé¢ããŸããïŒ
- æ©èœéžæã¡ã«ããºã ã®ãµããŒããªãã
- 䟿å©ãªã¡ã«ããºã /ã°ãªãã/ã¬ãžã¹ã¿ã¯ãããŸããã
- 移æ€æ§ããªã-ã·ã¹ãã ã¯ãµãŒãã¹ãšããŠæ©èœããªããªãã1ã€ã®ããã°ã©ãã³ã°èšèªã«äŸåããåããã¹ããªããžããªã«å®è£ ãããŸãã
æåŸã®åé¡ã¯æãéèŠã§ãããã¹ããã¬ãŒã ã¯ãŒã¯ã®ã³ãŒãã«ãããçž«ãä»ãããšã䜿çšãããã¹ãŠã®èšèªã®ãã¹ãŠã®ãªããžããªã§ãåãã¹ããã¬ãŒã ã¯ãŒã¯ã§ãããèªåçã«ãµããŒãããå¿ èŠãããããã§ãã
ãã®å®éšã§æãéèŠãªããšã¯ãåŸãããçµéšã§ãã Selenium Gridãæ£åžžã«å®è£ ã§ããããšã確èªããŸããã
æçµæ±ºå®
ãŸã第äžã«ãç§ãã¡ã¯ã»ã¬ã³ã®ãã©ãŒã¯/ãã«ãªã¯ãšã¹ãã§ã¢ã€ãã¢ãæ€èšãå§ããŸããã ãããããããžã§ã¯ãã³ãŒãã詳ããç¥ã£ãåŸãèªè»¢è»ãæžãæ¹ãå®äŸ¡ã§ä¿¡é Œæ§ãé«ãããšã«æ°ä»ããŸããã
æ°ããããŒã«ã«å¿ èŠãªãã®ãããäžåºŠãªã¹ãããŸãã
- è¡åã®äºæž¬å¯èœæ§;
- èé害æ§;
- æ¡åŒµæ§
- æºåž¯æ§
- å€æ°ã®ããŒãã®ãµããŒãã
- æ©èœãµããŒã
- Kubernetesã®ãªã³ããã³ãããŒãã
- statsdã§ã¡ããªãã¯ãåéããŸãã
- ã¡ã«ããºã /ã°ãªãã/ã¬ãžã¹ã¿;
- ãã¹ããåæ¢ããã«ã¢ããã°ã¬ãŒãããŸãã
æçµçã«èµ·ãã£ãããšïŒ
- äžèšã®åé¡ããã¹ãŠè§£æ±ºããã¢ããªã±ãŒã·ã§ã³ã
- Linuxããã³macosã§ãã¹ããããã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ã
- Goã§æžããã;
- mysqlã«ããŒã¿ãä¿åããŸãã
ãã®çµæããã¹ãŠã®åé¡ã解決ããããšãã§ããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯ Goã§äœæãããŸããã ã¹ããŒãã¬ã¹ã¢ããªã±ãŒã·ã§ã³èªäœ-ã»ãã·ã§ã³ã¯mysqlã«æ ŒçŽãããŸããå¿ èŠã«å¿ããŠãä»ã®ããŒã¿ããŒã¹ããµããŒãããããšã¯é£ãããããŸããã ã³ã³ããã®ãªã³ããã³ãäœæã¯Kubernrtesã§ã®ã¿å®è£ ãããŸãããä»ã®ã·ã¹ãã ã§ã³ã³ããäœæ/åé€ã¡ãœãããå®è£ ããŠãã«ãªã¯ãšã¹ããéä¿¡ã§ããŸãã Goã¯ããŸããŸãªãã©ãããã©ãŒã çšã«ã³ã³ãã€ã«ãããŠããŸãããLinuxãšmacosã§ã®ã¿ããã©ãŒãã³ã¹ããã¹ãããã®ã«ååã§ãããä»ã®ã·ã¹ãã ã®çè«ã§ã¯åé¡ã¯ãªãã¯ãã§ãã
次ã«äž»ãªè³ªåã§ãã ãã®ããŒã«ãžã®ç§»è¡äžã«äœè¡ã®ãã¹ãã³ãŒããæžãæããå¿ èŠããããŸãããïŒ èª°ã10000/1000/100ãä¿¡ããŸããïŒ ãŒãïŒ äœãæžãæããå¿ èŠã¯ãããŸããã§ãã;å®å šã«äºææ§ããããŸãã ã¢ããªã±ãŒã·ã§ã³ããããã€ãããã®ã¢ãã¬ã¹ãæå®ããã ãã§ãããã§çµããã§ãã ä»ã«äœãããå¿ èŠã¯ãããŸããã
çµæã¯æ¬¡ã®ã¹ããŒã ã§ãã
䜿ãæ¹ã¯ïŒ 2ã€ã®ã¢ãŒãããããŸãã
- æ°žç¶ -ãã¹ãŠã以åãšåãã§ã
-role node
ãã©ã¡ãŒã¿ãŒã䜿çšããŠseleniumãµãŒããŒãèµ·åããããã¢ãã¬ã¹ã®å ŽæãããŒããç»é²ãããŠããããšãæå®ããŸãã
java -jar selenium-server.jar -role node -hub http://127.0.0.1:4444/grid/register
- ãªã³ããã³ã -Dockerã€ã¡ãŒãžãšãã°ãªããæ§æã§å®è£ ããæ©èœã«é¢ããæ å ±ãè¿œå ããå¿ èŠããããŸãã 次ã«ãã°ãªãããå®è¡ããã»ãã·ã§ã³ãèŠæ±ãããšãããŒãèªäœãã¯ã©ã¹ã¿ãŒå ã«äœæãããŸãã
... "type": "kubernetes", "limit": 20, "node_list": [ { "params": { "image":"myimage:latest", "port": "5555" }, "capabilities_list": [ { "browserName": "firefox", "browserVersion": 50 ...
ãŸãšã
ããªãé·ãéããã®ãœãªã¥ãŒã·ã§ã³ãå®çšŒåç°å¢ã§äœ¿çšããŠããŸããããæ©èœãããµããŒãã¯å¿ èŠãããŸããã ãã®éçšã§ãèªè»¢è»ãäœãããšãæããŠã¯ãªããªããšããäžåºŠç¢ºä¿¡ããŸããã äžè¬çãªãœãªã¥ãŒã·ã§ã³ã¯åžžã«è¯ããšã¯éããŸãããåžžã«åé¡ã解決ããå¯èœæ§ãæ¢ãã¹ãã§ãã