Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Moco ¿ò¼ÜÒÔ¼°ÆäÔÚ Web ¼¯³É²âÊÔµÄÓ¦ÓÃ
 
×÷ÕߣºÉòÈñ À´Ô´£ºIBM ·¢²¼ÓÚ 2015-8-4
  3346  次浏览      28
 

¼¯³É²âÊÔ½éÓÚµ¥Ôª²âÊÔºÍϵͳ²âÊÔÖ®¼ä£¬Æðµ½¡°ÇÅÁº×÷Óᱡ£¾ßÌåµ½ Web ¼¯³É²âÊÔ£¬ÓÉÓÚÆä×ÔÉíµÄ¡°ÌØÊâÐÔ¡±ÍùÍùÐèÒªÃæ¶Ô¸ü´óµÄÌôÕ½£¬¸ü¶àµÄÍ´µã£¬±¾ÎÄÖ÷ÒªÊÇÔÚÕâ¸öÎÊÌâÉϵÄһЩ˼¿¼ÐÔÎÄÕ£¬Í¬Ê±Îª´ó¼ÒÍÆ¼ö ¨C 2013 Äê Oracle Java ´óÈüµÄ»ñ½±×÷Æ· Moco¡£

Moco ¿ò¼ÜÒÔ¼°ÆäÔÚ Web ¼¯³É²âÊÔµÄÓ¦ÓÃ

ÎÒÃÇÍùÍù½«Èí¼þ²âÊÔ¿ÉÒÔ·ÖΪµ¥Ôª²âÊÔ¡¢¼¯³É²âÊÔ¡¢ÏµÍ³²âÊÔºÍÑéÊÕ²âÊÔ¡£¶ø¼¯³É²âÊÔ½çÓÚµ¥Ôª²âÊÔºÍϵͳ²âÊÔÖ®¼ä£¬Æðµ½"ÇÅÁº×÷ÓÃ"£¬Ò»°ãÓÉ¿ª·¢Ð¡×é²ÉÓð׺мӺںеķ½Ê½À´²âÊÔ£¬¼ÈÑéÖ¤"Éè¼Æ"£¬ÓÖÑéÖ¤"ÐèÇó"¡£ Ö÷ÒªÓÃÀ´²âÊÔÄ£¿éÓëÄ£¿éÖ®¼äµÄ½Ó¿Ú£¬Í¬Ê±»¹Òª²âÊÔһЩÖ÷ÒªÒµÎñ¹¦ÄÜ¡£¼¯³É²âÊÔ£¨Ò²½Ð×é×°²âÊÔ£¬ÁªºÏ²âÊÔ£©Êǵ¥Ôª²âÊÔµÄÂß¼­À©Õ¹¡£Ëü×î¼òµ¥µÄÐÎʽÊÇ£º°ÑÁ½¸öÒѾ­²âÊÔ¹ýµÄµ¥Ôª×éºÏ³ÉÒ»¸ö×é¼þ£¬²âÊÔËüÃÇÖ®¼äµÄ½Ó¿Ú¡£´ÓÕâÒ»²ãÒâÒåÉϽ²£¬×é¼þÊÇÖ¸¶à¸öµ¥ÔªµÄ¼¯³É¾ÛºÏ¡£ÔÚÏÖʵ·½°¸ÖУ¬Ðí¶àµ¥Ôª×éºÏ³É×é¼þ£¬¶øÕâЩ×é¼þÓÖ¾ÛºÏΪ³ÌÐòµÄ¸ü´ó²¿·Ö¡£·½·¨ÊDzâÊÔÆ¬¶ÎµÄ×éºÏ£¬²¢×îÖÕÀ©Õ¹³É½ø³Ì£¬½«Ä£¿éÓëÆäËû×éµÄÄ£¿éÒ»Æð²âÊÔ¡£×îºó£¬½«¹¹³É½ø³ÌµÄËùÓÐÄ£¿éÒ»Æð²âÊÔ¡£´ËÍ⣬Èç¹û³ÌÐòÓɶà¸ö½ø³Ì×é³É£¬Ó¦¸Ã³É¶Ô²âÊÔËüÃÇ£¬¶ø²»ÊÇͬʱ²âÊÔËùÓм¯³É²âÊÔ½ø³Ì¡£

Web ¼¯³É²âÊÔ

Ôںܶàʱºò£¬ÎÒÃÇµÄ Web Ó¦ÓóÌÐòÍùÍù»á³ÉΪÏîÄ¿µÄÆ¿¾±£¬ÒÔÖÁÓÚÓ°ÏìÕû¸öÏîÄ¿µÄ°´Ê±·¢²¼¡£ÄÇôÎÒÃDz»½ûÒªÎÊ£¬ÎªÊ²Ã´»á³öÏÖÕâÑùµÄÇé¿ö£¿ÊÇʲôÔÚ×è°­×ÅÏîÄ¿µÄ½ø¶È£¿ÔÚÎÒÃÇÉîÈë̽ÌÖÕâ¸öÎÊÌâ֮ǰ£¬ÈÃÎÒÃÇÏÈ»ØÒäÒ»ÏÂÒ»¸öµäÐ굀 Web ÏîÄ¿¿ª·¢Ëù¾­ÀúµÄ¹ý³Ì£¬´Ó¶øÑ°ÕÒ³öÎÊÌâµÄ¸ùÔ´¡£
´Ó¿ª·¢µÄÁ÷³ÌÉÏ¿´£¬ËüÓëÆäËûµÄ²úÆ·¿ª·¢Ã»Óб¾ÖʵÄÇø±ð£¬ÎÞÍâºõÁ¢Ïî¡¢ÉóºË¡¢¿ª·¢¡¢¼¯³É¡¢²âÊÔ¡¢Î¬»¤ÕâЩ¾ßÌåµÄ¹ý³Ì¡£Ã¿¸ö²½Öè²ÎÓëµÄÈËÔ±ºÍÐÐΪҲ¶¼´óͬСÒ죬Ȼ¶øÄú»á·¢ÏÖÍùÍùºÜ¶àµÄ Web ÏîÄ¿×ÜÊÇÔÚ¼¯³É²âÊÔ»·½Ú³öÏÖÕâÑù»òÕßÄÇÑùµÄÎÊÌ⣿£¨µ±È»¼¯³É²âÊÔ·ûºÏÆÕÊÏÔ­Àí£¬ÆäËûµÄ²úÆ·¿ª·¢Ò²»áÓöµ½ÕâÑù¼¬ÊÖµÄÎÊÌ⣬ֻÊÇ Web ÏԵøü¼ÓµÄÃ÷ÏÔºÍÍ»³ö°ÕÁË£©ÆäʵÕâºÍ¾ßÌåµÄ Web ÏîĿûÓжà´óµÄ¹ØÏµ£¬ÓеãÈÆ£¿Å¶£¬Õâ¾ä»°µÄÒâ˼¾ÍÊÇ£¬ÎÒÃÇÐèÒª½«Ë¼Î¬Ìø³ö¾ßÌåµÄÏîÄ¿±¾Éí£¬´ÓÕû¸ö²úÆ·µÄ½Ç¶ÈÀ´¿´´ýÎÊÌ⣬ÕâÑù¾ÍºÜÈÝÒ×ÕÒµ½Í´µã¡£ÄÇôÈÃÎÒÃÇ»»¸ö½Ç¶ÈÀ´¿´Õâ¸öÎÊÌ⣺

¿Í»§¨C¡µWeb/¿Í»§¶Ë¨C¡µÏµÍ³»ù´¡Èí¼þ

´ÓÉÏÃæµÄ¹ØÏµÖÐÎÒÃÇ¿ÉÒÔ¿´µ½£¬×÷Ϊ"ʳÎïÁ´"¶¥¶ËµÄ Web ÏîÄ¿ÍùÍùÆð×ÅÒ»¸ö"ÖмäÈË"µÄ½ÇÉ«£¬ÔÚËüÖ®ÏÂÊÇϵͳÈí¼þ£¨Èç²Ù×÷ϵͳ±¾Éí»òÕ߯äÉϵÄÖмä¼þ£©£¬¶øÔÚËüÖ®ÉÏÍùÍùÖ±½ÓÃæ¶Ô¿Í»§¡£ÔÚÈí¼þ¿ª·¢µÄ¾­µä½Ì³ÌÀï,×ÜÊǽ«ÕâÖÖ´¦ÓÚÖмäÏνӲãµÄÈí¼þÉè¼Æ³ÆÎª--³°ôÐÔ¡£Ò²¾ÍÊÇ˵ËüÐèÒªµÄÊÇijÖֵ߸²Ð﵀ OUTPUT,½«¾ßÌåµÄÐèÇóת»¯ÎªÊµ¼ÊµÄ¿ÉÒÔ²Ù×÷µÄ¼Ü¹¹Éè¼Æ£¬ÕâÑùµÄÒ»¸ö"ÖмäÈË"ÍùÍùÔÚÒ»¸ö²úÆ·µÄÉúÃüÖÜÆÚÖаçÑÝÕß¾Ù×ãÇáÖØµÄ½ÇÉ«¡£

Web ¼¯³É²âÊÔµÄÍ´µã

¶ø Web ÏîÄ¿Çø±ðÓÚÆäËûÏîÄ¿µÄ±¾ÖÊÔ­Òò¾ÍÔÚÓÚ£¬ËüÖ±½ÓÃæ¶ÔÐèÇóµÄÌá³öÕß--¿Í»§£¬¶øÕⲿ·ÖµÄÐèÇó±ä¶¯Ò²ÊÇ×îΪ»îÔ¾µÄ¡£Ò²¾ÍÊÇÒòΪÕâÑù£¬ÍùÍùºÜ¶àʱºòÎÒÃǶÔÓÚ web µÄ¿ª·¢ÒªÇóµÄ¾ÍÊÇ£¬¿ìËÙ£¡µ«ÕâÑùµÄ¹Ûµã½ö½öÏÞÓÚÔÚ UI »òÕß Web ±à³Ì·½Ã棬¶ÔÓÚÓëµ×²ãϵͳµÄ¼¯³ÉÍùÍùËØÊÖÎ޲ߣ¿ÒòΪµ×²ãϵͳһ°ãÀ´ËµÊǹ«Ë¾²úÆ·µÄºËÐÄÄÚÈÝ£¬Ò²×ñÑ­×ŵäÐ͵IJúÆ·¿ª·¢Ä£Ê½£¬ÔÚÐèÇó±ä¸ü·½ÃæÒ²ÏԵúܽ÷É÷¶øÐ¡ÐÄ¡£Ãæ¶ÔÍ»ÈëÆäÀ´µÄµÄÐèÇó±ä¶¯£¬µ×²ãϵͳÍùÍùºÜÄѸúµÄÉϽÚ×࣬¶øÇҺܶàʱºò Web µÄ¿ª·¢ºÍµ×²ãϵͳµÄ¿ª·¢ÊÇ·Ö¿ªµÄ£¬»òÕß·ÖÊôÓÚ²»Í¬µÄ¿ª·¢²¿ÃÅ£¬¼´Ê¹ÊÇÒ»¸ö·½·¨¼¶±ðµÄµ÷Ó㬾ͻáÀ˷ѵô´ó¼ÒºÜ¶àµÄ¹µÍ¨³É±¾£¬½Ó¿ÚµÄ±ä¸ü»òÕßÊÇ API µÄÏòϼæÈÝÕâЩ¶¼ÊÇ·­À´¸²È¥ÕùÂ۵ϰÌâ¡£ÓÉÓÚ´ó¼ÒËù´¦µÄ¿ª·¢ÁìÓò²»Í¬£¬¹¤×÷µÄ·½Ê½£¬·½·¨µÄ²»Í¬£¬ÉõÖÁÊDZà³ÌÓïÑԵIJî±ð£¬ÕâЩÎÊÌâ×îÖջᱩ¶ÔÚ¼¯³É²âÊÔÕâÀ´Ó¶øÓ°ÏìÕûÌåÏîÄ¿µÄ¿ª·¢½ø¶È¡£

ÕâÀï¾ÍÓÐÒ»¸öÕæÊµµÄ°¸Àý¡£ÔÚ Web ¿ª·¢ÖУ¬ÎÒÃÇÓöµ½ÁË´óÊý¾ÝÏÔʾµÄÎÊÌ⣬·ÖÒ³ÏÔʾÎÞÒÉÊÇ×îºÏÊÊ£¬Ò²×îºÜÈÝÒ×Ïëµ½µÄ½â¾ö·½°¸¡£µ«ÓÉÓÚÆäËûµÄÒòËØ£¬µ×²ãϵͳÎÞ·¨Ôڼȶ¨µÄÏîÄ¿ÆÚÏÞÄÚ¸øÓè API ·½ÃæµÄÖ§³Ö£¬ÔÚ¾­¹ýÉîÈëµÄ¹µÍ¨ºÍÏ໥Àí½âÖ®ºó·¢ÏÖ£¬ÕâÑùµÄ¹¦ÄÜÔÚϵͳ²ãÃæÕâ¸ö½Ç¶ÈÀ´Ëµ£¬ÊôÓÚÓÅÏȼ¶½ÏµÍµÄ¹¦ÄÜ¡£¶øÇÒÔÚËûÃÇ¿ªÀ´£¬¿Í»§ÍùÍù¸üϰ¹ßÓÚʹÓÃÃüÁîÐв鿴½á¹û£¬²¢Ã»ÓÐÌá³öÕâÑùµÄÐèÇ󣬵±È»ÕâÑùµÄÕùÂÛÊÇûÓÐÒâÒåµÄ£¬´ó¼Ò¿´´ýÎÊÌâµÄ½Ç¶È²»Í¬£¬ÎÒÃÇÒ²²»ÄÜÒ»¸Å¶øÂÛ£¬±Ï¾¹»¹ÊÇ»¹ÓÐһЩ¿Í»§²¢²»ÊôÓÚ"רҵ¼¶"Óû§£¬»òÕßÓÉÓÚÆäËûµÄÔ­ÒòµÄÏÞÖÆ£¬ËûÃDz»µÃ²»Ñ¡ÔñʹÓÃä¯ÀÀÆ÷²é¿´Ö´Ðнá¹û£¬Ãæ¶ÔÕâÑùµÄÇé¿ö£¬°ÚÔÚ Web ¿ª·¢ÈËÔ±ÃæÇ°µÄÎÊÌâ¾ÍÊÇÈçºÎÔڼȶ¨µÄÇé¿öÏÂÐÞ¸ÄÒÑÓеĽṹ£¬´Ó¶øÖ§³ÖÊý¾Ý·ÖÒ³²¢ÇÒ±£Ö¤×ã¹»µÄ¿ÉÀ©Õ¹ÐÔ£¬ÒÔ±£Ö¤ÔÚδÀ´µ×²ãϵͳ¿ÉÄÜÖ§³ÖµÄÇé¿öÏ£¬½«´úÂëÐ޸ĵijɱ¾½µµÍµ½×îС£¿

½â¾ö˼·ºÍ·½°¸

ÎÊÌâÒѾ­±©Â¶³öÀ´£¬ÈÃÎÒÃdz©ÏëÒ»ÏÂÆÚÍûµÄ¿ª·¢Ä£Ê½ÊÇʲô£¬¿ÉÄܸüÈÝÒ×ÈÃÎÒÃÇÉóºËĿǰµÄÎÊÌ⣬²¢ÕÒµ½×î¼ÑµÄ½â¾ö·½°¸¡£ÈÃÎÒÃdz©Ïëһϣ¬Èç¹ûÎÒÃÇÔÚ Web ¿ª·¢½×¶ÎûÓÐÕâô¶àµÄ¹ËÂǶø×¨×¢ÓÚ¹¦Äܱ¾Éí£¬»òÕß˵ÎÒÃÇ×ÜÊǼٶ¨µ×²ãϵͳ×ã¹»µÄÇ¿´ó£¬²¢Ö§³ÖËùÓпÉÄܵĵÄÐèÇó±ä¸ü£¬ÊDz»ÊǾÍûÓÐÕâÑùµÄÎÊÌâÁË£¿ÄÇôÊÇ·ñÕæµÄÓÐÕâÑùµÄÒ»¸ö¿ò¼Ü¿ªÊ¼¹Ø×¢ÓÚÕâЩÎÊÌ⣬´Ó¶ø½« Web ¿ª·¢ÈËÔ±½â·Å³öÀ´£¬Ê¹Æä¸ü¼Ó¹Ø×¢ÓÚ×ÔÉíÁìÓòµÄµÄÐèÇóÄØ£¿»»¾ä»°ËµÎÒÃÇÐèÒªÒ»¸ö"Ä£Äâ"µÄµ×²ãϵͳ£¬Ëü·µ»ØËùÓÐÎÒÃÇÏ£ÍûµÄ½á¹û£¬´Ó¶øÈÃÎÒÃǽ«ËùÓеÄ×¢ÒâÁ¦·ÅÔÚ Web Õâ¸ö²ãÃæ£¬¶Ô£¬Õâ¾ÍÊǽñÌìÒª½éÉÜµÄ Moco£¡

Moco ÊÇʲô

×÷ÕßÊÇÕâÑùÃèÊö Moco µÄ£º

MocoÊÇÒ»¸ö¼òµ¥´î½¨Ä£Äâ·þÎñÆ÷µÄ³ÌÐò¿â/¹¤¾ß£¬Õâ¸ö»ùÓÚ Java ¿ª·¢µÄ¿ªÔ´ÏîÄ¿ÒѾ­ÔÚ Github ÉÏ»ñµÃÁ˲»ÉٵĹØ×¢¡£¸ÃÏîÄ¿µÄ¼ò½éÊÇÕâÑùÃèÊö×Ô¼ºµÄ£ºMoco ÊÇÒ»¸ö¼òµ¥´î½¨ stub µÄ¿ò¼Ü£¬Ö÷ÒªÓÃÓÚ²âÊԺͼ¯³É¡£Õâ¸ö¿ò¼ÜµÄ¿ª·¢Áé¸ÐÀ´×Ô Mock ¿ò¼Ü£¬Èç Mockito ºÍ Playframework¡£
ΪʲôҪ¿ª·¢Õâ¸ö¿ò¼Ü£¿

¼¯³É£¬ÓÈÆäÊÇ»ùÓÚ HTTP ЭÒéµÄ¼¯³É¡ª¡ªweb service¡¢REST µÈ£¬ÔÚÎÒÃǵÄÏîÄ¿¿ª·¢Öб»¹ã·ºÓ¦Óá£ÒÔǰ£¬ÎÒÃÇÿ´Î¶¼ÒªÍù Jetty »ò Tomcat µÈÓ¦Ó÷þÎñÆ÷Éϲ¿ÊðÒ»¸öÐ嵀 WAR¡£´ó¼Ò¶¼ÖªµÀ£¬¿ª·¢²¿ÊðÒ»¸ö WAR µÄ¹ý³ÌÊǺܿÝÔïµÄ£¬¼´Ê¹ÔÚǶÈëʽ·þÎñÆ÷ÉÏÒ²ÊÇÈç´Ë¡£¶øÇÒ£¬Ã¿´ÎÎÒÃÇ×öÒ»µã¸Ä¶¯£¬Õû¸ö WAR ¶¼ÒªÖØÐÂ×é×°¡£

Moco µÄ³öÏÖ£¬ÕýÊÇΪÁ˽â¾öÕâЩÎÊÌâ¡£¿ª·¢ÍŶÓÖ»Òª¸ù¾Ý×Ô¼ºµÄÐèÒª½øÐÐÏàÓ¦µÄÅäÖ㬾ͻáºÜ·½±ãµÃµ½Ò»¸öÄ£Äâ·þÎñÆ÷¡£¶øÇÒ£¬ÓÉÓÚ Moco ±¾ÉíµÄÁé»îÐÔ£¬ÆäÓÃ;ÒѾ­²»ÔÙ¾ÖÏÞÓÚ×î³õµÄ¼¯³É²âÊÔ£¬±ÈÈ磬Moco ¿ÉÒÔÓÃÓÚÒÆ¶¯¿ª·¢£¬Ä£ÄâÉÐ먦·¢µÄ·þÎñ£»Moco »¹¿ÉÒÔÓÃÓÚǰ¶Ë¿ª·¢£¬Ä£ÄâÒ»¸öÍêÕûµÄ Web ·þÎñÆ÷£¬µÈµÈ¡£

ÔÚ 2013 ÄêDuke's Choice AwardsÉÏ£¬Moco ¿ò¼Ü±»ÌáÃûΪ×î¾ß´´ÐÂÁ¦µÄ Java ÏîĿ֮һ£¬ÔÚ Twitter Éϵõ½ÁË Martin Fowler µÄ¹Ø×¢£¬Ïê¼û¡¶Æóҵϵͳ¼¯³Éµã²âÊÔ²ßÂÔ¡·Ò»ÎÄÔÚ InfoQ Ó¢ÎÄÕ¾

Moco Ï嵀 Hello World

Ê×ÏÈ£¬ÄúÐèÒª£º

1.ÅäÖÃÄúµÄ Java »·¾³

ÏÂÔØ Java ³ÌÐò£¬²¢ÉèÖúÃϵͳ»·¾³±äÁ¿ £¨PATH£¬ JAVA_HOME£©

2.°²×°²¢ÅäÖà Gradle

¾ßÌå¿ÉÒԲο¼http://www.gradle.org/

½ÓÏÂÀ´£¬°´ÕÕÏÂÃæµÄ²½Öè°²×° Moco

1.»ñÈ¡ Moco Ô´Îļþ

ʹÓà git ÃüÁ»ñÈ¡×îеĴúÂë

git clone https://github.com/dreamhead/moco.git

Ò²¿ÉÒÔÖ±½ÓÏÂÔØ±àÒëºÃµÄ Jar Îļþ£¬Ä¿Ç°ÊÇ 0.9.1

±àÒëÔ´´úÂ룬Éú³É Jar Îļþ (ÓÃÒÔ±àÒëºÃµÄ Jar ÎļþµÄ£¬¿ÉÒÔºöÂÔÕâ¸ö²½Öè) ÔÚÃüÁîÐÐÖ´ÐÐÈçϵÄÃüÁî

cd <moco directory>
./gradlew build

2.±àдÅäÖÃÎļþ£¬ÒÔ¼òµ¥µÄ Hello World ΪÀý

[
{
"response" :
{
"text" : "Hello, Moco"
}
}
]

½«ÎļþÒÔ json µÄºó׺´æ´¢£¬±ÈÈç foo.json

3.Æô¶¯ Moco ·þÎñ

ÔÚÃüÁîÐÐÊäÈë

java -jar moco-runner-<version>-standalone.jar start -p 12306 -c foo.json

×¢£º-p Ö¸¶¨ Moco ·þÎñ¶Ë¿Ú £¨Ä¿Ç°½öÖ¸ Web ¶Ë¿Ú£©

4.·ÃÎÊ Web ·þÎñ

´ò¿ªä¯ÀÀÆ÷£¬·ÃÎÊ http://localhost:12306

ÄúÓ¦¸Ã¿ÉÒÔÁ¢¼´¿´µ½¾ÃÎ¥Á˵Ä"Hello World"

Moco µÄ¸´ÔÓʵÀý

ʵÀýÒ»£¬ ´ø²ÎÊýµÄ HTTP ÇëÇó

ÓÐЩʱºòÎÒÃÇÏ£ÍûÄܹ»ÔÚÇëÇóµÄͬʱ£¬´«µÝÏàÓ¦µÄ²ÎÊý¡£ÕâʱÎÒÃÇÐèÒªÓõ½"queries"¹Ø¼ü×Ö

ÅäÖÃÎļþ

{
"request" :
{
"uri" : "/foo",
"queries" :
{
"param" : "blah"
}
},
"response" :
{
"text" : "bar"
}
}

Æô¶¯ä¯ÀÀÆ÷£¬²¢·ÃÎÊ

http://localhost:12306/foo?parm=blash

ʵÀý¶þ£¬»ùÓÚÕýÔò±í´ïµÄ URL Æ¥Åä

Ôںܶà¶Ô URL ÇëÇóµÄ²âÊÔÖУ¬ÎÒÃÇÏ£Íû¶ÔÓÚ¶à¸öÏàËÆµÄ URL£¬¶¼·µ»ØÏàͬµÄ½á¹û

ÅäÖÃÎļþ

{
"request":
{
"uri":
{
"match": "/\\w*/foo"
}
},
"response":
{
"text": "bar"
}
}

Æô¶¯ä¯ÀÀÆ÷

ÔÚµØÖ·À¸ÊäÈë¶à¸öµØÖ·£¨/foo ǰ´øÓÐÈÎÒâ×Ö·û£¬ ±ÈÈç http://localhost:12306/xxx/foo£©

ʵÀýÈý£ºÌø×ª

Ò³ÃæµÄ×Ô¶¯Ìø×ªÒ²ÊǾ­³£ÔÚ Web ¿ª·¢ÖÐÓöµ½µÄÎÊÌâÖ®Ò»

ÅäÖÃÎļþ

{
"request" :
{
"uri" : "/redirect"
},
"redirectTo" : "http://www.github.com"
}

Æô¶¯ä¯ÀÀÆ÷·ÃÎÊ http://localhost:12306/redirect

Ò³Ãæ½«»á±»×Ô¶¯µ¼Ïòµ½ http://www.github.com

ʵÀýËÄ£º ·µ»Ø JSON ¶ÔÏó

ÔÚ Web ¿ª·¢ÖУ¬¶ÔÓÚ JSON µÄ²Ù×÷ÊÇ×îµäÐ͵ÄÓ¦ÓÃ

ÅäÖÃÎļþ

{
"request": {
"uri": "/json"
},
"response": {
"json": {
"foo" : "bar"
}
}
}

Æô¶¯ä¯ÀÀÆ÷·ÃÎÊ http://localhost:12306/json

Ò³ÃæÉÏ»áÏÔʾÊä³öµÄ JSON ¶ÔÏó

Moco ¸ß¼¶Ó÷¨

ÔÚ Moco ÀïÄú»¹¿ÉÒÔ·¢ÏÖһЩºÃÍæµÄ£¬»òÕß˵¸ß¼¶Ó÷¨£¬±ÈÈç Asynchronous¡¢Template¡£¾ßÌåÓ÷¨»¹ÊDzο¼ Moco µÄÎĵµ£¬ÕâÀï½öÒÔ Asynchronous ΪÀý¡£

±àдÅäÖÃÎļþ

{
"request": {
"uri" : "/event"
},
"response": {
"text": "event"
},
"on": {
"complete": {
"async" : "true",
"post" : {
"url" : "http://another_site",
"content": "content"
}
}
}
}

ÄÇô¶ÔÓÚ/event µÄ·ÃÎÊ£¬½«»áÊÇÒì²½¡£

Ò²¾ÍÊÇ˵Êý¾Ý²¢²»»áÁ¢¼´·µ»Ø£¬¶øÊÇÒªµÈµ½¶Ô http://another_siter ·ÃÎʽáÊøºó£¬²Å»á½«½á¹û·Åµ½ Response Àï¡£

Moco µÄ API Ó÷¨

Ç°ÃæµÄÕâЩÓ÷¨ÔÚ Moco Àï±»³ÆÎª"Standalone", ËüÇ¿µ÷µÄÊÇ Moco µÄ¼òµ¥ÐԺͿÉÅäÖÃÐÔ£¬¶ø Moco µÄ API ÊÇËüµÄÁíÒ»¸öÌØÉ«£¬Ëü¸ü¼Ó¹Ø×¢ÈçºÎÔÚ²âÊÔÓÃÀýÀïÈçºÎʹÓà Moco¡£

ÎÒÃÇÏÈ¿´Ò»¸ö»ùÓÚ Moco µÄµäÐͲâÊÔÓÃÀý

import org.junit.Test;
import java.io.IOException;
import com.github.dreamhead.moco.HttpServer;
import org.apache.http.client.fluent.Content;
import org.apache.http.client.fluent.Request;
import com.github.dreamhead.moco.Runnable;

import static com.github.dreamhead.moco.Moco.*;
import static com.github.dreamhead.moco.Runner.*;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

@Test
public void should_response_as_expected() throws Exception {
HttpServer server = httpserver(12306);
server.response("foo");

running(server, new Runnable() {
@Override
public void run() throws IOException {
Content content = Request.Get("http://localhost:12306").execute().returnContent();
assertThat(content.asString(), is("foo"));
}
});
}

ÉÏÃæµÄ²âÊÔÓÃÀý£¬ÃèÊöÁËÈçºÎÆô¶¯ Moco£¬ÒÔ¼°µ÷ÓÃÏàÓ¦µÄ°ïÖú·½·¨À´±àд²âÊÔ¡£

ÓÐʱÎÒÃÇÏ£Íû²âÊÔÓÃÀý±¾ÉíÄܹ»¿ØÖÆ Server µÄÆô¶¯ºÍ¹Ø±Õ£¬ÕâÀïÒªÓõ½@Before, @After ÕâЩ Junit Àï×î³£ÓõÄ×¢ÊÍ

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

import static com.github.dreamhead.moco.Moco.httpserver;
import static com.github.dreamhead.moco.Runner.runner;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class MocoRunnerTest {
private Runner runner;

@Before
public void setup() {
HttpServer server = httpserver(12306);
server.response("foo");
runner = runner(server);
runner.start();
helper = new MocoTestHelper();
}

@After
public void tearDown() {
runner.stop();
}

@Test
public void should_response_as_expected() throws IOException {
Content content = Request.Get("http://localhost:12306").execute().returnContent();
assertThat(content.asString(), is("foo"));
}
}

Moco + Web ¼¯³É²âÊÔ°¸Àý

Á˽âÁË Moco µÄ¾ßÌåʹÓ÷½·¨£¬ÎÒÃÇÀ´¿´Ò»¸öÕæÊµµÄ»ùÓÚ Moco µÄ°¸Àý£¬´Ó¶øÀí½âΪʲô Moco ¶ÔÓÚ Web ¿ª·¢ÈËÔ±À´ËµÊǸïÃüÐԵģ¡

ÓÃÀý£º

ÔÚ Web Éϵ÷Óà Ajax »ñÈ¡·þÎñÆ÷¶ËµÄ°æ±¾£¨version£©ºÅ£¬²¢¸ù¾Ý·µ»ØµÄÖµÏÔʾ²»Í¬µÄÌáʾÐÅÏ¢¡£

·ÖÎö£º

ÆäÊµÃæ¶ÔÕâÑùµÄÐèÇó£¬ÎÒÃǺÜÈÝÒ׿´³öÕâ¸öÓÃÀý±¾Éí£¬¹Ø×¢µÄÊÇ"ÏÔʾ²»Í¬µÄÌáʾÐÅÏ¢"Õâ¸ö¹¦ÄÜ£¬ÖÁÓÚ·µ»ØµÄ version Öµ£¬Óû§¸ù±¾²»±Ø¹ØÐÄ»òÕß˵ÕâÊôÓÚϵͳÄÚ²¿µÄÂß¼­¡£

ÎÒÃÇÏÈÀ´¿´¿´ÒÔǰµÄ×ö·¨

°²×°²¢ÅäÖúà Web Server (Tomcat or Apache)

½¨Á¢±ØÒªµÄ Web ¹¤³ÌÎļþ£¬µ¼ÈëÓëÏîÄ¿Ïà¹ØµÄ¿ò¼Ü£¬±ÈÈç struts2

Èç¹ûµ×²ãϵͳÊÇ Java ±¾Éí£¬ÐèÒªµ¼Èë»òÕß±àÒëÏà¹ØµÄ jar Îļþ£¬Èç¹ûµ×²ãÓÃÆäËûµÄÓïÑÔ¿ª·¢£¬¾ÍÐèÒª²½Öè 4

´î½¨µ×²ã¿ª·¢»·¾³»òÕßÔÚ±àÒë»úÆ÷ÉϱàÒë Lib »òÕß so Îļþ£¬ÔÚÈ·±£Äܹ»ÔËÐеÄÇé¿öÏ£¨ÐèÒª²âÊԽű¾£©²¢µ¼Èëµ½ÏîÄ¿µ±ÖÐ

·¢²¼ Web Ó¦Óò¢²âÊÔ£¬Èç¹ûµ×²ã API Óб䶯»òÕß·½·¨µ÷ÓôíÎó£¬ÐèÒªÔÙ´ÎÔËÐв½Öè 4¡£

±àд²¢²âÊÔ Ajax Âß¼­¡£

ÄÇôÎÒÃÇ¿´¿´»ùÓÚ Moco µÄ¿ª·¢²½Öè»áÊÇʲôÑùµÄ£º

±àдÅäÖÃÎļþ£¬ ÕâÀïÒªÓõ½¸Õ²Å˵µÄͬ²½·½·¨

[
{
"env" : "remote",
"include": "foo.json",
},
{
"env" : "local",
"include": "bar.json",
}
]

Æô¶¯ Moco ·þÎñ

java -jar moco-runner-<version>-standalone.jar start -p 12306 -g env.json -e remote

Ôںܶàʱºò£¬ÎÒÃÇÍùÍù½«Ê±¼äÀË·ÑÔÚ²½Öè 3£¬4 ÖУ¬¼´Ê¹ÒѾ­ÓбàÒëºÃµÄ Lib »òÕß so£¬»¹ÊÇ´æÔÚ×ŲâÊԵıØÒªºÍ·çÏÕ¡£Web µÄ¿ª·¢ÈËÔ±Ò»·½ÃæÒªÍê³É×Ô¼º¿ª·¢ÈÎÎñ£¬ÁíÒ»·½Ã滹Ҫ°çÑݵײã´úÂë²âÊÔÔ±½ÇÉ«¡£

±àд Web Ó¦Ó㬵÷Óà ajax ÇëÇó

Moco Èÿª·¢ÈËÔ±¸ü¹Ø×¢Ó¦Óñ¾Éí£¬¶ø²»±Ø½«Ê±¼äºÍ¾«Á¦»¨·ÑÔÚ Lib »òÕß so µÄ¿ÉÓÃÐÔÉÏ£¬¶øÇÒûÓи´Ô Web ÈÝÆ÷ÅäÖ㬹Ø×¢µÄ¾ÍÊÇÇÐʵµÄ¹¦Äܱ¾Éí¡£

ͬʱ£¬ËüµÄ API ÓÐÀûÓÚ Web ¿ª·¢Õß±àд²âÊÔÓÃÀý£¬½«ÒÔǰ²¿ÃÅÖ®¼äµÄÎÞЧ¹µÍ¨£¬½¨Á¢ÔڿɶÈÁ¿µÄ²âÊÔÓÃÀýÖ®ÉÏ£¬´Ó¶øÌá¸ßÁË Web ¼¯³É²âÊԵĿɿ¿ÐÔ£¬²¢ÓÐЧµØ½µµÍÁ˼¯³É²âÊԵķçÏÕ£¡

   
3346 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

LoadRunnerÐÔÄܲâÊÔ»ù´¡
Èí¼þ²âÊÔ½á¹û·ÖÎöºÍÖÊÁ¿±¨¸æ
ÃæÏò¶ÔÏóÈí¼þ²âÊÔ¼¼ÊõÑо¿
Éè¼Æ²âÊÔÓÃÀýµÄËÄÌõÔ­Ôò
¹¦ÄܲâÊÔÖйÊÕÏÄ£Ð͵Ľ¨Á¢
ÐÔÄܲâÊÔ×ÛÊö

ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
²âÊÔ¹ý³ÌÓëÍŶӹÜÀí
LoadRunner½øÐÐÐÔÄܲâÊÔ
WEBÓ¦ÓõÄÈí¼þ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
°×ºÐ²âÊÔ·½·¨Óë¼¼Êõ

ij²©²ÊÐÐÒµ Êý¾Ý¿â×Ô¶¯»¯²âÊÔ
IT·þÎñÉÌ Web°²È«²âÊÔ
IT·þÎñÉÌ ×Ô¶¯»¯²âÊÔ¿ò¼Ü
º£º½¹É·Ý µ¥Ôª²âÊÔ¡¢Öع¹
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀý·ÖÎö
»¥ÁªÍøweb²âÊÔ·½·¨Óëʵ¼ù
»ùÓÚSeleniumµÄWeb×Ô¶¯»¯²âÊÔ