def pull_file_between_time(self, src_path, dst_path, start_timestamp, end_timestamp): ''' 提取/data/anr 目录下 在起止时间戳之间的文件 :return: ''' # 在PC上创建目录 dst_path = os.path.join(dst_path, src_path.split("/")[-1]) FileUtils.makedir(dst_path) for src_file_path in self.list_dir_between_time(src_path, start_timestamp, end_timestamp): self.pull_file(src_file_path, dst_path)
def run(self, time_out=None): self.clear_heapdump() # objgraph.show_growth() # 对设备连接情况的检查 if not self.serialnum: # androiddevice 没传 serialnum,默认执行adb shell logger.info( "serialnum in config file is null,default get connected phone") is_device_connect = False for i in range(0, 5): if self.device.adb.is_connected(self.serialnum): is_device_connect = True break else: logger.error("device not found:" + self.serialnum) time.sleep(2) if not is_device_connect: logger.error("after 5 times check,device not found:" + self.serialnum) return # 对是否安装被测app的检查 只在最开始检查一次 if not self.device.adb.is_app_installed(self.packages[0]): logger.error("test app not installed:" + self.packages[0]) return try: #初始化数据处理的类,将没有消息队列传递过去,以便获取数据,并处理 # datahandle = DataWorker(self.get_queue_dic()) # 将queue传进去,与datahandle那个线程交互 self.add_monitor( CpuMonitor(self.serialnum, self.packages, self.frequency, self.timeout)) self.add_monitor( MemMonitor(self.serialnum, self.packages, self.frequency, self.timeout)) self.add_monitor( TrafficMonitor(self.serialnum, self.packages[0], self.frequency, self.timeout)) # 软件方式 获取电量不准,已用硬件方案测试功耗 # self.add_monitor(PowerMonitor(self.serialnum, self.frequency,self.timeout)) self.add_monitor( FPSMonitor(self.serialnum, self.packages[0], self.frequency, self.timeout)) # 6.0以下能采集到fd数据,7.0以上没权限 if self.device.adb.get_sdk_version() <= 23: self.add_monitor( FdMonitor(self.serialnum, self.packages[0], self.frequency, self.timeout)) self.add_monitor( ThreadNumMonitor(self.serialnum, self.packages[0], self.frequency, self.timeout)) if self.config_dic["monkey"] == "true": self.add_monitor(Monkey(self.serialnum, self.packages[0])) if self.config_dic["main_activity"] and self.config_dic[ "activity_list"]: self.add_monitor( DeviceMonitor(self.serialnum, self.packages[0], self.frequency, self.config_dic["main_activity"], self.config_dic["activity_list"], RuntimeData.exit_event)) if len(self.monitors): start_time = TimeUtils.getCurrentTimeUnderline() RuntimeData.start_time = start_time if self.config_dic["save_path"]: RuntimeData.package_save_path = os.path.join( self.config_dic["save_path"], self.packages[0], start_time) else: RuntimeData.package_save_path = os.path.join( RuntimeData.top_dir, 'results', self.packages[0], start_time) FileUtils.makedir(RuntimeData.package_save_path) self.save_device_info() for monitor in self.monitors: #启动所有的monitors try: monitor.start(start_time) except Exception as e: logger.error(e) # logcat的代码可能会引起死锁,拎出来单独处理logcat try: self.logcat_monitor = LogcatMonitor( self.serialnum, self.packages[0]) # 如果有异常日志标志,才启动这个模块 if self.exceptionlog_list: self.logcat_monitor.set_exception_list( self.exceptionlog_list) self.logcat_monitor.add_log_handle( self.logcat_monitor.handle_exception) time.sleep(1) self.logcat_monitor.start(start_time) except Exception as e: logger.error(e) timeout = time_out if time_out != None else self.config_dic[ 'timeout'] endtime = time.time() + timeout while (time.time() < endtime): #吊着主线程防止线程中断 # 时间到或测试过程中检测到异常 if self.check_exit_signal_quit(): logger.error("app " + str(self.packages[0]) + " exit signal, quit!") break time.sleep(self.frequency) logger.debug("time is up,finish!!!") self.stop() # try: # datahandle.stop() # time.sleep(self.frequency*2) # # 延迟一点时间结束上报,已让数据上报完 # # report.stop() # except: # logger.debug("report or datahandle stop exception") # finally: # logger.info("time is up, end") # os._exit(0) except KeyboardInterrupt: #捕获键盘异常的事件,例如ctrl c logger.debug(" catch keyboardInterrupt, goodbye!!!") # 收尾工作 self.stop() os._exit(0) except Exception as e: logger.error("Exception in run") logger.error(e)
import sys import re import logging import logging.handlers from logging.handlers import TimedRotatingFileHandler BaseDir=os.path.dirname(__file__) sys.path.append(os.path.join(BaseDir,'../..')) from mobileperf.common.utils import FileUtils logger = logging.getLogger('mobileperf') logger.setLevel(logging.DEBUG) fmt = logging.Formatter('[%(asctime)s]%(levelname)s:%(name)s:%(module)s:%(message)s') streamhandler=logging.StreamHandler(sys.stdout) streamhandler.setFormatter(fmt) # 调试时改为DEBUG 发布改为 INFO streamhandler.setLevel(logging.DEBUG) dir = os.path.join(FileUtils.get_top_dir(), 'logs') FileUtils.makedir(dir) log_file = os.path.join(dir,"mobileperf_log") log_file_handler = TimedRotatingFileHandler(filename=log_file, when="D", interval=1, backupCount=3) log_file_handler.suffix = "%Y-%m-%d_%H-%M-%S.log" log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}.log$") log_file_handler.setFormatter(fmt) log_file_handler.setLevel(logging.DEBUG) logger.addHandler(streamhandler) logger.addHandler(log_file_handler) if __name__=="__main__": logger.debug("测试3!")