示例#1
0
 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)
示例#2
0
    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)
示例#3
0
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!")