def test_mpc_settings(self): logger.info('Enter -- MPT:SettingsTest:test_mpc_settings') value = {} report = MuatReport() serial_number = None if self.param and self.param.parameters and self.param.parameters.serial_number: serial_number = self.param.parameters.serial_number apk_manager = ApkManager() apk = constants.MPT_SETTING_APK apk_info = apk_manager.get_apk_info(apk) if apk in apk_manager.local_apks_info: while True: for i in range(constants.MPT_SETTING_COUNT): # check monitor running status if self.mon and not self.mon.running_status: break # start apk apk_manager.start_apk(apk, serial_number=serial_number) time.sleep(1) for resource_id in constants.MPT_SETTING_APK_RESOURCEIDS: # check monitor running status if self.mon and not self.mon.running_status: break # start adb log capture thread detect_re = re.compile(r'MPT click UiSelector.PACKAGE NAME=%s, RESOURCE_ID=(%s:id/%s). at (.*)$' % (apk_info.package_name, apk_info.package_name, resource_id)) wanted_re = re.compile(r'MPT: sf post one frame at (.*)$') adb_log = AdbLog(mode=AdbLog.MODE_RE | AdbLog.MODE_NEED_DETECT, wanted_re=wanted_re, detect_re=detect_re, logger=logger, serial_number=serial_number) adb_log.clear() adb_log.start() # click setting items button = self.d(packageName=apk_info.package_name, resourceId='%s:id/%s' % (apk_info.package_name, resource_id)) if button.exists: logger.debug('click item (%s)' % (resource_id)) button.click() time.sleep(2) else: logger.warning('not found item(%s)' % (resource_id)) # check the log and get the data while True: if len(adb_log.result) == 2: break else: time.sleep(1) # store the result click_item = '' start_time = 0 end_time = 0 cost_time = 0 try: click_item = adb_log.result[0][0] start_time = int(adb_log.result[0][1]) end_time = int(adb_log.result[1][0]) if click_item == '%s:id/%s' % (apk_info.package_name, resource_id): cost_time = end_time - start_time else: logger.error('detect_re detect the wrong item: (%s)' % (adb_log.result[0])) except: logger.error('retrieve time from (%s) error' % (adb_log.result)) logger.info('setting item(%s) cost: %s' % (resource_id, cost_time)) if resource_id in value: value[resource_id].append(cost_time) else: value[resource_id] = [cost_time] # report message report.add_message(data_name='muat_setting', MON_Time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), item=resource_id, unit='ms', value=cost_time, item_name=constants.MPT_SETTING_APK_RESOURCEIDS_CN[resource_id].decode('gb2312')) adb_log.join() # close apk apk_manager.close_apk(apk) if self.mon and not self.mon.running_status: break if self.param and self.param.parameters and self.param.parameters.special_keys and 'run_one_cycle' in self.param.parameters.special_keys: break if value: logger.debug('setting test : %s' % (value)) #result_items = [] summary = {} for resource_id in value: summary[resource_id] = sum(value[resource_id]) / len(value[resource_id]) #result_items.append(summary[resource_id]) #summary[constants.MPT_SETTING_RESULT_TOTAL] = sum(result_items) / len(result_items) logger.debug('setting test - summary: %s' % (summary)) result = GenerateResult(case=os.path.basename(os.path.abspath(__file__)), unit='ms', standard=0, summary=summary, value=value) if result.result: report.add_result(result.result) else: logger.error('setting test failed')