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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÎÞÂ۳ɰܣºSelenium½Å±¾ÔÚËæ»ú²âÊÔÖеĸ´ÓÃ
 
À´Ô´£º InfoQ  ·¢²¼ÓÚ£º 2017-5-4
  1949  次浏览      18
 

Ö÷Òª½áÂÛ

1.²âÊÔ×Ô¶¯»¯ÊÇÒ»ÖÖÍ×ÉƼǼ²¢¾ß±¸ÇåÎú¶¨ÒåµÄ·½·¨£¬½è´Ë¿ÉÒÔ·´¸´ÔËÐÐͬһÌײâÊԽű¾¡£È»¶øÓë´Ëͬʱ£¬ÕâÖÖ²âÊÔ×Ô¶¯»¯½Å±¾»¹¿É½øÒ»²½ÊµÏÖÆäËû¸üÓд´ÒâµÄÓ¦Óá£

2.ËäÈ»×Ô¶¯»¯µÄ·ÖÎö˼άºÜÄÑʵÏÖ£¬µ«ÎÒÃǵĽű¾ÖÐÎÞÒÉ¿ÉÒԾ߱¸Ò»¶¨µÄËæ»úÐÔ¡£

3.²âÊÔÖС°Ëæ»úÐÔ¡±µÄ¾ßÌå³Ì¶È¸÷Ò죺´ÓËæ»úÊäÈëºÍ²ÎÊý£¬ÔÙµ½È«ÃæµÄËæ»ú²âÊÔÓÃÀý£¬Çé¿ö²»Ò»¶ø×ã¡£

4.ºÜÄѽ«Ëæ»ú²½ÖèÓëÏàÓ¦µÄÑéÖ¤´ëÊ©Æ¥ÅäÆðÀ´£¬µ«ÎÒÃÇ¿ÉÒÔʹÓò»Í¬µÄÑéÖ¤²ßÂÔÈ·±£Ó¦ÓóÌÐòÄܹ»°´ÕÕÔ¤ÆÚ¹¤×÷¡£

5.Ëæ»ú²âÊÔÎÞ·¨È¡´úÖ÷¹Û»ò´«Í³²âÊÔ¼¼Êõ£¬µ«¿ÉÔڻعé²âÊÔ¹ý³ÌÖÐÈÃÎÒÃǶÔÓ¦ÓóÌÐòÖÊÁ¿¸üΪ×ÔÐÅ¡£

ÕýÈçCem KanerÔÚËûµÄһƬ½Ì³ÌÖÐËù˵£¬Ì½Ë÷ʽ²âÊÔÊÇÒ»ÖÖÇ¿µ÷¸öÈË×ÔÓɶȺ͸öÌå²âÊÔÈËÔ±ÔðÈεÄÈí¼þ²âÊÔ·½Ê½£¬¿Éͨ¹ý½«Óë²âÊÔÓйصÄѧϰ¡¢²âÊÔÉè¼Æ¡¢²âÊÔÖ´ÐУ¬ÒÔ¼°²âÊÔ½á¹ûµÄÀí½âÊÓ×÷һϵÁб˴ËÌáЯ£¬ÔÚÏîÄ¿ÍêÕû¹ý³ÌÖв¢ÐÐÖ´ÐеĻ£¬½è´Ë¶Ô²âÊÔ¹¤×÷µÄ³É¹û½øÐгÖÐø²»¶ÏµÄÓÅ»¯¡£

¼ò¶øÑÔÖ®£¬°´ÕÕËûµÄ¶¨Ò壬ÖÚËùÖÜÖªµÄ¡°Èí¼þÖÊÁ¿ºÍÏû·ÑÕߣ¨Software Quality and Consumer£©¡±Ö÷ÕÅΪ²âÊÔÈËÔ±ÌṩÁËÔÚÏîÄ¿Öа´ÕÕ×Ô¼ºÈÏΪºÏÊʵķ½Ê½½øÐвâÊÔµÄ×ÔÓɺÍÔðÈΡ£Ñ­Ðò½¥½øµØ¼Ç¼ËùÓй淶£¬ÕâÖÖ×ö·¨ÒѾ­²»ÔÙÊDZØÐ룬ԭÒòÒ²ºÜ¼òµ¥£¬´´Òâ¹ý³Ì»ù±¾Ê½ÎÞ·¨¼Ç¼µÄ£¬¶Ô°É£¡ÔÚËûÔÚTestBash 3´ó»áÉÏÓйزâÊÔÖоö²ß¹¤×÷µÄÑݽ²ÖУ¬Mark Tomlinson¶ÔϵͳµÄÖ÷¹ÛÀí½âÕâÒ»Ïë·¨±íʾ֧³Ö¡£Èç¹û½«Æä×÷Ϊ̽Ë÷ʽµÄ£¬»ùÓÚ·çÏպͻùÓڻỰµÄ²âÊÔ¼¼Êõ£¨¿É½«Æä³Æ֮ΪÖ÷¹Û¼¼Êõ£©µÄºËÐÄ£¬²âÊÔÕß½«ÄÜÖ÷¹ÛµØÈ·¶¨Ó¦ÓóÌÐòÖпÉÄܵ¼ÖÂʧ°ÜµÄÖØÒª»·½Ú¡£

¿ÉÒԲο´ÕâÕÅÐýתÎèÕߵĶ¯Á¦Ñ§´í¾õʾÒâͼ£º²»Í¬Ê±¿ÌÄÚ£¬ÎÒÃǵĴóÄÔ»òÅжÏÎèÕßÒÔÒ»¸öÌض¨µÄ˳ÐòÐýת£ºÏò×ó»òÏòÓÒ¡£²âÊÔ¹¤×÷Ò²»áÃæÁÙÀàËÆÇé¿ö£ºÎÒÃÇ¿ÉÄÜ¿¼ÂÇʹÓò»Í¬Á÷³ÌʵÏÖÏàͬ½á¹û£¬»òÏàͬÁ÷³Ìµ¼ÖÂË䲻ͬµ«·ûºÏÔ¤ÆڵĽá¹û£¬»òÕߣ¬àÅ¡­¡­ÈκÎÆäËû½á¹û¡£

Õû¸ö²âÊÔÖ´Ðйý³ÌËùÓõÄÖ÷¹Û¼¼Êõ¿ÉÒÔͨ¹ý¸÷ÖÖ³ÉÊìµÄ·ÖÎö˼άºÍ¡°Ëæ»úÐÔ¡±µÄÓÅÊƼÓÒÔÒýµ¼¡£ÆäÖкóÕßÊÇÒ»¸ö¸üÖØÒªµÄÒªËØ£¬±¾ÎÄ,½«½Ò¶×Ô¶¯»¯²âÊÔÖС°Ëæ»ú»¯¡±µÄÉñÃØÃæÉ´¡£

Ã÷È·Æð¼û£¬²âÊÔ×Ô¶¯»¯²¢²»ÊÇÒ»ÖÖ´´×÷»î¶¯£¬¶øÊÇÒ»ÖÖÍ×ÉƼǼÇÒÇåÎú¶¨ÒåµÄ·½·¨£¬½è´Ë¿ÉÒÔÈÃͬһÌײâÊԽű¾·´¸´ÔËÐÐʹÓá£ÎÊÌâÔÚÓÚ£¬ÎÒÃǸÃÈçºÎʹÓÃÕâЩ²âÊÔ×Ô¶¯»¯½Å±¾£¬Í¬Ê±¸ü¸ü¾ß´´Ò⣿

²úÆ·ÖÊÁ¿Ëæʱ¼ä¶ø±ä

²úÆ·ÖÊÁ¿Ä£ÐͺÍËù¼Ç¼µÄ²âÊÔ³¡¾°¿Éͨ¹ýÌض¨µÄ״̬»úÒÔ¼°ÍⲿÌØÐÔ¼ÓÒÔ¸ÅÀ¨¡£ÕâÒ»µãÕýÊDzâÊÔ×Ô¶¯»¯ËùÈÈ°®µÄ¡£²âÊÔ×Ô¶¯»¯Ëù¹Ø×¢µÄÕýÊǸù¾ÝһЩ·Ç³£¾ßÌåµÄ²âÊÔÐèÇ󼯱àд²âÊԽű¾¡£

ÕâÖÖ×ö·¨ºÜÊʺϹ¦ÄÜÐԻعé²âÊÔ£ºÇåÀí¡¢´òÄ¥¡¢È«Ð·¢²¼£¬ËæºóÓÉ¿ª·¢´óʦ´´½¨¡£¹ÃÇÒ½«Æä³Æ֮ΪShiny°É¡£

µ«¾­¹ýÒ»¶ÎÈß³¤¡¢¾«Æ£Á¦½ßµÄ¿ª·¢Ê±¼äÏߺ󣨰éËæ×Ŷà´Î·¢²¼£¬³¤´ïÊýÄêµÄÖ§³Ö£¬Êý°Ù¸öBugµÄÐÞ¸´ºÍ¹¦ÄÜÇëÇóµÈ£©£¬ÏµÍ³»á±ä³ÉʲôÑù£¿

ȷʵ£¬´ÓÓû§½Ó¿ÚµÄ½Ç¶ÈÀ´¿´£¬¿ÉÄܷdz£ÀàËÆÓÚÄÇÖÖËäÈ»ÀϾɵ«ÒÀÈ»¹¤×÷Á¼ºÃµÄϵͳ£¬µ«±íÃæ֮ϣ¬ÕâÖÖÇé¿öͨ³£±»³Æ֮Ϊ¡°´óÄàÇò¡±¡£

¶ÔÓÚÕâÑùµÄϵͳ£¬¾ÍËãʹÓÃ×Ô¶¯»¯½Å±¾£¬¾ßÌ幦ÄܵÄÄÄЩ²¿·ÖÒÀÈ»ÄÜ»ñµÃºÍ×î³õÉú²ú·¢²¼Ê±Í¬µÈ³Ì¶ÈµÄ²âÊÔ£¿Ò²ÐíÖ»ÓÐ30%-80%µÄ²¿·Ö¿ÉÒÔ°É¡£ÄÇôÆäËû¹¦ÄÜÄØ£¿²»ÖªµÀ¡£

µ±È»£¬´Ëʱ×î¼òµ¥µÄ°ì·¨¿ÉÄÜÊÇÉó²éËùÓÐÏÖÓеÄÖÊÁ¿Îĵµ£¬¸ÄÁ¼Ô­Óеij¡¾°£¬£¨¼´Ê±£©ÒýÈëеij¡¾°µÈ¡£µ«¿¼Âǵ½ÒµÄڵľ­Ñ飬Ëæ×ÅÒÅÁôϵͳµÄ¹æÔò²âÊÔÎĵµÖð½¥¹ýʱ£¬ËäÈ»¸üй¤×÷ÒÀÈ»ÖØÒª£¬µ«ÕâÖÖ×ö·¨²¢·Ç×ÜÊÇ¿ÉÐС£

Ϊ²âÊÔ×Ô¶¯»¯½â¾ö·½°¸´òÔìÍ×Éƶ¨ÒåµÄ¼Ü¹¹

ÏÂͼÊÇÒ»¸ö¾«¼òµÄ²âÊÔ×Ô¶¯»¯½â¾ö·½°¸µÄ·¶Àýͼ£¬ÆäÖаüº¬Èý²ã£¨ÀàËÆÓÚ»ùÓÚUI¡¢ÒµÎñÂß¼­ºÍÊý¾Ý¿âʵÏÖÒµÎñÓ¦ÓóÌÐòµÄ·½·¨£©£ºUI/APIÓ³Éä¡¢ÒµÎñÂã»ú£¬ÒÔ¼°²âÊԽű¾¡£

1.UI/APIÓ³Éä´ú±í¸Ã½â¾ö·½°¸µÄ¼¼Êõ¶Ë£ºUI×Ô¶¯»¯¹¤¾ß³Ì¶ÈÓë×Ô¶¯»¯ÏµÍ³µÄUI¸ß¶È°ó¶¨£¬ÕâÒ»²ãËùÓõķ½·¨¿ÉÄÜÀàËÆÓÚfocus()¡¢type_text()¡¢click_button()¡£

2.ÒµÎñÂß¼­ÊÇÒ»ÖÖÓÉÀ´×ÔÒµÎñ²Ù×÷µÄ¹Ø¼ü×Ö×é³ÉµÄ¿â¡£ÒµÎñ²Ù×÷ÊÇÖ¸¿ÉÒÔÔÚÓ¦ÓóÌÐòÖÐÖ´ÐеÄij¸ö²½Ö裨Èçlogin()¡¢create_user()¡¢validate_user_created()£©¡£

3.²âÊԽű¾¸ºÔðÖ´ÐÐһϵÁÐÁ´ÔÙÒ»ÆðµÄÒµÎñ²½Öè¡£

ÉîÈëÁ˽â¶ÀÁ¢²âÊÔ£¨Separate Test£©

¿¼ÂÇÕâÑùÒ»ÖÖ¼òµ¥µÄ¼Ç¼²âÊÔÓÃÀý£ºÖ´ÐÐÕâ¸ö ¨C ÑéÖ¤Õâ¸ö£¬Ö´ÐÐÄǸö ¨C ÑéÖ¤ÄǸö£¬Ö´ÐÐijij ¨C Ñé֤ijij¡£ºÏ¸ñµÄ×Ô¶¯»¯¿ª·¢Õ߻ᴴ½¨Ò»ÏµÁÐÀàËÆÏÂÃæÕâÑùµÄ·½·¨£º

do_that(), verify_that(), do_this(), verify_this(), do_bla().

²âÊԽű¾»á°´ÕÕijÖÖÌض¨µÄ˳Ðòµ÷ÓÃÕâÑùµÄ·½·¨£º

mySpecifiedCase_1(){
do_that();
verify_that();
do_this();
verify_this();
do_bla();
verify_that();
verify_this();
}

ÓÉÓڽű¾Ã»ÕÒµ½ÈκÎBug£¬ÎÒÃÇÔÚijЩÌض¨½×¶ÎµÄÈÎÎñ¾Í±ä³ÉÈÃËü²éÕÒDZÔÚµÄϵͳÎÊÌâ¡£

Ëæ»ú»¯·½·¨1 ¨C ÂãËæ»ú

´ÓÒµÎñ½Ç¶ÈÀ´Ëµ£¬×Ô¶¯»¯½â¾ö·½°¸ÖÐÈκβ½Ö趼ÊÇÓÐЧµÄ¡£Òò´Ë̽Ë÷ʽ²âÊÔʹµÃÎÒÃÇ¿ÉÒÔ×ÔÓɵØÔÚÈκÎʱ¼äµãÖ´ÐÐÈκβ½Öè¡£ÕâЩ²½ÖèµÄ»ì´îÒ²ºÜ¼òµ¥¡£ÎÒÃÇÐèÒªÔÚÖ´ÐйýÉÙÊý¼¸´Î²âÊÔºó£¬×ñÑ­ÒÑʵÏÖ²½Öè´òÔì¡°Ëæ»ú¡±²âÊÔÓÃÀý¡£

ÊäÈ룺½â¾ö·½°¸ÖÐËùÓÐÒµÎñ·½·¨µÄÊýÁ¿£¬ÒªÉú³ÉµÄ²âÊԽű¾ÊýÁ¿£¬Éú³Éÿ¸ö²âÊԽű¾ËùÐè²½ÖèÊýÁ¿¡£

Êä³ö£ºÀàËÆÓÚÏÂÁнű¾£º

myRandomCase_1(){
do_that();
do_bla();
verify_this();
}

ºÜÃ÷ÏÔ£¬¾ÍËãijЩ²âÊÔÓÃÀý¿ÉÄÜ£¨ÉõÖÁÒѾ­£©³É¹¦ÔËÐУ¬´ó²¿·ÖÒÀÈ»»áʧ°Ü£¬ÒòΪ´óÁ¿ÓÃÀýʵ¼ÊÉÏÊÇÔÚÊÔͼÍê³ÉÎÞЧ²Ù×÷¡£Èç¹û»¹Ã»Ö´Ðйýdo_this()£¬ÄÇôverify_this()ÎÞÒÉ»áʧ°Ü¡£

Ëæ»ú»¯·½·¨2 ¨C ÓÐÏȾöÌõ¼þµÄËæ»ú·½·¨

ÕâÖÖ·½Ê½µÄÏë·¨ÔÚÓÚÖ»ÓÐÔÚ¹¤×÷Á÷ÖÐÒÑ°üº¬ÏȾõ²½Öèºó£¬²ÅÏò¹¤×÷Á÷ÖмÓÈëºóÐø²½Ö裬µ«ÕâÐèÒª¶Ô´úÂë¿â½øÐбØÒªµÄÀ©³ä£¬È·±£²âÊÔ°¸ÀýÉú³ÉÆ÷¿ÉÒÔÀí½â²¢±£Ö¤×¼È·µÄÐòÁС£Îª´Ë¿ÉÔÚ·½·¨Ö®ÉÏÌí¼ÓÌØÐÔ»ò×¢½â£º

@Reguires(do_this)
verify_this()
{¡­}

ÕâÑùÎÒÃǾ͵õ½ÁË£º

myRandomCase_2(){
do_bla();
do_this();
verify_this(); //can be added, because prerequisite step is already in test
}

ÕâÊÇÒ»ÖÖ¸ü¿ÉÔ¤²âµÄ·½·¨¡£µ«Èç¹ûdo_this()ºÍverify_that()ÐèÒªÔÚͬһ¸öPage1ÉÏÖ´ÐУ¬¶ødo_bla()ÒѾ­µ½ÁËPage2ÓÖ¸ÃÔõÑù£¿

´ËʱÎÒÃÇÃæÁÙÒ»¸öÐÂÎÊÌ⣺verify_that()¾ø¶Ô»áʧ°Ü£¬ÒòΪÎÞ·¨ÕÒµ½Ö´ÐÐËùÐèµÄ¿ØÖÆ/ÉÏÏÂÎÄ¡£

È˹¤Ëæ»ú»¯·½·¨3 ¨C ÉÏÏÂÎĸÐÖª

²âÊÔÉú³ÉÆ÷±ØÐëÁ˽âÖ´ÐÐλÖÃÉÏÏÂÎÄ£¨ÀýÈçWeb¿ª·¢Öеġ°Ò³Ã桱£©¡£µ±È»£¬´ËʱҲ¿ÉÒÔͨ¹ýÌØÐÔ/×¢½âΪÉú³ÉÆ÷Ìṩ»îÔ¾ÉÏÏÂÎÄ¡£

@ReguiresContext(pageThis)
verify_this()
{¡­}
@ReguiresContext(pageThis)
do_this()
{¡­}
@ReguiresContext(pageThis)
@MovesContextTo(pageThat)
do_bla()
{¡­}

±¾ÀýÖÐdo_this()ºÍverify_this()²»»á·ÅÔÚ½«ÉÏÏÂÎĸÄΪpageThatµÄ·½·¨£¬»òÉÏÏÂÎÄΪpageThatµÄ·½·¨Ö®ºó¡£

Òò´ËÎÒÃÇ¿ÉÒԵõ½Ò»¸öÀàËÆÏÂÃæÕâÑùµÄ²âÊԽű¾£º

myRandomCase_3(){
do_this();
do_bla();
do_that();
}

»òÕßÒ²¿ÉÒÔͨ¹ý·½·¨Á´ÊµÏÖ¡£¼ÙÉèÒµÎñ·½·¨·µ»ØµÄ¶ÔÏóΪҳÃ棬²âÊÔ°¸ÀýÉú³ÉÆ÷»á³ÖÐø×·×ÙÖ´ÐС°²½Ö衱ǰºóä¯ÀÀÆ÷ÖÐÏÔʾµÄÒ³Ã棬Òò´Ë¿ÉÒÔÈ·¶¨ÐèÒªµ÷ÓÃÑéÖ¤»ò¡°²½Ö衱·½·¨µÄÕýÈ·Ò³Ãæ¡£ÕâÖÖ·½·¨ÐèÒª¶îÍâ¼ì²éÒÔÑéÖ¤Á÷³ÌÊÇ·ñÕýÈ·£¬µ«Õâ¸ö²Ù×÷¿ÉÒÔÎÞÐë×¢½âʵÏÖ¡£

ɸѡǡµ±µÄÓÃÀý

ÖÁ´Ë½éÉܵķ½·¨ÒѾ­¿ÉÒÔÉú³ÉÏ൱´óÁ¿µÄ²âÊÔÓÃÀý¡£

Ö÷ÒªÎÊÌâÔÚÓÚ£¬ÑéÖ¤¹ý³Ì±¾Éí£¬ÒÔ¼°Ñé֤ʧ°ÜµÄ²âÊÔ³¡¾°ÊÇ·ñÊÇÓ¦ÓóÌÐòÄÚµÄBug£¬¶ø·Ç×Ô¶¯»¯²âÊԽű¾Âß¼­µ¼Öµģ¬ÕâЩ¹¤×÷Ò²ÐèÒªºÄ·Ñ´óÁ¿Ê±¼ä¡£

Òò´Ë¿ÉÒÔʵÏÖÒ»ÖÖ¡°Ô¤ÑÔ¡±À࣬½è´ËÔ¤²âËù»ñµÃµÄ½á¹ûÊÇ·ñÂúÒ⣬»òÊÇ·ñ´ú±íÈκδíÎóÐÅÏ¢£¬²¢ÇÒ±ØҪʱ¿É½øÐкóÐø·ÖÎö¡£È»¶ø±¾ÀýÎÒÃÇÑ¡ÔñÁËÒ»¸öÂÔ΢²»Í¬µÄ·½·¨¡£

¿ÉÒÔͨ¹ýÏÂÁÐÕâÒ»Ì×¹æÔò´ú±íÓ¦ÓóÌÐòµÄʧ°ÜÊÇBugÒýÆðµÄ£º

1.500´íÎó»òÀàËÆÒ³Ãæ

2.JavaScript´íÎó

3.¡°Î´Öª´íÎó¡±»òÒòΪÎóÓÃÔì³ÉµÄÀàËƵĴíÎóÐÅÏ¢

4.Ó¦ÓóÌÐòÈÕÖ¾ÖÐÓйØÒì³£ºÍ/»ò´íÎóÇé¿öµÄÐÅÏ¢

5.·¢ÏÖÓëÈκÎÆäËû²úÆ·ÓйصĴíÎó

±¾ÀýÖУ¬¿ÉÔÚÿ¸ö²½ÖèÖ´ÐÐÍê±ÏºóÑéÖ¤Ó¦ÓóÌÐò״̬¡£Òò´Ë×Ô¶¯Éú³ÉµÄ½Å±¾¿´ÆðÀ´ÊÇÕâÑùµÄ£º

myRandomCase_3(){
do_this();
validate_standard_rules();
do_bla();
validate_standard_rules();
do_that();
validate_standard_rules();
}

ÆäÖÐvalidate_standard_rules()·½·¨¿ÉÒÔËÑË÷ÉÏÎÄÌáµ½µÄ¸÷ÖÖÎÊÌâ¡£

×¢Ò⣺ͨ¹ýÓëOOP½áºÏ£¬ÕâÖÖ·½·¨»áÏԵøüΪǿ´ó£¬¿ÉÒÔ¼ì²â³öʵ¼ÊµÄBug¡£ÔÚPage Object³¬ÀàʵÏÖ³£¹æ¼ì²éÐèÒª²éÕÒ¡°³£¹æÎÊÌ⡱£¬ÀýÈçJavaScript´íÎó¡¢ÈÕÖ¾ÖеÄÓ¦ÓóÌÐò´íÎóµÈ¡£¶ÔÓÚÓëÌض¨Ò³ÃæÓйصĺÏÀí¼ì²é£¬¿ÉÒÔÈƹýÕâÖÖ·½·¨¶îÍâÔö¼ÓÕë¶Ô¾ßÌåÒ³ÃæµÄ¼ì²é¡£

ʵÑé

ΪÁ˽øÐÐʵÑ飬ÎÒÃǾö¶¨Ê¹Óù«¿ªµÄÓʼþϵͳ¡£¿¼Âǵ½GmailºÍYahooµÄÁ÷Ðжȣ¬ÕâЩϵͳÖÐËùÓдæÔÚµÄBug¶¼Òѱ»·¢ÏֵĿÉÄÜÐÔÏ൱¸ß¡£Òò´ËÎÒÃÇÑ¡ÔñÁËProtonMail¡£

Taking Over Random

¼ÙÉè×Ô¶¯»¯½â¾ö·½°¸ÒѾ­¾Í룬ÎÒÃÇ¡°²ÉÓá±ÁËShinyϵͳµÄ×Ô¶¯»¯²âÊÔ»úÖÆ£ºÊ×ÏȽ¨Á¢Ò»¸öͨÓõÄJava/Selenium²âÊÔÏîÄ¿£¬ÆäÖаüº¬¼¸¸öʹÓÃPage ObjectģʽʵÏÖµÄðÑ̲âÊÔ¡£Ëæºó°´ÕÕ×î¼Ñʵ¼ù£¬ËùÓÐÒµÎñ·½·¨¿ÉÒÔ·µ»ØÒ»¸öеÄPage Object£¨Õë¶ÔÒµÎñ·½·¨½áÊøʱÒÀÈ»ÏÔʾÔÚä¯ÀÀÆ÷ÖеÄÒ³Ã棩»òµ±Ç°Page Object£¬³ý·ÇÒ³Ãæ±»¸ü¸Ä¡£

Ϊ½øÐÐ×Ô¶¯»¯Ì½Ë÷ʽ²âÊÔ£¬ÎÒÃÇÔö¼ÓÁË°üº¬ÔÚexplr.core°üÖеÄÀ࣬ÆäÖÐ×î¸ÐÐËȤµÄµ±ÊôTestCaseGeneratorºÍTesCaseExecutor¡£

TestCaseGenerator

ΪÁËÉú³Éеġ°Ëæ»ú¡±²âÊÔÓÃÀý£¬¿ÉÒÔͨ¹ýTestCaseGeneratorÀàµ÷ÓÃÁ½¸ögenerateTestCase·½·¨Ö®Ò»¡£ÕâÁ½¸ö·½·¨¶¼ÄÜÒÔ²ÎÊýµÄ·½Ê½½ÓÊÜ´ú±íËùÉú³É²âÊÔÓÃÀýÖС°²½ÖèÑéÖ¤¶Ô¡±ÊýÁ¿µÄÕûÊý¡£µÚ¶þ¸ö·½·¨»¹¿É¶îÍâ½ÓÊÜÒ»¸ö´ú±íҪʹÓõġ°ÑéÖ¤²ßÂÔ¡±ÊýÁ¿µÄ²ÎÊý£¨µÚÒ»¸ö·½·¨Ê¹ÓÃĬÈϲßÂÔ£¬±¾ÀýΪUSE_PAGE_SANITY_VERIFICATIONS£©¡£

ÑéÖ¤²ßÂÔ´ú±íÔÚÏò²âÊÔÓÃÀýÌí¼Ó¡°¼ì²é¡±²½ÖèʱËùÓõķ½·¨¡£Ä¿Ç°ÎÒÃÇÓÐÁ½¸öÑ¡Ï

1.USE_RANDOM_VERIFICATIONS£ºµÚÒ»¸ö£¬Í¬Ê±Ò²ÊÇ×îÃ÷ÏԵIJßÂÔ¡£¸Ã²ßÂÔµÄÏë·¨ÔÚÓÚ£¬Ê¹ÓÃÀ´×ÔÒ³¶ÔÏóµÄµ±Ç°ÑéÖ¤·½·¨¡£µ«²»×ãÖ®´¦ÔÚÓÚÑÏÖØÒÀÀµÉÏÏÂÎÄ¡£ÀýÈ磺ÎÒÃÇËæ»úÑ¡ÔñÁËÒ»¸ö·½·¨À´ÑéÖ¤Ìض¨Ö÷ÌâµÄÏûÏ¢ÊÇ·ñ´æÔÚ¡£Ê×ÏÈ£¬ÎÒÃDZØÐëÖªµÀÒª²éÕÒÄĸöÖ÷Ì⡣Ϊ´ËÎÒÃÇÒýÈëÁË@Default×¢½âºÍDefaultTestDataÀà¡£DefaultTestData°üº¬µÄ³£¹æ²âÊÔÊý¾Ý¿ÉÓÃÓÚËæ»ú²âÊÔ¡£@Default×¢½â¿ÉÓÃÓÚ½«¸ÃÊý¾Ý°ó¶¨¸øÌض¨µÄ·½·¨²ÎÊý¡£ËæºóÎÒÃÇÐèҪȷ±£°üº¬¸ÃÖ÷ÌâµÄÏûÏ¢ÏÈÓÚÑéÖ¤²Ù×÷¾ÍÒÑ´æÔÚ£¨¿ÉÔÚÖ´Ðиù淶µÄ¹ý³ÌÖУ¬»ò֮ǰµÄÈκβâÊÔ¹ý³ÌÖд´½¨£©¡£Îª´Ë¿Éͨ¹ý@Depends×¢½â¸æËßTestCaseGenerator¼ì²éÌض¨·½·¨µÄµ÷Óã¬Èç¹ûµ±Ç°²½Öè֮ǰûÕÒµ½ÔòÖ±½ÓÌí¼Ó¡£´ËÍâÎÒÃÇ»¹ÐèҪȷ±£ÏûϢûÓÐÔÚÑé֤֮ǰɾ³ý¡£ÎÒÃÇ·¢ÏÖ¶ÔÓÚÉú³ÉµÄ²âÊÔÓÃÀý£¬ÒÀÀµÐÔÎÊÌâ´ó·ù½µµÍÁËËæ»ú»¯³Ì¶È£¬²¢ÇÒÕâÖÖ·½·¨µÄÎȶ¨ÐÔÒ²ÎÞ·¨Âú×ãÒªÇó¡£

2.USE_PAGE_SANITY_VERIFICATIONS£º¸Ã²ßÂԿɼì²éÏÔ¶øÒ×¼ûµÄÓ¦ÓóÌÐòʧ°Ü£¬ÈçÏÔʾÁË´íÎóµÄÒ³£¬´íÎóÐÅÏ¢£¬JavaScript´íÎó£¬Ó¦ÓóÌÐòÈÕÖ¾ÖеĴíÎóµÈ¡£ÔÚÒÀÀµÐÔ·½ÃæÕâ¸ö²ßÂÔ¸üÁé»î£¬¿ÉÔÚÐèҪʱʵÏÖÕë¶Ô¾ßÌåÒ³µÄ¼ì²é£¬ÀýÈçÒѾ­×ã¹»Áé»îµ½¿ÉÒÔÕÒ³öʵ¼ÊµÄBug¡£Ä¿Ç°ÎÒÃǽ«ÆäÓÃ×÷ĬÈϵÄÑéÖ¤²ßÂÔ¡£

TestCaseGeneratorÀà¿É°´ÕÕÀàÃûËÑË÷Page¶ÔÏó£ºÃ¿¸öÃû³ÆÖаüº¬¡°Page¡±×Ö·û´®µÄÀ඼»á±»¿´×÷ÊÇÒ³¶ÔÏó¡£Ò³¶ÔÏóµÄËùÓй«¿ª·½·¨»á±»ÊÓ×÷ÒµÎñ·½·¨¡£Ãû³Æ°üº¬¡°Verify¡±×Ö·û´®µÄÒµÎñ·½·¨»á±»ÊÓ×÷ÑéÖ¤£¬ËùÓÐÆäËû·½·¨»á±»ÊÓ×÷²âÊÔ²½Öè¡£@IgnoreInRandomTesting×¢½â¿ÉÓÃÓÚ´ÓÁбíÖÐÅųýijЩ¹¤¾ß·½·¨»òÕû¸öÒ³¶ÔÏó¡£

Ëæºó¿É´ÓÁ½¸öÁбíÖÐËæ»úÑ¡Ôñ·½·¨Éú³É²âÊÔÓÃÀý£ºÒ»¸öÁбí°üº¬²âÊÔ²½Ö裬һ¸öÁбí°üº¬ÑéÖ¤²½Ö裨Èç¹ûËùÑ¡ÑéÖ¤²ßÂÔÐèÒªÑéÖ¤²½ÖèµÄ»°£©¡£Ñ¡ÔñµÚÒ»¸ö·½·¨ºó£¬½«¼ì²éÆä·µ»ØÖµÊÇ·ñΪÁíÒ»¸öÒ³¶ÔÏó¡£Èç¹û·µ»ØÖµÊÇÁíÒ»¸öÒ³¶ÔÏó£¬ÄÇô½«´ÓÆä·½·¨ÖÐÑ¡ÔñÏÂÒ»¸ö²½Ö裨²Î¼ûÉÏÎı¸×¢£©¡£Îª±ÜÃâÔÚÁ½¸öÒ³Ö®¼äÑ­»·Íù¸´£¬ÓÐÒ»³ÉµÄ¸ÅÂÊ»áÌøתÖÁÒ»¸öÍêÈ«Ëæ»úµÄÒ³Ãæ¡£Èç¹û·½·¨Ê¹ÓÃ@Depends×¢½â±ê×¢ÁËÈκÎÒÀÀµÏÔò»á°´Ðè½â¾öÕâЩÎÊÌâ²¢Ìí¼Ó¡£

Ϊ±ÜÃâ³öÏÖ´Óµ±Ç°ËùÏÔʾҳ֮ÍâÆäËû¶ÔÏóµ÷ÓòâÊÔ·½·¨µÄÇé¿ö£¬Éú³ÉµÄ²âÊÔÓÃÀý»á´«µÝÒ»¸ö¶îÍâµÄÑéÖ¤£¬½è´ËÌí¼ÓȱÉٵĵ¼º½µ÷Óá£

TesCaseExecutor

Éú³ÉÖ®ºó£¬²âÊÔÓÃÀý»ù±¾ÉϾÍÊÇÒ»ÖÖ¡°Àà-·½·¨¶Ô¡±ÁÐ±í£¬¿Éͨ¹ýÌض¨·½Ê½Ö´Ðлò±£´æ¡£¾¡¹Ü¿ÉÔÚÔËÐÐʱִÐУ¬µ«´Óµ÷ÊԺͺóÐø·ÖÎöµÄ½Ç¶ÈÀ´¿´£¬±£´æΪÎļþÊÇÒ»ÖÖ¸üºÃµÄ×ö·¨¡£

Éú³ÉµÄ²âÊÔÓÃÀý¿Éͨ¹ý¶àÖÖ·½Ê½Ö´ÐУ¬¿ÉÒÔTesCaseExecutor×÷ΪÆä½Ó¿Ú£¬ÒÔSaveToFileExecutor×÷ΪΨһµÄʵÏÖ£¬½è´Ë¿É¼òµ¥µØ´´½¨Ò»¸ö´ú±íËùÉú³É²âÊÔÓÃÀýµÄ.javaÎļþ¡£ÁîÈ˾ªÒìµÄÊÇ£¬ÕâÖÖÏ൱¼òµ¥µÄ½â¾ö·½°¸ÍêÈ«Âú×ãÁËÎÒÃǵÄÐèÇó£ºÊµÏÖËٶȿ죬¿É¶Ô²âÊÔ½á¹û½øÐÐÉîÈë·ÖÎö£¬²¢ÄÜÁ˽â¾ßÌåµÄÉú³É·½Ê½¡£Î¨Ò»µÄ²»×ãÔÚÓÚ£¬±ØÐëÊÖ¹¤±àÒë²¢ÔËÐÐÉú³ÉµÄ²âÊÔÓÃÀý£¬²»¹ý¶ÔÓÚʵÑéÀ´Ëµ£¬ÕâÒ²Ëã²»µÃʲô´óÎÊÌâ¡£

SaveToFileExecutorÉú³ÉµÄ²âÊÔÓÃÀý´úÂë¿Éͨ¹ýÄ£°åת»»Îª¿É±àÒëµÄÎļþ¡£ÕâÑùÉú³ÉµÄ²âÊÔ·¶ÀýÈçÏ£º

@Test(dataProvider = "WebDriverProvider")
public void test(WebDriver driver){
login(driver);
//****<Generated>****
ContactsPage contactspage = new ContactsPage(driver, true);
InboxMailPage inboxmailpage = contactspage.inbox();
inboxmailpage.sanityCheck();
ComposeMailPage composemailpage = inboxmailpage.compose();
composemailpage.sanityCheck();
composemailpage.setTo("me@myself.com");
composemailpage.send();
inboxmailpage.sanityCheck();
List list = inboxmailpage.findBySubject("Seen that?");
inboxmailpage.sanityCheck();
inboxmailpage.inbox();
inboxmailpage.sanityCheck();
DraftsMailPage draftsmailpage = inboxmailpage.drafts();
draftsmailpage.sanityCheck();
inboxmailpage.inbox();
inboxmailpage.sanityCheck();
inboxmailpage.sendNewMessageToMe();
inboxmailpage.setMessagesStarred(true, "autotest", "Seen that?");
inboxmailpage.sanityCheck();
TrashMailPage trashmailpage = inboxmailpage.trash();
trashmailpage.sanityCheck();
//****</Generated>****
}

SaveToFileExecutorÉú³ÉµÄ´úÂëλÓÚ<Generated>±¸×¢Ö®¼ä£¬ÆäÓà´úÂëÓÉÄ£°åÌí¼Ó¡£

´ÓËùÖ´ÐеIJÙ×÷·½ÃæÀ´¿´£¬ÎÒÃÇÉú³ÉµÄÓÃÀý¶àÑù»¯³Ì¶ÈÒ»°ã£¬µ«Ö»ÒªÌí¼Ó°üº¬¸ü¶à²âÊÔ²½ÖèµÄ¸ü¶àÒ³¶ÔÏó¼´¿ÉÇáËɽâ¾ö¡£

ÔÚ½øÐйýÉÏǧ¸ö¡°Ëæ»ú¡±²âÊÔºó£¬ÎÒÃÇ·¢ÏÖProtonmailûʲô´óÎÊÌ⣨ÀýÈç´íÎóÒ³£©£¬µ«ä¯ÀÀÆ÷»ã±¨ÁËһЩJavaScript´íÎ󣬶ÔÓÚÒÀÀµJavaScript½øÐÐÓʼþ±à½âÂ빤×÷µÄϵͳ£¬ÕâЩÎÊÌâ·Ç³£ÖØÒª¡£ºÜÃ÷ÏÔ£¬Õû¸öʵÑéÖÐÎÒÃDz¢²»ÄÜ·ÃÎÊ·þÎñÆ÷ÈÕÖ¾£¬µ«¾ÍʵÑéµÄ½Ç¶ÈÀ´Ëµ£¬ÒѾ­×㹻չʾ³öÕâÑùµÄ·½·¨¶Ô±»²âÊÔϵͳÖÊÁ¿µÄ´Ù½øÄÜÆ𵽶à´óµÄ×÷Óá£

µ±È»£¬Ëæ»ú²âÊÔÎÞ·¨È¡´úÖ÷¹Û»ò´«Í³²âÊÔ¼¼Êõ£¬µ«¿ÉÔڻعé²âÊÔ¹ý³ÌÖÐÈÃÎÒÃǶÔÓ¦ÓóÌÐòÖÊÁ¿¸üΪ×ÔÐÅ¡£

   
1949 ´Îä¯ÀÀ       18
Ïà¹ØÎÄÕÂ

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

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
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×Ô¶¯»¯²âÊÔ