#!/usr/bin/python # create new project by cocos-console # compile, deploy project and run # perpose: for emptytest. # now support: mac- mac/ios/android # will add: window-android,linux-android import os import subprocess import sys import json import time import socket payload = {} #get payload from os env if os.environ.has_key('payload'): payload_str = os.environ['payload'] #parse to json obj global payload payload = json.loads(payload_str) print 'payload:',payload pr_num = 1 #get pull number if payload.has_key('issue'): issue = payload['issue'] if issue.has_key('number'): pr_num = issue['number'] print 'pr_num:' + str(pr_num) test_name = ['cpp_empty_test'] if os.environ.has_key('TESTS_NAME'): temp_var = os.environ('TESTS_NAME') test_name = temp_var.split(', ') package_name = ['org.cocos2dx.hellocpp'] if os.environ.has_key('PACKAGE_NAME'): temp_var = os.environ('PACKAGE_NAME') package_name = temp_var.split(', ') activity_name = ['org.cocos2dx.cpp.AppActivity'] if os.environ.has_key('ACTIVITY_NAME'): temp_var = os.environ('ACTIVITY_NAME') activity_name = temp_var.split(', ') gIdx = 0 if os.environ.has_key('TEST_INDEX'): gIdx = os.environ('TEST_INDEX') arrDevices = [] def getDevices(): cmd = 'adb devices' info_devices = os.popen(cmd).read() arr_info = info_devices.split('\n') del arr_info[0] count = 0 for device in arr_info: if len(device) > 0: count += 1 print 'device ', count,device deviceInfo = device.split(' ') global arrDevices obj = {} obj['name'] = deviceInfo[0] arrDevices.append(obj) return count def getADBDeviceIP(device_name): output = os.popen("adb -s "+device_name+" shell netcfg") configs = output.read().split('\r\n') for l in configs: items = l.split() if len(items)>1 and items[1] == 'UP': if items[2].find('127.0.0.1') < 0 and items[2].find('0.0.0.0') < 0: return items[2] return False def mapIP(): for device in arrDevices: ip_d = getADBDeviceIP(device['name']) if ip_d: ip_d = ip_d.replace('.30.', '.40.') device['ip'] = ip_d info_empty_test = {} apk_name = 'apk/'+test_name[gIdx]+'/'+test_name[gIdx]+'_'+str(pr_num)+'.apk' def install_apk(): print 'will install apk:', apk_name if len(arrDevices) == 0: print 'no android device.' return False info_of_install = [] for device in arrDevices: name = device['name'] cmd = 'adb -s '+name+' install '+apk_name print 'install on '+name info_install = os.popen(cmd).read() print 'infomation of install apk:', info_install info_of_install.append(info_install.split('\r\n')) info_empty_test['install'] = info_of_install return True def open_apk(type_of_apk): print 'will open activity:' for device in arrDevices: cmd = 'adb -s '+device['name']+' shell am start -n '+package_name[gIdx]+'/'+activity_name[gIdx] # print 'start activity:', cmd info_start = os.popen(cmd).read() info_start = info_start.split('\n') # print 'info_start:', info_start for info in info_start: if info.find('Error:') > -1: print 'infomation of open activity:',info return info print 'activity is opened.' return True PORT = 5678 def socket_status(device_name): soc = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) try: print 'will check status of app:', device_name soc.connect((device_name['ip'], PORT)) cmd = 'resolution\r\n' # print 'socket cmd :', cmd soc.send(cmd) while True: data = soc.recv(1024) if len(data): print data if data.find('size:') > -1: print test_name[gIdx]+' is successful!' return True if not data: print test_name[gIdx]+' is crashed!' break except Exception, e: print test_name[gIdx]+' is crashed!' return False def uninstall_apk(idx): # adb shell pm uninstall -n org.cocos2dx.hellolua print 'will uninstall apk:', package_name[idx] for device in arrDevices: cmd = 'adb -s '+device['name']+' shell pm uninstall -n '+package_name[idx] info_uninstall = os.popen(cmd).read() print 'uninstall apk:', info_uninstall return True def main(): print 'in main:' getDevices() if len(arrDevices): mapIP() print 'arrDevices:',arrDevices print 'empty test start:' install_info = install_apk() open_info = open_apk(test_name[gIdx]) info_empty_test['open_info'] = open_info if open_info: time.sleep(5) socket_info = socket_status(arrDevices[0]) info_empty_test['socket_info'] = socket_info if install_info: time.sleep(5) info_uninstall = uninstall_apk(gIdx) print 'info_empty_test:', info_empty_test print 'empty test end' # -------------- main -------------- if __name__ == '__main__': sys_ret = 0 try: sys_ret = main() except: traceback.print_exc() sys_ret = 1 finally: sys.exit(sys_ret)