ios清除内存抓取log操作
#!/usr/bin/env python# -*- coding: utf-8 -*-"""Copyright (C) 2016-2019 Zhiyang Liu in Software Development of NIO/NEXTEV) All rights reserved.Author: zhiyang.liu.o@nio.comDate: 2019-05-20History:-----
·
#!/usr/bin/env python # -*- coding: utf-8 -*- """ Copyright (C) 2016-2019 Zhiyang Liu in Software Development of NIO/NEXTEV) All rights reserved. Author: zhiyang.liu.o@nio.com Date: 2019-05-20 History: --------------------------------------------- Modified Author Content """ import os from ...config.laputa_config import source_path, run_path temp_path = source_path + 'test_report/ios' get_log = True if os.getenv('get_log') else False # 执行文件为test_run.py时开启抓取手机日志功能 if os.getenv('no_install') is None: os.environ['no_install'] = 'true' class Cmd: def get_cmd_return(self, cmd): return os.popen(cmd).readlines() # 获取设备id def get_devices(self, cmd='idevice_id -l'): content = self.get_cmd_return(cmd=cmd) device_list = list() ignore_list = [ '8056ca675ee0f32cf0bdae6bcbaeda80eb41e688', # 7 '00008020-001045490238002E', # xs '08feda8b7b9e76e22a244d8f90de2f9d01e178de' # 7 ] if 'test_run' in run_path: from ..init_project import module_list else: module_list = None for d in content: udid = d.split('\n')[0] if module_list == ['Build_check']: if udid in ignore_list and (os.getenv('no_install') == 'true' or os.getenv('%s_install' % udid) == 'success'): device_list.append(udid) elif os.getenv('no_install') == 'true' or os.getenv('%s_install' % udid) == 'success': device_list.append(udid) if os.getenv('print_cmd') is None: print('可用设备列表:', sorted(device_list)) os.environ['print_cmd'] = '1' if len(device_list) is 0: raise Exception('无可用设备,请在控制台输入命令「%s」确认连接设备信息' % cmd) return sorted(device_list) # 获取系统版本 def get_system_version(self, udid): os_system_version = os.popen('ideviceinfo -u %s -k ProductVersion' % udid).readlines() # 适配ios os_system_version = os_system_version[0].split('\n')[0] # 适配ios return os_system_version # 获取手机型号 def get_phone_hw_info(self, udid): product_type = os.popen('ideviceinfo -u %s -k ProductType' % udid).readlines() # 适配ios product_type = product_type[0].split('\n')[0] return product_type # for key in iphone_info: # phone_info_value = iphone_info[key] # phone_type_list = phone_info_value['type'] # if product_type in phone_type_list: # return phone_info_value # 获取手机名字 def get_device_name(self, udid): device_name = os.popen('ideviceinfo -u %s -k DeviceName' % udid).readlines() # 适配ios device_name = device_name[0].split('\n')[0] if os.getenv('print_%s_name' % udid) is None: print(udid, 'name', device_name) os.environ['print_%s_name' % udid] = '1' return device_name # 获取手机品牌 def get_phone_brand(self, udid): phone_brand = os.popen('ideviceinfo -u %s -k ProductName' % udid).readlines() phone_brand = phone_brand[0].split(' ')[0] return phone_brand def kill_port(self, port): from time import sleep t = 0 while True: if os.name == 'nt': pid_line = os.popen('netstat -ano|findstr 127.0.0.1:%s' % port).readlines() if len(pid_line) > 0 and t < 3: t += 1 for i in pid_line: if 'LISTEN' in i: i = i.strip('\n').strip(' ') line = i.split(' ')[-1] os.system('tskill %s' % line) else: return os.system('taskkill /f /im cmd.exe /fi "windowtitle eq appium"') # win10 appium结束后遗留窗口 os.system('taskkill /f /im cmd.exe /fi "windowtitle eq 管理员: appium"') # win7 appium结束后遗留窗口 else: while True: pid_line = os.popen("lsof -i:%s|grep node | awk '{print $2}'" % port).readline().strip('\n') if len(pid_line) > 0 and t < 3: t += 1 os.system('kill -9 %s' % pid_line) sleep(1) else: return def create_log_path(self, path): """ 创建log存储目录,并将目录保存到环境变量中 """ dir_path = os.path.abspath(path + '/log/') os.makedirs(dir_path, exist_ok=True) os.environ['log_path'] = dir_path def start_syslog(self, udid): """ logcat日志临时存放在手机中,测试完成后取出 """ if get_log: dir_path = os.getenv('log_path') print(dir_path) syslog_path = dir_path + '/%s.log' % udid start_syslog_cmd = 'nohup idevicesyslog -u %s > %s &' % (udid, syslog_path) os.system(start_syslog_cmd) return syslog_path def end_syslog(self, udid, case_id=None, result=None): """ 报告路径从提前写入到手机中,用例结束后将logcat压缩取出更名存入到报告目录下 :param udid: 通过设备id指定设备执行 :param case_id: 脚本名 :return: 返回服务器log文件链接 """ if get_log: check_pid_command = "ps -le| grep 'idevicesyslog -u %s'|sed -n '1p'|awk '{print $2}'" % udid pid_list = os.popen(check_pid_command).readline() os.system('kill -9 %s' % pid_list) if case_id is None: return dir_path = os.getenv('log_path') + '/%s.log' % udid gzip_command = 'gzip %s' % dir_path os.system(gzip_command) if os.path.exists(dir_path): os.remove(dir_path) dir_path_new = os.getenv('log_path') os.system('mv {0}/{1}.log.gz {0}/{2}.log.gz'.format(dir_path_new, udid, case_id)) if result == 'Pass': os.remove('%s.log.gz' % (dir_path_new + '/' + case_id)) def end_all_log(self): pid_lines = os.popen('ps -le| grep \'idevicesyslog -u\'').readlines() for i in pid_lines: if 'grep idevicesyslog' not in i: i = i.replace(' ', ' ') pid = i.split(' ')[1] os.system('kill -9 %s' % pid) def clear_cache(self): import getpass from laputa_auto.util.init_project import module_list if module_list == ['Build_check']: return wda_cache_path = '/Users/%s/Library/Developer/Xcode/DerivedData/WebDriverAgent*' % getpass.getuser() os.system('rm -rf %s' % wda_cache_path) content = self.get_cmd_return(cmd='idevice_id -l') for d in content: udid = d.split('\n')[0] wda = os.popen('ios-deploy --id %s --list_bundle_id | grep WebDriverAgent' % udid).readline().strip() if 'WebDriverAgent' in wda: os.system('ios-deploy -i %s -9 -1 %s' % (udid, wda)) if __name__ == "__main__": pass
更多推荐
已为社区贡献1条内容
所有评论(0)