ÔÚ Linux ƽ̨ÉϽøÐдóÐÍÏîÄ¿¿ª·¢¹ý³ÌÖУ¬²âÊÔÈËÔ±ÐèÒª¶¨ÆÚ£¨Í¨³£ÊÇÿÌ죩£¬´Ó´úÂë¿âÖиüдúÂë¡¢±àÒë°æ±¾¡¢ÔËÐÐÈ«²¿²âÊԽű¾¡¢ÊÕ¼¯²¢·¢²¼²âÊÔ½á¹û¡£Õâ¸ö¹ý³Ì¼È·±ËöÓÖºÄʱ¡£Í¨³£ÎÒÃÇÏ£ÍûÄÜÔÚϰàºóÄÜ×Ô¶¯Íê³ÉÕâһϵÁвÙ×÷£¬±¾ÎĽ«½²ÊöÈçºÎÀûÓÃ
Python ½Å±¾ÇáËÉʵÏÖÕâÒ»¹ý³Ì¡£
´Ó´úÂë¿âǨ³ö´úÂë ---- pexpect µÄʹÓÃ
²âÊÔÈËÔ±´Ó´úÂë¿â£¨ÀýÈç CVS £©Ç¨³ö´úÂëµÄ¹ý³ÌÖУ¬ÐèÒªÊÖ¶¯ÊäÈë·ÃÎÊÃÜÂ룬¶ø
Python ÌṩÁË Pexpect Ä£¿éÔòÄܹ»½«ÊÖ¶¯ÊäÈëÃÜÂëÕâÒ»¹ý³Ì×Ô¶¯»¯¡£µ±È» Pexpect Ò²¿ÉÒÔÓÃÀ´ºÍ
ssh¡¢ftp¡¢passwd¡¢telnet µÈÃüÁîÐнøÐÐ×Ô¶¯»¯½»»¥¡£ÕâÀïÎÒÃÇÒÔ CVS ΪÀýչʾÈçºÎÀûÓÃ
Pexpect ´Ó´úÂë¿âǨ³ö´úÂë¡£
Çåµ¥ 1. Óà pexpect Ǩ³ö´úÂë¿â´úÂë
try: chkout_cmd = 'cvs co project_code' #´Ó´úÂë¿âǨ³ö project_code µÄÄÚÈÝ child = pexpect.spawn(chkout_cmd) child.expect('password:') child.sendline('your-password') #ÇëÌæ»»"your-password"ÎªÕæÊµÃÜÂë child.interact() except: pass #ºöÂÔǨ³ö´úÂëÖеĴíÎó |
ÔÚÇåµ¥ 1 ÖУ¬ÎÒÃÇÓÃÃüÁî"cvs co project_code"´Ó´úÂë¿âÖÐǨ³öÁË
project_code µÄÄÚÈÝ£¬ÎÒÃÇÒ²¿ÉÒÔÓøÃÃüÁîÀ´¸üÐÂÒѾǨ³öµÄ´úÂë¡£Ö»ÐèÒª½«ÃüÁî"cvs
update" ´«¸øÀà pexpect.spawn()¼´¿É£¬ÏêϸµÄʵÏÖÇë²Î¿¼´úÂëÎļþ¡£ÕâÀï interact()º¯ÊýÊDZØÐëµÄ£¬ÓÃÀ´ÔÚ½»»¥µÄ·½Ê½Ï¿ØÖƸÃ×Ó½ø³Ì¡£ÓÐʱ´úÂë¿âÖÐ»á´æÔÚĿ¼²»Ò»ÖÂÐÐÇé¿ö£¬Ç¨³ö´úÂë»áÒò±¨´íÖÕÖ¹£¬ËùÒÔÐèÒªÒì³£´¦Àí(try
... execpt)À´ºöÂԸôíÎó¡£
±àÒë´úÂëºÍÔËÐвâÊԽű¾ ---- subprocess µÄʹÓÃ
²âÊÔÈËÔ±»ñÈ¡×îеĴúÂëÖ®ºó£¬¾ÍÒª¶ÔÔ´Âë½øÐбàÒ룬²¢ÇÒÔËÐвâÊÔÓÃÀý¡£Python
ÓïÑÔÌṩÁ˶àÖÖ·½·¨Èç os.system()/os.popen()À´Ö´ÐÐÒ»ÌõÃüÁÕâÀïÎÒÃÇÍÆ¼öÓà subprocess
Ä£¿éÀ´´´½¨×Ó½ø³Ì£¬Íê³É´úÂë±àÒëºÍÔËÐвâÊÔÓÃÀý¡£ÒòΪ subprocess Ö§³ÖÖ÷½ø³ÌºÍ×Ó½ø³ÌµÄ½»»¥£¬Í¬Ê±Ò²Ö§³ÖÖ÷½ø³ÌºÍ×Ó½ø³ÌÊÇͬ²½Ö´Ðл¹ÊÇÒì²½Ö´ÐС£ÓÉÓÚ±¾ÎÄÖеĸ÷¸ö¹¦ÄÜÄ£¿éÓж¼ÏȺóÒÀÀµ¹ØÏµ£¬ËùÒÔÈ«²¿²ÉÓõÄÊÇÖ÷½ø³ÌºÍ×Ó½ø³Ìͬ²½Ä£Ê½Ö´ÐС£
±àÒë´úÂë
Çåµ¥ 2. Óà subprocess ±àÒë´úÂë
build_cmd = 'build_command_for_your_code' #ÇëÔÚÕâÀïÅäÖñàÒëÃüÁî build_proc = subprocess.Popen(build_cmd, stdin=None, stdout=None, stderr=None, shell=True) build_proc.wait() #µÈ´ý×Ó½ø³Ì½áÊø assert (0 == build_proc.returncode) |
ÔÚһЩϵͳÖÐÎÒÃDZàÒë´úÂë²ÉÓõÄÊǽű¾Îļþ£¨Èç shell ½Å±¾£©£¬ÄÇôÎÒÃÇÈÔÈ»¿ÉÒÔÈçÏÂÃüÁîÀ´Íê³É´úÂë±àÒ빤×÷¡£
Çåµ¥ 3. Óà subprocess µÄ call º¯ÊýÖ´Ðнű¾Îļþ
subprocess.call(["code_compile.sh"]) |
ÔËÐвâÊԽű¾
ÔÚ±àÒëÍê³É´úÂëÖ®ºó£¬ÎÒÃÇͬÑù¿ÉÒÔµ÷Óà subprocess.Popen
À´´´½¨×Ó½ø³ÌÔËÐвâÊÔÓÃÀý¡£Èç¹û²âÊÔÈËÔ±µÄ²âÊÔÓÃÀýÒѾд³ÉÁ˲âÊÔÀý½Å±¾£¬ÎÒÃÇÔò¿ÉÒÔÓà subprocess.call()À´Ö´ÐвâÊÔÀý½Å±¾Îļþ£¬´úÂëʵÏ־Ͳ»ÔÙ׸Êö¡£ÓÐЩϵͳ»áÖ±½Ó°ÑÏêϸÈÕÖ¾Êä³öµ½ÆÁÄ»ÉÏ£¬ÄÇôÎÒÃÇ¿ÉÒÔÓÃÖØ¶¨ÏòÃüÁî"2>&1"°ÑÆÁÄ»Êä³öдÎļþ¡£
Çåµ¥ 4. ÓÃÖØ¶¨ÏòÃüÁî°ÑÊä³öдÎļþ
ut_cmd = 'Your_unit_test_command 2>&1 >
%s' %self.debug_log #debug_log ¶¨ÒåÔÚ__init__º¯ÊýÖУ¬ÓÃÀ´´æ´¢ÏêϸÈÕÖ¾ |
²âÊÔ½á¹û´æ´¢ºÍ·¢²¼ ---- XML ½âÎö
ÎÒÃǵÄÏîÄ¿²ÉÓÃÃô½Ý¿ª·¢£¬ÎªÁ˸üºÃµÄ·´Ó¦Ãô½Ý¿ª·¢ÖÜÆÚ£¬ÎÒÃÇÏ£Íû´æ´¢ÈÕÖ¾µÄĿ¼Ãû²»µ«Äܹ»Ö¸Ã÷µÄ¾ßÌåÈÕÆÚ£¬Í¬Ê±Ò²ÄÜ·´Ó³Ãô½Ý£¨µü´ú£©¿ª·¢½×¶Î£¬ÕâÑùÏà¹ØÈËÔ±Ôڲ鿴ÏàӦĿ¼ÖеÄÈÕ־ʱ£¬Äܹ»Çå³þµÄÃ÷°×ÈÕ־ʵÔÚÔÚÄĸöµü´úÖÜÆÚµÄÄÄÒ»Ìì²úÉúµÄ¡£±¾ÎÄʹÓÃÎļþ
summary ×÷ΪÔËÐвâÊÔÓÃÀýºóÉú³ÉµÄ»ã×ÜÈÕÖ¾£¬ÓÃÎļþ log.txt ÓÃÀ´´æ´¢ÏêϸÈÕÖ¾¡£ÈçÏÂͼËùʾ£¬ÔÚ¹²ÏíĿ¼
SharedFiles Öд洢ÁËһЩÁеü´úÖÜÆÚÖеÄÈÕÖ¾¡£
Çåµ¥ 5. ¹²ÏíĿ¼½á¹¹
SharedFiles ©À©¤©¤ Sprint10-20130823121500 ©¦ ©À©¤©¤ log.txt ©¦ ©¸©¤©¤ summary ©À©¤©¤ Sprint10-20130826152715 ©¦ ©À©¤©¤ log.txt ©¦ ©¸©¤©¤ summary ©À©¤©¤ Sprint10-20130828165235 |
ΪÁËÄܹ»ÈÃĿ¼Ãû·´Ó³Ãô½Ý¿ª·¢ÖÜÆÚ£¬ÎÒÃÇÐèÒª×Ô¼º¶¨ÒåÒ»¸öÅäÖÃÎļþ£¨txt
»ò xml ¾ù¿É£©¡£ÓÉÓÚ Python ÒѾºÜºÃµÄÖ§³ÖÁË XML ½âÎö£¬²¢ÇÒ XML Îļþ×÷ΪÅäÖÃÒ²Êǵ±Ç°µÄÁ÷ÐÐÇ÷ÊÆ¡£±¾ÎľÍÒÔ
XML ½âÎöΪÀý½øÐÐ˵Ã÷¡£±¾ÎÄʹÓÃµÄ XML ÎļþÃûÊÇ Sprint.xml£¬Çåµ¥ 6 ÊǸà xml µÄ¸ÅÒªÄÚÈÝ
Çåµ¥ 6. Sprint.xml Îļþ½á¹¹
<sprint-schedule> <min-sprint>10</min-sprint> <max-sprint>20</max-sprint> <sprint10>20130814</sprint10> <sprint11>20130828</sprint11> ¡ ¡ <sprint19>20131218</sprint19> <sprint20>20140101</sprint20> </sprint-schedule> |
¹ØÓÚ xml ½âÎö Python ÌṩÁ˶àÖÖ·½·¨¡£±¾ÎIJÉÓà minidom
¶Ô xml Îļþ½øÐнâÎö£¬Çåµ¥ 7 ÊÇÏà¹Ø´¦Àí´úÂë¡£
Çåµ¥ 7. xml ½âÎö´úÂë
cur_date = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) # Ê×ÏÈ»ñÈ¡µ±Ç°ÏµÍ³ÈÕÆÚ
xmldoc = minidom.parse(xml_file)
min_num_node = xmldoc.getElementsByTagName('min-sprint')[0]
min_num = int(min_num_node.firstChild.data) #½âÎö³öµü´ú¿ª·¢ÖÜÆÚµÄÆðʼÖÜÆÚ
max_num_node = xmldoc.getElementsByTagName('max-sprint')[0]
max_num = int(max_num_node.firstChild.data) #½âÎö³öµü´ú¿ª·¢ÖÜÆÚµÄÖÕÖ¹ÖÜÆÚ
cur_num = min_num
#±éÀúËùÓеü´úÖÜÆÚ£¬È¡³öµ±Ç°µü´úÖÜÆÚµÄ¿ªÊ¼Ê±¼äºÍµ±Ç°µÄϵͳʱ¼ä¶Ô±È£¬´Ó¶øÈ·¶¨µ±Ç°Î»ÓÚÄÄÒ»¸öµü´úÖÜÆÚ¡£
while cur_num <= max_num :
node_name = 'sprint' + str(cur_num)
cur_node = xmldoc.getElementsByTagName(node_name)[0]
sprint_date = cur_node.firstChild.data
if sprint_date < cur_date[0:7]:
cur_num = cur_num + 1
else:
break |
ÕâÑù cur_num ¾ÍÖ¸ÏòÁ˵±Ç°µÄµü´ú¿ª·¢ÖÜÆÚ¡£È»ºó£¬ÎÒÃǾͿÉÒÔ¸ù¾Ýµ±Ç°ÈÕÆÚºÍ¿ª·¢½×¶Î´´½¨¶ÔÓ¦µÄÈÕ־Ŀ¼ÃûÁË£¬×îºó°ÑÔËÐнá¹û´æ´¢µ½¸ÃĿ¼Ï£¬²Î¼ûÇåµ¥
8 ʵÏÖ¡£
Çåµ¥ 8. ÈÕÖ¾´æ´¢´úÂë
log_dir = self.share_dir + '/Sprint' + str(cur_num) + '-' + cur_date #share_dir Ϊ¹²ÏíĿ¼£¬¶¨ÒåÔÚ³õʼ»¯º¯ÊýÖÐ os.mkdir(log_dir) os.system('mv %s %s' %(self.debug_fullname, log_dir)) #debug_fullname£¬ÏêϸÈÕÖ¾ÎļþÃû£¨º¬Ä¿Â¼£©£¬¶¨ÒåÔÚ³õʼ»¯º¯ÊýÖÐ os.system('mv %s %s' %(self.sum_fullname, log_dir)) #sum_fullname£¬»ã×ÜÈÕÖ¾µÄȫ·¾¶ÎļþÃû£¬¶¨ÒåÔÚ³õʼ»¯º¯ÊýÖÐ |
¹ØÓÚ²âÊÔ½á¹ûµÄ·¢²¼£¬±¾ÎIJ¢Ã»ÓаѲâÊÔ½á¹ûÒÔ×Ô¶¯»¯µÄÐÎʽ·¢ËÍÓʼþ£¬¶øÊÇÊÖ¶¯ÔÚÿ¸ö¿ª·¢ÖÜÆÚ½áÊøÊ±£¬Èº·¢Óʼþ¸øÏà¹ØÈËÔ±¡£»òÕßÔÚÑé֤ʧ°Üºó£¬Í¨ÖªÏà¹ØµÄ¿ª·¢ÈËÔ±£¬ÕâÊÇÓÉÓÚ×÷ÕßËùÔÚÍŶÓÏîÄ¿´úÂëÌύƵÂʲ»ÊǺܸߡ£ÔÚ¸ü´óÐ͵ÄÏîÄ¿ÖУ¬ÍùÍùÐèÒªÔö¼Ó×Ô¶¯·¢ËÍÓʼþµÄ¹¦ÄÜ£¬Ïà¹ØÊµÏÖ±¾ÎIJ»ÔÙ׸Êö¡£
Ҳ̸½çÃæÉè¼Æ ---- getopt µÄʹÓÃ
ÔÚÈÕ³£µÄ²âÊÔ¹ý³ÌÖУ¬ÎÒÃDz¢²»ÊÇÿ´Î¶¼ÒªÇ¨³ö´úÂ룬±àÒë´úÂ룬ÔËÐвâÊÔÓÃÀýºÍÊÕ¼¯²âÊÔ½á¹û¡£ÕâÑù¾ÍÐèÒªÎÒÃÇÄܹ»ÓÐÑ¡ÔñµÄÔËÐв¿·Ö³ÌÐò¹¦ÄÜ£¬ÀýÈçÖ»ÔËÐвâÊÔÓÃÀýºÍÊÕ¼¯½á¹û¡£ÕâÀïÎÒÃÇÌṩÁË
4 ¸öÔËÐÐÑ¡Ôó£º
Ñ¡Ïî 1£ºÇ¨³ö´úÂë-->±àÒë°æ±¾-->ÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û
Ñ¡Ïî 2£º¸üдúÂë-->±àÒë°æ±¾-->ÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û
Ñ¡Ïî 3£º±àÒë°æ±¾-->ÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û
Ñ¡Ïî 4£ºÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û
µ±È»ÎÒÃÇ»¹ÐèÒªÌṩ°ïÖúÐÅÏ¢£¬ÒÔ·½±ã²»ÊìϤ¸Ã½Å±¾ÊµÏÖµÄÈËԱʹÓá£python
Ò²ÌṩÁË getopt Ä£¿éÈÃÎÒÃÇÇáËÉʵÏÖÉÏÊö¹¦ÄÜ¡£ÊµÏÖ´úÂë²Î¼ûÇåµ¥ 9
Çåµ¥ 9. ÃüÁîÐÐд½âÎö´úÂë
try: opts, args = getopt.getopt(sys.argv[1:], 'bchu', ['build', 'checkout', 'help', 'update']) except getopt.error, msg: self.usage() sys.exit(2)
build_flag = 0 #¹¹½¨Ñ¡Ïî
for o, a in opts:
if o in ('-h', '--help'):
self.usage()
sys.exit()
elif o in ('-c', '--checkout'):
print "Ö´ÐвÙ×÷£ºÇ¨³ö´úÂë-->±àÒë°æ±¾-->ÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û"
build_flag = 1
break
elif o in ('-u', '--update'):
print "Ö´ÐвÙ×÷£º¸üдúÂë-->±àÒë°æ±¾-->ÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û"
build_flag = 2
break
elif o in ('-b', '--build'):
print "Ö´ÐвÙ×÷£º±àÒë°æ±¾-->ÔËÐвâÊÔÓÃÀý-->ÊÕ¼¯²âÊÔ½á¹û"
build_flag = 3
break
else:
self.usage()
sys.exit()
if (0 == build_flag) :
if 2 <= len(sys.argv):
self.usage()
sys.exit()
raw_input('\n °´ Enter ¼ü¼ÌÐø¡£¡£¡£(Ctrl+C
Í˳ö)\t')
if (1 == build_flag) : #Ǩ³ö´úÂ룬²¢±àÒë´úÂë
self.checkout_code()
self.build_code()
elif (2 == build_flag) : #¸üдúÂ룬²¢±àÒë´úÂë
self.update_code()
self.build_code()
elif (3 == build_flag) : #±àÒë´úÂë
self.build_code()
#ÔËÐвâÊÔÓÃÀý²¢ÊÕ¼¯ÔËÐнá¹û
self.set_python()
self.run_testsuite()
self.store_logs() |
Èç¹ûÎÒÃÇÔÚÔËÐеĹý³ÌÖÐÏëÖжϣ¨ÈçÀûÓà Ctrl+C£©Ò»¼ü»Ø¹é²âÊÔ½ø³ÌµÄÖ´ÐÐʱ£¬ÓÐʱÎÒÃǻᷢÏÖËäÈ»Ö÷½ø³ÌÒѾ±»ÖÕÖ¹£¬µ«×Ó½ø³ÌÈÔÔÚÔËÐС£ÎÒÃÇÄÜ·ñÔÚÖжÏÖ÷½ø³ÌµÄͬʱҲÖжÏ×Ó½ø³ÌÄØ£¿´ð°¸µ±È»Êǿ϶¨µÄ£¬ÎÒÃÇ¿ÉÒÔÓÃÐźŴ¦Àíº¯Êý²¶»ñÐźţ¨Èç²¶»ñ
Ctrl+C ²úÉúµÄÖжÏÐźţ©£¬È»ºóÔÚÏÔʽÖÕÖ¹¶ÔÓ¦µÄ×Ó½ø³Ì¡£ÕâÀï¾ÍÐèÒªÎÒÃÇÔÚ´´½¨×Ó½ø³ÌµÄʱºò£¬Ïȱ£´æ×Ó½ø³Ì
ID£¬µ±È»°Ñ×Ó½ø³Ì ID ±£´æµ½³õʼ»¯º¯ÊýÖУ¬ÊǸö²»´íµÄÑ¡Ôñ£¬Çåµ¥ 10 ÊÇÏà¹ØÊµÏÖ¡£
Çåµ¥ 10. ÐźŴ¦Àí´úÂë
# ÖÕÖ¹×Ó½ø³ÌµÄÔËÐÐ def handler(self, signum, frame): if (-1 != self.subproc_id) : #subproc_id ¶¨ÒåÔÚ³õʼ»¯º¯ÊýÖУ¬ÓÃÀ´´æ´¢µ±Ç°×Ó½ø³ÌµÄ ID os.killpg(self.subproc_id, signal.SIGINT) sys.exit(-1) |
ÕâÀïÎÒÃÇÐèÒªÔÚ³õʼ»¯º¯ÊýÖÐ×¢²áÒª²¶»ñµÄÐźţ¬²¢ÇÒ´´½¨³ÉÔ±±äÁ¿ÓÃÀ´±£´æ×Ó½ø³ÌµÄ
ID£¬ÏêϸʵÏÖÇë²Î¼ûÇåµ¥ 11¡£
»ùÓÚ¶ÔÏóµÄÉè¼Æ ---- class µÄʹÓÃ
×îºóÖÕÓÚÂÖµ½ class µÇ³¡ÁË£¬Ìáµ½ class ÎÒÃǾͲ»Äܲ»Ì¸¹¹Ô캯Êý£¨³õʼ»¯º¯Êý£©ºÍÎö¹¹º¯Êý¡£Ö®Ç°ÎÒÃǶà´ÎÌáµ½³õʼ»¯º¯Êý£¬³õʼ»¯º¯ÊýÔÊÐíÎÒÃǶ¨ÒåһЩ±äÁ¿£¬ÕâЩ±äÁ¿ÔÚÕû¸öÀà¶ÔÏóµÄÉú´æÖÜÆÚÄÚ¾ùÓÐЧ¡£ÓÉÓÚ±¾ÎÄûÓÐÏòϵͳÉêÇë×ÊÔ´£¬¾ÍÔÙ²»¶¨ÒåÎö¹¹º¯ÊýÁË¡£
Çåµ¥ 11. ³õʼ»¯´¦Àí´úÂë
def __init__(self): signal.signal(signal.SIGINT, self.handler) #×¢²áÐèÒª²¶»ñµÄÐźÅÁ¿ self.myafs_dir = os.getenv('myafs') self.subproc_id = -1 #×Ó½ø³Ì ID£¬ÓÃÀ´ÔÚÖÕÖ¹Ö÷½ø³ÌʱҲͬʱÖÕÖ¹×Ó½ø³Ì self.debug_log = 'log.txt' #´æ´¢ÏêϸÔËÐÐÈÕÖ¾µÄÎļþÃû self.debug_fullname = os.getcwd() + os.sep + self.debug_log #ȫ·¾¶ÎļþÃû£¨¼ÙÉè²úÉúÔÚ¸ÃĿ¼Ï£© self.sum_log = 'summary' #´æ´¢»ã×ÜÈÕÖ¾µÄÎļþÃû self.sum_fullname = os.getcwd() + os.sep + self.sum_log #ȫ·¾¶ÎļþÃû£¨¼ÙÉè²úÉúÔÚµ±Ç°Ä¿Â¼Ï£© self.share_dir = self.utafs_dir + '/SharedFiles' #¹²ÏíĿ¼ÎļþÃû |
ͨ³£ÎÒÃDz»ÐèҪ̫¹Ø×¢Éè¼Æ·ç¸ñ£¬Ö»Òª Python ½Å±¾ÄÜÍê³ÉÎÒÃǵIJâÊÔÒªÇó¼´¿É¡£¶ÔÓÚ½ÏСµÄ½Å±¾£¬¼¸Ìõ
Python Ö¸Áî˳ÐòÖ´Ðм´¿É¡£ÎªÁËÄ£¿é¹¦Äܸ´ÓúͿɶÁÐÔ£¬ÎÒÃÇͨ³£»á°Ñ¹¦ÄÜÄ£¿é·â×°³Éº¯Êý¡£±¾ÎĽ«ÊµÏÖµÄËùÓк¯Êý¶¼·â×°µ½Ò»¸öÀàÖУ¬Ê¹µÃ¸Ã½Å±¾¸ü¼ÓÒ»Ì廯¡£
Çåµ¥ 12. class ¿ò¼Ü½á¹¹´úÂë
class COneClickRegTest: #É趨һЩ¾³£Ê¹ÓõıäÁ¿£¬È統ǰ¹¤×÷Ŀ¼£¬ÈÕÖ¾Ãû³Æ¡¢´æ´¢Â·¾¶µÈ def __init__(self): #É趨 python »·¾³±äÁ¿£¬ÊµÏֲμû´úÂëÎļþ def set_python(self):
#¸üдúÂ룬ʵÏֲμû´úÂëÎļþ
def update_code(self):
#Ǩ³ö´úÂ룬ʵÏֲμûµÚ 2 Õ´úÂë
def checkout_code(self):
#±àÒë°æ±¾£¬ÊµÏֲμûÇåµ¥ 1 ´úÂë
def build_code(self):
#ÔËÐвâÊÔ¼¯£¬ÊµÏֲμû´úÂëÎļþ
def run_testsuite(self):
#´æ´¢ÔËÐнá¹û£¬ÊµÏֲμûÇåµ¥ 7 ºÍÇåµ¥ 8 ´úÂë
def store_logs(self):
#ÐźŴ¦Àí£¬ÊµÏֲμûÇåµ¥ 10 ´úÂë
def handler(self, signum, frame):
#½Å±¾Ê¹ÓÃ˵Ã÷£¬ÊµÏֲμû´úÂëÎļþ
def usage(self):
#ÃüÁîÐнâÎöÒÔ¼°Ö´ÐжÔÓ¦µÄ¹¦ÄÜ£¬ÊµÏֲμûÇåµ¥ 9 ´úÂë
def main(self): |
½áÊøÓï
Python ÓïÑÔÊÇÒ»¸öÒ×ѧÒ×ÓõĽű¾ÓïÑÔ£¬±ÊÕßûÓжà¾ÃµÄ Python
¿ª·¢¾Ñ飬²»¹ýÆäËûÓïÑÔÓеŦÄÜÔÚ Python Öд󶼿ÉÒÔÕÒµ½¶ÔÓ¦µÄʵÏÖ£¬ÕâÒ²ÊDZÊÕßÄܹ»Ôں̵ܶÄʱ¼äÄÚÍê³É¸Ã²âÊԽű¾µÄÔÒò¡£Òò´Ë£¬±ÊÕ߰ѸÃÓïÑÔºÍʹÓøÃÓïÑÔÍê³ÉÒ»¼ü»Ø¹é²âÊÔ½éÉܸø´ó¼Ò£¬Ï£Íû¶Ô´ó¼ÒÓÐËù°ïÖú¡£ÕýÏñ±ÊÕß˵µÄÆäËûÓïÑÔÓеŦÄÜÔÚ
Python Öд󶼿ÉÒÔÕÒµ½¶ÔÓ¦µÄʵÏÖ£¬Í¬Ñù£¬Èç¹û´ó¼Ò¶ÔijһÖÖÌØ¶¨µÄ½Å±¾ÓïÑÔ»òÕß¿ª·¢ÓïÑÔÌØ±ðÊìϤ£¬Ò²ÍêÈ«¿ÉÒÔ²ÉÓÃËùÊìϤµÄÓïÑÔÀ´Íê³ÉÒ»¼ü»Ø¹é²âÊԵŤ×÷¡£
|