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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÐÐΪÇý¶¯¿ª·¢ÔÚ Python ¿ª·¢²âÊÔÖеÄÓ¦ÓÃ
 
×÷ÕߣºÄôÀöÄÈ,Àîƽ,º«ÑÞÑÞ À´Ô´£ºInfoQ ·¢²¼ÓÚ 2015-04-15
  3567  次浏览      20
 

ÐÐΪÇý¶¯¿ª·¢£¨BDD Behavior Driven Development£©Ö¸¿ª·¢ÕßÕ¾ÔÚ¿Í»§µÄ½Ç¶ÈÀ´¹Û²ìϵͳ£¬Ë¼¿¼ÏµÍ³Ó¦¸Ã¾ßÓÐʲôÑùµÄÐÐΪ²ÅÄÜÂú×ã¿Í»§ÐèÇóµÄÕâÑùÒ»ÖÖ¿ª·¢¹ý³Ì¡£BDD »ùÓÚÒ»ÖÖ¡°Í¨ÓÃÓïÑÔ¡±¶¨ÒåÁËͬʱÄܱ»¿Í»§ºÍ¿ª·¢ÕßÀí½âµÄϵͳÐÐΪ£¬ÔÚ×î´ó³Ì¶ÈÉϱÜÃâ±í´ï²»Ò»Ö´øÀ´µÄÎÊÌâ¡£»ùÓÚÕâһ˼Ï룬±¾ÎÄÒÔ Linux ƽ̨Ϊ»ù´¡£¬Í¼ÎIJ¢Ã¯µÄ½âÎöÁËÆäÓ¦ÓÃÓÚ Python µÄ¿ª·¢²âÊÔ¹ý³Ì£¬²¢¸ø³öÁË Python ÓïÑÔ Lettuce ²âÊÔ¿ò¼Ü´î½¨µÄÏêϸ²½Öè¡£¼ÈÓÐÖúÓÚÓû§ÐÎÏóÀí½â BDD ÀíÂÛ£¬ÓÖ¶Ô Python ѧϰÕßÓкܺõĽè¼øÒâÒå¡£

ÐÐΪÇý¶¯¿ª·¢ (BDD) ¼ò½é

ÐÐΪÇý¶¯¿ª·¢ÊÇʲô£¿

˵µ½ÐÐΪÇý¶¯¿ª·¢£¨BDD£©£¬Î޿ɱÜÃâµÄÒªÌáµ½Ãô½ÝÀïÃæµÄ²âÊÔÇý¶¯¿ª·¢£¨TDD£©£¬TDD µÄÖ÷Ҫ˼ÏëÊÇ¡°´úÂë¼´Îĵµ¡±£¬Æ䳫µ¼µÄÁ÷³ÌÊǸù¾ÝÉè¼Æ±àд²âÊÔ-> ʵÏÖÉè¼ÆµÄ¹¦ÄÜ -> ÓòâÊÔ´úÂëÑéÖ¤ -> Öع¹ÊµÏÖ´úÂë -> ¸ÄÉÆÉè¼Æ -> Ôٴλص½¸ù¾Ý¸ÄÉƵÄÉè¼Æ±àд²âÊÔ¡£

ͼ 1 »ùÓÚ TDD µÄÏîÄ¿¿ª·¢Á÷³Ì

BDD£¬¼´ÐÐΪÇý¶¯±à³Ì£¬ÊÇ TDD µÄÒ»¸ö¸Ä½ø°æ±¾£¬BDD ±¾ÖÊÉÏÒ²ÊÇ TDD£¬µ«ÊÇ±È TDD Òª¸ü¼Ó×ÔȻһЩ£¬¸ü DSL »¯¡£ÏµÍ³ÒµÎñר¼ÒÒÔ¼°²âÊÔ¿ª·¢ÈËÔ±Ò»ÆðºÏ×÷£¬·ÖÎö³öÈí¼þµÄÐèÇó£¬È»ºóÏñ¹ÊÊÂÒ»ÑùÃèÊö³öÒ»¸ö¸ö¾ßÌå¿ÉÖ´ÐÐµÄ Behavior£»Ö®ºó¿ª·¢Õ߸ºÔðÌî³äÕâЩ¹ÊʵÄÄÚÈÝ£¬²âÊÔÈËÔ±¸ºÔð¼ìÑé¹Êʽá¹ûµÄÕýÈ·ÐÔ¡£Ò»¸ö±È½Ï¼òµ¥µÄ°¸Àý¼´Óû§µÇ¼³¡¾°²âÊÔ£º

ͼ 2 Óû§µÇ¼³¡¾°²âÊÔ

×÷ΪÆÕͨÓû§£¬ÎÒÔڵǼÍøվʱ£¬¾ÍÇ£³¶µ½Óû§ÃûºÍÃÜÂëµÄУÑ顣ͬÑùµÄ¹ÊʾÍÒò´Ë»áÓв»Í¬µÄ³¡¾°·¢Éú:

ͼ 3 ·Ç·¨Óû§µÇ¼³¡¾°

Èç¹ûÊÇÒ»¸öºÏ·¨Óû§À´·¢³öÇëÇó£¬ÄÇôÓÖ½«ÊÇÁíÍâÒ»¸ö³¡¾°£º

ͼ 4 ºÏ·¨Óû§µÇ¼³¡¾°

ÓÐÁËÕâЩ³¡¾°ÃèÊö£¬²âÊÔÈËÔ±¿ÉÒÔͨ¹ýһЩ BDD ²âÊÔ¿ò¼Ü½«ÉÏÃæµÄ¹ÊÊÂת³É²âÊÔ´úÂë, ¿ª·¢ÕßʵÏÖ²úÆ·¹¦ÄÜ£¬±£Ö¤ËùÓеIJâÊÔ°¸Àý³É¹¦Í¨¹ý¡£

ΪʲôҪ½øÐÐÐÐΪÇý¶¯¿ª·¢£¿

ÈçÉÏ¿ÉÒÔ¿´³ö£¬ÐÐΪÇý¶¯¿ª·¢µÄ¸ù»ùÊÇÒ»ÖÖ¡°Í¨ÓÃÓïÑÔ¡±£¬ÀàËÆÓÚÓÃÒ»¸ö×îС»¯µÄ´Ê»ã±íÀ´¶¨Ò壬ÆäÖÐÕâЩ´Ê»ã¾ßÓÐ׼ȷÎÞÎóµÄ±í´ïÄÜÁ¦ºÍÒ»Öµĺ¬Òå¡£

as Ö¸Ã÷ϵͳÐÐΪÊÇΪʲô½ÇÉ«¶ø¶¨ÒåµÄ¡£

In order to ºÍ I want ¶¨ÒåÁËÐÐΪµÄ·¶Î§£¬±íÃ÷ÁËÏë´ïµ½µÄÄ¿µÄ£¬Ïë×öµÄÊÂÇé¡£

Given ¸ø³öÁË×¼±¸Òª²âÊԵĶÔÏóºÍ²âÊÔ»·¾³¡£

When µ÷ÓÃÒª²âÊÔµÄÒµÎñ·½·¨¡£

Then ¶Ô²âÊÔ½á¹û½øÐÐÑéÖ¤

ÕâÖÖͨÓÃÓïÑÔͬʱ±»ÐèÇ󣬿ª·¢£¬²âÊԺͿͻ§µÈÏîÄ¿Ïà¹ØÈËÔ±ÓÃÀ´¶¨ÒåϵͳµÄÐÐΪ¡£ÕâÑù×Ó´ó¼Ò¿´µ½µÄÃèÊöÒ»Ö£¬ÄÚÈÝÒ»Ö£¬×î´ó³Ì¶ÈµÄ½»¸¶³ö·ûºÏÓû§ÆÚÍûµÄ²úÆ·£¬±ÜÃâ±í´ï²»Ò»Ö´øÀ´µÄÎÊÌâ¡£

ͼ 5 ʹÓÃÐÐΪÇý¶¯¿ª·¢µÄ¿ª·¢×´Ì¬Í¼

¹ÅÈËÔÆ¡°¹¤ÓûÉÆÆäÊ£¬±ØÏÈÀûÆäÆ÷¡±£¬Òò´ËÔÚÏêϸ½éÉÜ»ùÓÚ BDD ˼ÏëµÄ Python ¿ª·¢²âÊÔ¹ý³Ì֮ǰ£¬ÎÒÃÇÏÈÀ´¿´Ò»ÏÂÈçºÎ´î½¨Ò»¸öÓÐЧÒ×ÓÃÇÒÎȶ¨µÄ²âÊÔ¿ò¼Ü¡£

Python BDD ²âÊÔ¿ò¼ÜµÄ´î½¨

Lettuce ¼ò½é

ΪʲôÔÚÕâÀïÒªÌáµ½ Lettuce ÄØ£¿¿´ËüµÄ¹ÙÍø½éÉÜ£¬Õâ¸ö¿ò¼ÜÔÚ Python ÓïÑԵIJâÊÔÓ¦Óÿ°±È Ruby ÓïÑÔÁìÓòµÄ Cucumber£¬Ëü¿ÉÒÔ¶Ô Python ÏîÄ¿½øÐÐ×Ô¶¯»¯²âÊÔ£¬ÖµµÃ×¢ÒâµÄÊÇÕâÀïµÄ²âÊÔÓÃÀýÊÇ´¿Îı¾µÄ£¬¾ßÓкܺõĿɶÁÐÔ¡£ÕâÑùµÄ»°£¬¼´Ê¹ÊDz»¶®±à³ÌµÄÈËÒ²¿ÉÒÔÕ¾ÔÚϵͳ»òÓû§µÄ½Ç¶ÈÀ´Ð´²âÊÔÓÃÀý£¬²¢ÇÒÔÚÏîÄ¿¿ª·¢¹ý³ÌÖУ¬Õâ¸ö×Ô¶¯»¯²âÊÔÓÃÀý¿ÉÒÔºÜÈÝÒ×µÄÐ޸ġ¢À©³ä£¬¿ª·¢ÈËÔ±Ò²ÄܺܿìµÄµ÷Õû£¬´Ó¶ø±£Ö¤²âÊÔÓÃÀý˳Àûͨ¹ý¡£

´î½¨ Lettuce ²âÊÔ¿ò¼Ü

Ç°ÃæÒѾ­ËµÁ˺ܶà Lettuce µÄ×÷Óúͺô¦£¬ÄÇôÏÂÃæÎÒÃÇÀ´¿´ÏÂÈçºÎÔÚ×Ô¼ºµÄ»·¾³ÉϴÕâÑùÒ»¸ö²âÊÔ¿ò¼Ü¡£½ÓÏÂÀ´±ÊÕß½«¸ø³ö Redhat Linux + Python2.6 ÕâÑùµÄ»·¾³ÏµĴ²½Öè¡£

Ê×ÏÈ£¬Python ÉÏ°²×° package µÄʱºò£¬Ò»°ã¶¼»á½¨Á¢Ò»¸ö Virtualenv¡£

ÈçºÎÀ´Àí½â Virtualenv ÄØ£¿VirtualenvÊÇÒ»¸ö Python »·¾³¹ÜÀí¹¤¾ß£¬Ëü¿ÉÒÔ´´½¨¶ÀÁ¢µÄ Python »·¾³£¬¶à¸ö Python Ï໥¶ÀÁ¢£¬»¥²»Ó°Ïì¡£¼òµ¥µÄÀ´Ëµ£¬Äã¿ÉÒÔ½«Ëü¿´×öÊÇÒ»¸ö¸ö¸ôÀëµÄɳºÐ£¬Ã¿Ò»¸öɳºÐÖ®¼äÏà¶Ô¶ÀÁ¢£¬±£³Ö×ÅÒ»¸öÏà¶Ô¶ÀÁ¢¸É¾»µÄ»·¾³¡£¿ÉÄÜÕâÑù˵£¬Ä㻹ûÓÐÀí½âµ½ËüµÄʵ¼ÊºÃ´¦£¬ÊÔÏëһϣ¬Äã֮ǰÓÐÒ»¸öÏîÄ¿ A ÐèÒªÒÀÀµ Django1.2.5, ¶øÏÖÔÚÓÖÓÐÒ»¸öеÄÏîÄ¿ B£¬ËüÐèÒªÒÀÀµ Django1.3£¬Õâʱ³ýÁË°ÑËüÃǷŵ½²»Í¬µÄɳºÐÀïÃ棬Ä㻹¿ÉÒÔÖØдîÒ»Ì× Python »·¾³£¬ÉõÖÁÓÚÐèÒª»»Ì¨»úÆ÷£¬ÕâÑùɳºÐµÄºÃ´¦¾ÍÏÔ¶øÒ×¼ûµÄÁË£¬Ó¦¸ÃûÓÐÈ˻᲻ϲ»¶Õâô¼òµ¥µÄ·½·¨¡£ºÃµÄ£¬¼ÈȻϲ»¶£¬ÄÇôÈçºÎÀ´°²×°²¢¼¤»îÄØ£¿

1.install virtualenv

easy_install virtualenv-1.6.4.tar.gz

2.create virtual environment (vevn)

virtualev [vevn_folder] --no-site-packages

3.enter into [venv_folder]

source bin/active

½öÐèÒªÒÔÉÏ 3 ¸öÃüÁî¾Í¿ÉÒÔ°²×°²¢¼¤»î Virtualenv ÁË£¬ÖµµÃ×¢ÒâµÄÊÇ£¬Õâ¸ö Virtualenv ¿´ÉÏÈ¥¾ÍÊǸöÎļþ¼Ð [vevn_folder]£¬¿ÉÒÔºÜÈÝÒ×µØɾ³ý¡¢Öؽ¨µÈµÈ£¬µ«ÔÚÿ´ÎʹÓÃÇ°¶¼ÐèÒª½«Ëü¼¤»î¡£

ÁíÍâÎÒÃÇÕâÀïʹÓÃÁË easy_install ÃüÁÕâÊÇ setuptools ´øµÄÒ»¸öÃüÁÆäÖÐ setuptools ÊÇÒ»¸ö·Ç³£ºÃµÄÓ¦ÓÃÓÚ Python µÄ°²×°¹¤¾ß£¬Ê¹ÓÃËü£¬¿ÉÒÔʹÓÃÈçÉϺܼòµ¥µÄÃüÁîÀ´°²×°ËùÐèÒªµÄ package¡£ÈçϾÍÊÇ°²×° setuptools ºÍ Virtualenv µÄ²½Öèͼ£º

ͼ 6 °²×° setuptools

ͼ 7 °²×°²¢¼¤»î Virtualenv

Æä´Î£¬ÎÒÃÇÐèÒªÇå³þµÄÊÇ£¬Lettuce °²×°°üÓкܶàÒÀÀµ£¬Òò´ËÔÚ°²×°Ö®Ç°ÎÒÃǵý«ËùÓеÄÒÀÀµ°ü×°ºÃ¡£

ÎÒÃÇ¿ÉÒÔ´ÓÍøÕ¾ÉÏÏÂÔØÕâЩÐèÒªµÄ°üµ½±¾µØ£¬µ±È»Ò²¿ÉÒÔÖ±½ÓÓà setuptools À´°²×°£¬Èç¹û±¾µØûÓа²×°°ü£¬Ëü»á×Ô¶¯ÏÂÔØ package µÄ×îа汾À´°²×°¡£²»¹ÜÔõôÑù£¬ÐèҪעÒâµÄÊÇ£¬ÓÉÓÚÕâЩ°üÖ®¼ä´æÔÚÒÀÀµ¹Øϵ£¬Òò´ËÐèÒª°´ÕÕÌض¨Ë³ÐòÀ´½øÐа²×°¡£ÒÔϾÍÊÇËùÓÐÒÀÀµ°üµÄ˳Ðò°²×°£º

±í 1 Lettuce ˳Ðò°²×°°ü

°²×°ÍêÖ®ºó¿ÉÒÔ×öÈçϵļòµ¥²âÊÔÀ´È·¶¨ÊÇ·ñ°²×°³É¹¦¡£

ÔÚÃüÁîÐÐÀïÖ±½ÓÊäÈë Lettuce, ÈçͼËùʾ£¬Èç¹ûÏÔʾÀàËÆÕÒ²»µ½ features µÄÌáʾÐÅÏ¢£¬ÄÇô¹§Ï²ÄãÒѾ­³É¹¦°²×°ÉÏÁË Lettuce ²âÊÔ¿ò¼Ü¡£

ͼ 8 Lettuce °²×°ÑéÖ¤

µ½ÕâÀËãÊÇ´òºÃÁË»ù´¡£¬»ØÍ·ÔÙ¿´¿´£¬°²×°Ê±ÐèҪעÒâµÄÓÐÒÔÏ 2 ¸ö·½Ã棺

1. Èç¹û½¨Á¢µÄÓÐ Virtualenv£¬ÄÇôÔÚ×öÈκβÙ×÷֮ǰ±ØÐëÒªÏȼ¤»îËü£»

2. ¶ÔÓÚ Python À´Ëµ£¬ÌرðÊÇҪעÒâ°üÖ®¼äµÄÒÀÀµ£¬Èç¹û²»Çå³þ£¬¿ÉÒÔÏȲé²é£¬ÊµÔÚ²»ÐУ¬Óà easy_install Õâ¸ö¹¤¾ßÀ´°²×°£¬Ëü»á×Ô¶¯¼ì²éÒÀÀµ¹Øϵ£¬Èç¹ûȱʧÔò»á×Ô¶¯´ÓÍøÉÏÏÂÔØ×îеÄÆ¥Åä°æ±¾²¢½øÐа²×°£¬µ«Óöµ½ÒÀÀµ¹Øϵ¸´ÔÓ¶øÍøÂç×´¿öÓÖ²»ºÃµÄʱºò£¬×îºÃÊÖ¶¯ÏÂÔطŵ½±¾µØĿ¼£¬¾ÍÏñ±¾ÎÄÖÐÓõ½µÄ°üÒ»Ñù¡£

»ùÓÚ BDD ˼ÏëµÄ Python ¿ª·¢²âÊÔ¹ý³Ì

½ÓÏÂÀ´ÕâÒ»Õ£¬ÎÒÃÇÏ£Íûͨ¹ýÉú¶¯ÏêϸµÄ°¸ÀýÀ´½²Êö²âÊÔÓÃÀý¼°²âÊԽű¾µÄ±àдºÍÔËÐйý³Ì¡£±ÈÈç˵ÎÒÃÇÏë×Ô¼ºÊµÏÖÒ»¸ö¼ÆËãÕûÊý n ´Î·½µÄ¼ÆËãÆ÷£¬µ±È»Õâ¸ö³ÌÐò¿ÉÄܱȽϼòµ¥£¬µ«ÕâÀïΪÁ˸üºÃµÄÀí½â BDD µÄ˼Ï룬ÎÒÃǼÙÉèËüºÜ¸´ÔÓ£¬¸Õ¿ªÊ¼²»ÖªµÀÔõôʵÏÖ£¬ÎÒÃǾÍÖ»ºÃÏÈд²âÊÔÓÃÀý£¬È»ºóÒ»²½²½µÄÐ޸ĴúÂëÈÃËùÓпÉÄܵÄÓÃÀýͨ¹ý¡£½ÓÏÂÀ´±¾ÎĽ«ÒÔ 4 ¸öµü´úÏêϸÃèÊö¸Ã¹ý³Ì¡£

²âÊÔÓÃÀý¼°²âÊԽű¾µÄ±àд

ÔÚд²âÊÔÓÃÀýʱ£¬¾Í²ÎÕÕÇ°ÃæÕ½ÚËù½éÉܵģ¬ÓÃһЩ¼òµ¥ÎÞÒìÒéµÄ×îС´Ê»ã×éÀ´ÃèÊö¿ÉÄܵÄÓû§³¡¾°¡£

µü´ú 1

Ïȸø³öÒ»¸ö n ´Î·½¼ÆËãÆ÷³ÌÐòµÄ½Ó¿Ú computePow.py£¬ÈçÏÂËùʾ£¬ÎÒÃDz»ÖªµÀÈçºÎʵÏÖËü£¬ËùÒÔÈüÆËã½á¹û¶¼Îª-1¡£

ͼ 9 ¼ÆËã³ÌÐò½Ó¿Ú¶¨Òå

½ÓÏÂÀ´ÏÈÀ´Ò»Ìõ×î¼òµ¥µÄ²âÊÔÓÃÀý computePow.feature£¬ÈçÏÂͼËùʾ£¬Õâ¸ö²âÊÔÓÃÀýÔÚÉÏÃæÊ×ÏÈ˵Ã÷ÁËÕâÊÇÒ»¸ö¼ÆËã n ´Î·½µÄ feature£¬ÁíÍ⻹¼òµ¥ËµÃ÷ÁË×÷Õߣ¬Ä¿µÄµÈ£¬×îÖØÒªµÄÊÇÓà 3 ¸ö²½ÖèºÜÇå³þµÄÃèÊöÁËÒ»¸öÓû§³¡¾°£¬¼´ 1 µÄ 0 ´Î·½Îª 1

ͼ 10 ²âÊÔÓÃÀýÃèÊö

²»ÓÃÔÙ¶à˵£¬Ïë±Ø´ó¼ÒÒѾ­¸ÐÊܵ½ÕâÑùµÄ²âÊÔÓÃÀýµÄºÃ´¦£¬¼òµ¥Ã÷ÁË£¬Ò׶ÁÐԸߣ¬ÐÅÏ¢Á¿´ó£¬±ãÓÚά»¤¡£µ±È»µ½´ËΪֹ£¬Õâ¸ö¿´ÉÏÈ¥ºÜÇåÎúÃ÷Á˵IJâÊÔÓÃÀýÖ»ÊǶÔÓû§À´ËµÊÇÕâÑùµÄ£¬¼ÆËã»úÊÇÈçºÎÀí½âµÄÄØ£¿Õâ¾ÍÐèÒªÎÒÃǶÔÕâЩ step ×öת»»£¬´Ó¶øʹ³ÌÐòÕýÈ·Àí½âÓû§ÐÐΪ¡£ÈçÏÂËùʾÎÒÃǶ¨ÒåÁËÒ»¸ö½âÊͽű¾ step.py£º

 

ͼ 11 ½âÊͽű¾

Õâ¸ö step.py ÐèÒªºÍÇ°ÃæµÄ²âÊÔÓÃÀý computePow.feature ½áºÏÀ´¿´£¬Ê×ÏÈ step.py ÀïÃ涨ÒåÁË 3 ¸ö·½·¨£¬Ã¿¸ö·½·¨ÊÇºÍ factorial.feature ÎļþÀïÃæµÄÓû§³¡¾°µÄÿһ¸ö²½Öè¶ÔÓ¦£¬¶øÕâ¸ö¶ÔÓ¦¹æÔò¾ÍÊÇ¿¿·½·¨ÉÏÃæµÄ @step(...) Ëù±êʶµÄÕýÔò±í´ïʽÀ´Æ¥ÅäµÄ£¬ÆäÖÐÓÐÕýÔò±í´ïʽµÄµØ·½£¬Èç (\d+)£¬±íʾÊDzÎÊý´øÈ룬±ÈÈçÔÚ·½·¨ have_the_number ÖУ¬ÉÏÃæµÄÆ¥Åä¹æÔòÓÐÁ½¸ö (\d+)£¬±íʾÕâÀïÓÐÁ½¸öÊý×Ö²ÎÊý£¬Òò´Ë¸Ã·½·¨Ò²´øÁËÁ½¸öÐÎʽ²ÎÊý bottomnumber ºÍ uppernumber¡£ÔËÐÐʱ£¬ÕâÁ½¸ö²ÎÊýÖµ½«´Ó²âÊÔÓÃÀý¶ÔÓ¦µÄ step ÖлñÈ¡£¬¼´ Given I have the bottomnumber 1 and the uppernumber 0£¬Ò²¾ÍÊÇ˵ʵ¼Ê²ÎÊý½«ÊÇ 1 ºÍ 0¡£ÁíÍâÐèҪעÒâµÄÊÇÎÒÃÇÇ¿ÁÒÖ§³Ö´úÂëµÄ¿É¶ÁÐÔ£¬Òò´ËÕâÀï step.py Öеķ½·¨Ãû¶¼ºÜÈÝÒ×Àí½â¡£

ºÃÁË£¬ÖÁ´ËÒ»Ìõ¼òµ¥µÄ²âÊÔÓÃÀýÒѾ­Íê³É£¬ÎÒÃÇÀ´ÈÃËüÔËÐÐһϣ¬½øÈëµ½ÎļþËùÔÚĿ¼£¬Ê¹ÓÃÃüÁlettuce computePow.feature£¬ÔËÐнá¹ûÈçÏÂͼËùʾ¡£

ͼ 12 ÔËÐвâÊÔÓÃÀý

ÔËÐнá¹ûÏÔʾ£¬×ܹ²ÔËÐÐÁËÒ»¸ö feature ºÍÒ»¸ö scenario£¬¶¼ÔËÐÐʧ°Ü£¬scenario Öй²ÓÐ 3 ¸ö step£¬ ÆäÖÐ 2 ¸ö³É¹¦ÔËÐУ¬»¹ÓÐÒ»¸öʧ°Ü£¬´ÓͼÖпÉÒÔ¿´µ½Ê§°ÜµÄµØ·½ÒÔ¼°¾ßÌå¶ÑÕ»ÐÅÏ¢¡£

´ÓÕâÀï¾Í¿ÉÒÔÌå»á BDD µÄºÃ´¦£¬¶ÔÓÚ²âÊÔÈËÔ±À´ËµÄܺÜÇå³þµÄÃ÷°×ÎÊÌâ³öÔÚÄÄÒ»²½£¬¿ÉÒÔÕÒË­È¥¹µÍ¨£»¶øÕâЩ´íÎóÐÅÏ¢Ò²ÄܺܺõİïÖú¿ª·¢ÈËÔ±½â¾öÎÊÌ⣻ÁíÍâÏÂÃæµÄͳ¼ÆÊý×ÖÒ²ÄܺÜÇå³þµØ¿´µ½²âÊÔͨ¹ý°Ù·Ö±È¡£

¼ÈÈ»²âÊÔÓÃÀýÅÜʧ°ÜÁË£¬½ÓÏÂÀ´ÎÒÃǾÍÐ޸ĴúÂëÈÃÓÃÀý³É¹¦ÅÜͨ¡£Í¨¹ýÊýѧ¼ÆË㣬ÎÒÃÇÖªµÀ 1 µÄ 0 ´Î·½ÊÇ 1£¬Òò´ËÎÒÃÇÐ޸ļÆËã³ÌÐò computePow.py£¬ÈÃËü·µ»Ø 1£¬ÐÞ¸ÄÍêÖ®ºóÔËÐÐһϣ¬·¢ÏÖÕâʱ²âÊÔÓÃÀýÒѾ­ÍêÈ«Åܹý¡£ÈçÏÂËùʾ£º

ͼ 13 Ð޸ĺó¼ÆËã³ÌÐò½Ó¿Ú

ͼ 14 ÔÙ´ÎÔËÐвâÊÔÓÃÀý

µü´ú 2

½ÓÏÂÀ´£¬ÎÒÃǾͿÉÒÔ¿¼ÂÇÀ©Õ¹²âÊÔÓÃÀý£¬ÎªÈòâÊÔ¸üÍ걸£¬ÔÚÕâÀïÎÒÃÇÔö¼ÓÁË 3 ¸ö¼ÆË㣬·Ö±ðÊÇ 3 µÄ 0 ´Î·½Îª 1£¬2 µÄ 1 ´Î·½Îª 2 ºÍ 5 µÄ 0 ´Î·½Îª 5£¬ÐÂÔöÓÃÀýÈçÏÂËùʾ£º

ͼ 15 ²âÊÔÓÃÀý¹¦ÄÜÀ©Õ¹

ÔËÐиÃÓÃÀýÖ®ºó£¬·¢ÏÖÔÚ Scenario: pow(2, 1) ºÍ Scenario: pow(5, 1) ³ö´í£¬ÈçÏÂËùʾ£¬¸Ã´ÎÔËÐÐÓÐ 2 ¸ö scenario ³É¹¦ÔËÐУ¬2 ¸öʧ°Ü£¬´ÓÔËÐнá¹û¿ÉÒÔºÜÈÝÒ×µØÖªµÀÊÇÄÄÒ»¸ö²½Öè³ö´í¡£

ͼ 16 ²âÊÔÓÃÀý¹¦ÄÜÀ©Õ¹ºóÔËÐнá¹û

Òò´ËÎÒÃÇÐ޸ļÆËã³ÌÐò step.py£¬ÈçÏÂËùʾ£º

ͼ 17 µÚ 3 ´ÎÐ޸ļÆËã³ÌÐò½Ó¿Ú

ÔÙ´ÎÔËÐÐÃüÁî lettuce computePow.feature, ·¢ÏÖÎÒÃǵÄÕâ 4 ¸ö Scenario ºÍ 12 ¸ö step ¶¼Äܳɹ¦Åܹý¡£

µü´ú 3

µ½ÕâÀïÎÒÃDzŲâÊÔÁË 4 ¸ö¼òµ¥ÓÃÀý£¬½ÓÏÂÀ´ÎÒÃÇÔÙÔö¼Ó 2 ¸öÉÔ΢¸´ÔÓЩµÄÓÃÀý£¬¼ÆËã 2 µÄ 3 ´Î·½Îª 8£¬3 µÄ 2 ´Î·½Îª 9£¬ÐÂÔöÓÃÀýÈçÏÂËùʾ£º

ͼ 18 ²âÊÔÓÃÀýµÚ 2 ´Î¹¦ÄÜÀ©Õ¹

ÔËÐиÃÓÃÀýÖ®ºó£¬·¢ÏÖÔÚÐÂÔöµÄ 2 ¸öÓÃÀý´¦ Scenario: pow(2, 3)£¬Scenario: pow(3, 2) ³ö´í£¬Òò´ËÎÒÃÇÐ޸ļÆËã³ÌÐò computePow.py ÒÔÈÃÓÃÀýͨ¹ý£¬ÈçÏÂËùʾ£º

ͼ 19 µÚ 4 ´ÎÐ޸ļÆËã³ÌÐò½Ó¿Ú

ÔÙ´ÎÔËÐÐÃüÁî lettuce computePow.feature, ·¢ÏÖÎÒÃǵÄÕâ 6 ¸ö Scenario ºÍ 18 ¸ö step ¶¼ÄÜ˳ÀûÅܹý¡£

µü´ú 4

ÖÁ´ËÎÒÃǵļÆËãÆ÷С³ÌÐòÒѾ­Ë³ÀûÅܹý 6 ¸öÓû§³¡¾°£¬Èç¹ûÔÙÐÂÔöÓÃÀýµÄ»°£¬¾Í¿É·ÂÕÕÉÏÊö 3 ¸öµü´ú¹ý³ÌÀ´Ìí¼Ó£¬µ«ÊÇÕâÓÐÒ»¸öÎÊÌ⣬Ëæ×ÅÓû§³¡¾°Ôö¶à£¬ÎÒÃÇ·¢ÏÖ computePow.feature ±äµÄÔ½À´Ô½³¤£¬ÄÑÒÔ¹ÜÀí£¬×Ðϸ¹Û²ìһϣ¬·¢ÏÖÿ¸ö³¡¾°µÄ step ºÜÏàËÆ£¬Ò²¾Í˵ÎÒÃÇдÁ˺ܶàÖظ´µÄÃèÊöÐÅÏ¢£¬Õë¶ÔÕâÒ»ÎÊÌ⣬Lettuce ²âÊÔ¿ò¼Ü¿ÉÒÔÓà scenarios outlines À´½â¾ö£¬ÈçÏÂͼËùʾ£º

ͼ 20 ʹÓà scenarios outlines ÃèÊö²âÊÔÓÃÀý

ÕâÑùµÄд·¨¿ÉÒÔʹ²âÊÔÓÃÀýÔÚÒÀÈ»Äܱí´ï·á¸»µÄÐÅÏ¢µÄÇé¿öϱäµÄºÜ¾«¼ò£¬ÇÒ¸üÈÝÒ×¹ÜÀíºÍÀ©Õ¹¡£

²âÊԽű¾ÔËÐм°×Ô¶¯»¯

²âÊԽű¾ÈçºÎÔËÐÐÔÚÇ°Ò»ÕµÄʵÀýÖÐÒѾ­Ìáµ½£¬Ö»ÐèÒª¼òµ¥ÃüÁî lettuce computePow.feature ¾Í¿ÉÒÔ¡£ÕâÑùËü¾Í»áÔÚµ±Ç°Â·¾¶ÏÂËÑÑ°Óëÿһ¸ö step Æ¥ÅäµÄ½Å±¾À´½âÊÍÖ´ÐС£×¢ÒâµÄÊÇ£¬ÕâÀïµÄ²âÊÔÓÃÀýºÍ²âÊԽű¾µÄÃû×ÖûÓйØÁªÐÔ¡£Èç¹ûµ±Ç°Â·¾¶ÏÂÓжà¸ö²âÊÔÓÃÀýÎļþ£¬Ò²¾ÍÊÇ˵Óкܶà*.feature Îļþ£¬¾Í¿ÉÒÔÓà lettuce ./ »òÕß lettuce *.feature À´ÅúÁ¿Ö´ÐС£

µ½´ËÏë±Ø´ó¼ÒÒѾ­¶Ô BDD ÔÚ Python ÁìÓòµÄ¿ª·¢²âÊÔ¹ý³ÌÒÔ¼°²âÊÔ¿ò¼Ü´î½¨ÒѾ­ÓÐÒ»¸öÐÎÏóµÄÀí½â£¬ÔÚÇ°ÃæµÄʵÀýÖÐÒ²Ìå»áµ½ÁËÕâÖÖ·½·¨µÄºÃ´¦¡£×îºóÒªÌáµ½µÄ×Ô¶¯»¯ÊµÖÊÉÏÊÇÕâÖÖ·½·¨µÄÁíÍâÒ»¸öºÃ´¦£¬¼ÙÉèÎÒÃǵļÆËãÆ÷³ÌÐò½«·Ö²¼ÓÚ²»Í¬µÄ OS ÉÏ£¬ÐèÒª¶ÔÕâЩ»·¾³¶¼½øÐвâÊÔ£¬ÓÖ»òÕß˵ÎÒÃǵļÆËãÆ÷³ÌÐòÐèÒªÉý¼¶Óà Python µÄ¸ü¸ß°æ±¾µÈµÈ£¬ÕâÑùÎÒÃǾÍÒª½«²âÊÔ»·¾³ºÍ¿ª·¢»·¾³·ÖÀ룬ÔÚÎÒÃǵݸÀýÖУ¬¿ÉÒÔ¿´µ½²âÊÔÓÃÀýºÍ¼ÆËãÆ÷³ÌÐòÊDZ˴˶ÀÁ¢µÄ£¬ÕâÑùÎÒÃÇÖ»ÓÃ×öºÜÉٵŤ×÷£¬Æ©ÈçдһЩ¼òµ¥µÄ½Å±¾£¬È»ºóÔÚ²âÊÔ»·¾³ÉÏͨ¹ý set »ò export ÉèÖÃÔ¶³Ì¿ª·¢»·¾³µÄÔËÐбäÁ¿¾ÍÄܺÜÇáÒ×µÄÈÃËü×Ô¶¯»¯ÔËÐС£

×ܽá

±¾ÎÄÊ×ÏȶÔÐÐΪÇý¶¯¿ª·¢×öÁËÒ»¸ö¼ò½é£¬½ÓÏÂÀ´Í¨¹ýʵÀýͼÎIJ¢Ã¯µØ½²ÊöÁËÈçºÎ½«Õâһ˼ÏëÁé»îÔËÓõ½ Python ÁìÓò£¬Í¬Ê±Öм仹´©²åÁ˲âÊÔ¿ò¼Ü Lettuce µÄ°²×°¼°ÔËÐС£ÔÚ´Ë£¬Ï£Íû±¾ÎÄÄÜÆðµ½Ò»¸öÅ×שÒýÓñµÄ×÷Óã¬Ôö½ø¶ÁÕß¶Ô Python ºÍ BDD µÄÁ˽⣬ÓÐÐËȤµÄ¶ÁÕß¿ÉÒÔ½øÐÐÉîÈëÑо¿£¬½«ÆäÁé»îÓ¦Óõ½ÏîĿʵ¼ùÖС£

   
3567 ´Îä¯ÀÀ       20
Ïà¹ØÎÄÕÂ

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

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

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îпγ̼ƻ®
ÐÅÏ¢¼Ü¹¹½¨Ä££¨»ùÓÚUML+EA£©3-21[±±¾©]
Èí¼þ¼Ü¹¹Éè¼Æʦ 3-21[±±¾©]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 3-25[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼Æ 4-11[±±¾©]
SysMLºÍEAϵͳÉè¼ÆÓ뽨ģ 4-22[±±¾©]
DoDAF¹æ·¶¡¢Ä£ÐÍÓëʵÀý 5-23[±±¾©]

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


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


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