import subprocess,re,os,random,timedef get_device():#adb devices 可显示的设备有import subprocess,os# :return: devices_list 设备列表  device_num  设备数量devices_result=subprocess.getoutput("adb devices")devices_list=devices_result.replace("no permissions","").replace("device","").replace("\t","").split("\n")[1:-1]device_num=len(devices_list)unauthorized_devices_list=[]for i in devices_list:if "unauthorized" in i :devices_list.remove(i)unauthorized_devices_list.append(i.replace("unauthorized",""))return devices_listdef get_device_info(device):#捕获手机型号是:vivo NEX    android版本: 8.1.0    屏幕分辨率为:1080x2316android_version=subprocess.getoutput("adb -s %s shell getprop ro.build.version.release"%device)# product_version=subprocess.getoutput('adb  -s %s shell getprop | grep product.version'%device).split(":")[1].replace('[',"").replace("]","").replace(" ",'')product_model_result=subprocess.getoutput('adb  -s %s shell getprop | grep "model\|version.sdk\|manufacturer\|hardware\|platform\|revision\|serialno\|product.name\|brand"'%device)product_model=re.search(r"\[ro.product.model\]: \[(.*)\]",product_model_result)phone_product=(product_model.group().replace("[ro.product.model]: ",'').replace("[","").replace("]",''))screen_size=subprocess.getoutput('adb -s %s shell "dumpsys window | grep mUnrestrictedScreen"'%device).replace("mUnrestrictedScreen=(0,0)",'').replace(" ",'')# print("手机型号是:%s" % phone_product)# # print("软件版本号:%s"%product_version)# print("android版本:", android_version)# print("屏幕分辨率为:%s"%screen_size)return  phone_product,android_version,screen_sizedef get_package_name(app):#捕获app package包名result=subprocess.getoutput('aapt dump badging  %s  | grep "package: name="'%(app))package=str(result.split(" ")[1]).replace("name=","").replace("'","")print("package_name:%s"%package)return packagedef install_app(device,app):#安装appos.system('adb -s %s install %s'%(device,app))subprocess.getoutput('adb -s %s install %s'%(device,app))def monkey_test(device,package_name,monkey_report):#执行 monkeyseed = random.randint(10, 1000)injected_num0 = 2000# 执行monkeytest_monkey_command = "adb -s %s shell monkey -p %s -s %s -v -v -v  --throttle %s %s >>%s" % (device, package_name, seed, 5, injected_num0, monkey_report)os.system(test_monkey_command)def  get_cpuinfu(device,package_name,cpuinfo_file):'''cpu mem'''# adb -s %s shell  nohup  top -n  1 |  grep com.meelive.ingkee >> cpu.txtimport subprocesscpu_command="adb -s %s shell top  -n 10 |grep %s   >> %s"%(device,package_name,cpuinfo_file)subprocess.getoutput(cpu_command)print(cpu_command)
def avg(num):nsum = 0for i in range(len(num)):nsum += num[i]return nsum / len(num)def read_cpu_mem_info_data(file=None):import reimport mathfrom decimal import Decimal# file="/opt/liming_dir/ldx_project/cpu_dir/215bc0d_laidianxiu_cpuinfo.txt"with open(file,"r")as f:readlines=f.readlines()cpu_list=[]mem_list=[]cpu_list2=[]mem_list2=[]data=re.findall(r".*?S  ([\d\.]*)   ([\d\.]*)   .*?",str(readlines),flags=re.M)for i in data:cpu_list.append(i[0])mem_list.append(i[1])for i in cpu_list:cpu_list2.append(float(i.replace("'",'')))for i in mem_list:mem_list2.append(float(i.replace("'",'')))avg_cpu=(round(avg(cpu_list2),2))avg_mem=(round(avg(mem_list2),2))max_cpu=Decimal(max(cpu_list)).quantize(Decimal('0.00'))max_mem=Decimal(max(mem_list)).quantize(Decimal('0.00'))# print(format(avg_cpu*0.01,".0%"))AvgCpu="%.2f%%"%(avg_cpu)AvgMem = "%.2f%%" % (avg_mem)MaxCpu="%.2f%%" % (max_cpu)MaxMem="%.2f%%" % (max_mem)# print(AvgCpu)# print(AvgMem)# print(MaxCpu)# print(MaxMem)return  AvgCpu,AvgMem,MaxCpu,MaxMemdef Read_monkey_report(monkey_report,monkey_report_path=None):#读取monkey 报告import timedt = time.strftime("%Y-%m-%d-%H-%M-%S")report_data=[]flag=""with open(monkey_report,"r") as f:result=f.readlines()# apk_name=result[0]try:# #seed=result[1].split(" ")[1]## status_result = status.group(1)seed=re.search(r"seed=([0-9]+)+",str(result))count = re.search(r"count=([0-9]+)+", str(result))Sleeping=re.search(r"Sleeping for ([0-9]+)+ milliseconds", str(result))AllowPackage=re.search(r"AllowPackage: ([A-Za-z0-9\.]+)", str(result))Dropped_num_group=re.search(r":Dropped: keys=(\d+) pointers=(\d+) trackballs=(\d+) flips=(\d+)",str(result))elapsed_time = re.search(r"elapsed time=(\d+ms)", str(result))Event_percentages_list=[]Event_percentages=re.search(r"'// Event percentages:\\n'\, '//   0: ([-\d\.]*%)\\n', '//   1: ([-\d\.]*%)\\n', '//   2: ([-\d\.]*%)\\n', '//   3: ([-\d\.]*%)\\n', '//   4: ([-\d\.]*%)\\n', '//   5: ([-\d\.]*%)\\n', '//   6: ([-\d\.]*%)\\n', '//   7: ([-\d\.]*%)\\n', '//   8: ([-\d\.]*%)\\n', '//   9: ([-\d\.]*%)\\n', '//   10: ([-\d\.]*%)\\n', '//   11: ([-\d\.]*%)\\n'", str(result))#//# keys = Dropped_num_group.group(1)# pointers = Dropped_num_group.group(2)# seed_ = seed.group(1)count_ = count.group(1)# Sleeping_ = Sleeping.group(1)AllowPackage_ = AllowPackage.group(1)if Event_percentages:for i in range(1,13):Event_percentages_list.append(Event_percentages.group(i))sum=0for num in  Event_percentages_list:persent=float(num.replace("'","").replace("%",""))sum+=persentif sum==100.0:print("")report_data.append("monkey事件百分比:%s\\r\\n"% Event_percentages_list)# report_data.append({"apk_name":apk_name.replace("\n","")})report_data.append("测试包名:%s\\r\\n" %AllowPackage_)report_data.append("点击次数:%s\\r\\n"% count_)## report_data.append({"seed": seed_})## report_data.append({"Sleeping": Sleeping_})if elapsed_time:elapsed_time_ = elapsed_time.group(1)report_data.append("monkey测试时间:%s\\r\\n"%elapsed_time_)# report_data.append({"keys": keys})# report_data.append({"pointers": pointers})injected_num = re.findall(r"Events injected: (\d+)", str(result), flags=re.M)if injected_num:#report_data.append({"monkey执行事件数:": injected_num})report_data.append("")status = re.search(r"// Monkey (finished)", str(result))status_aborted = re.search(r"// Monkey (aborted)", str(result))if status:status_result = status.group(1)result="success"report_data.append("monkey执行结果:%s\\r\\n"%result)flag="finished"elif  status_aborted:status_result = status.group(1)result="failed"report_data.append("monkey执行结果:%s\\r\\n" % result)flag = "error"else:result = "failed"report_data.append("monkey执行结果:%s\\r\\n" % result)flag = "error"try:if injected_num[0]!=count_:# and status.group(1)=="finished" :report_data.append("monkey测试出现错误,点击次数和monkey执行事件数不等,事件没有全部运行完成,请查看对应monkey报告及检查apk是否出现问题")except IndexError as e:print ("injected_num[0]",e)except AttributeError as e:print("in  Read_monkey_report %s"%e)return report_data,flag,injected_num,resultdef run(device,app):# for device in get_device:import timedate = str(time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())))# print("===================%s================================"%device)phone_product, android_version, screen_size=get_device_info(device) #package_name=get_package_name(app)  #com.cookie.testapp  com.cookie.test+  16位monkey_report = "/opt/liming_dir/ldx_project/monkey_dir/" +"%s_laidianxiu_monkey.txt"%devicecpuinfo_file="/opt/liming_dir/ldx_project/cpu_dir/"+"%s_laidianxiu_cpuinfo.txt"%device# 安装应用# install_app(device, app)get_cpuinfu(device, "com.cookie.test+", cpuinfo_file)monkey_test(device, package_name, monkey_report)report_data, flag, injected_num, result = Read_monkey_report(monkey_report, monkey_report_path=None)AvgCpu, AvgMem, MaxCpu, MaxMem=read_cpu_mem_info_data(cpuinfo_file)print(date)print(phone_product,android_version,screen_size)print(package_name)print(AvgCpu,AvgMem,MaxCpu,MaxMem)print(report_data, flag, injected_num, result)report="/opt/liming_dir/ldx_project/display_report/来电秀_%s_兼容性测试报告.log"%phone_productwith open (report,"w")as f :#捕获手机型号是:vivo NEX    android版本: 8.1.0    屏幕分辨率为:1080x2316f.write("项目名称:来电秀app\r\n"+"日期:%s\r\n"%date+"手机型号:%s\r\n"%phone_product+"屏幕分辨率为:%s\r\n"%screen_size+"安装结果:成功\r\n"+"应用消耗平均cpu:%s\r\n"%AvgCpu+"应用占用平均内存:%s\r\n"%AvgMem+"应用消耗最大cpu:%s\r\n"%MaxCpu+"应用占用最大内存:%s\r\n"%MaxMem+"monkey测试结果:%s\r\n"%str(report_data))if __name__ == '__main__':import threadingapp="/opt/liming_dir/ldx_project/laidianxiu.apk "path=os.path.split(os.getcwd())[0]th_list=[]get_device=["dd60ac04","215bc0d","46e8e43f","1797912f","44c7f374"]#["1797912f"]#for device in get_device:# run(device, app)run_th=threading.Thread(target=run,args=(device, app))th_list.append(run_th)for th in th_list:th.start()for th in th_list:th.join()'''adb -s 44c7f374 shell top -n 10 |grep  com.cookie.test+'''# dd60ac04                product:PD1728 model:vivo_X21 device:PD1728
# 215bc0d                 product:whyred model:Redmi_Note_5 device:whyred
#46e8e43f                product:nitrogen model:MI_MAX_3 device:nitrogen
# 1797912f               product:PBAM00 model:PBAM00 device:PBAM00 transport_id:3  OPPO A5
# 44c7f374                product:PD1806 model:vivo_NEX device:PD1806 transport_id:5

monkey自动化测试脚本相关推荐

  1. python怎么写测试脚本语言_手把手带你,用Python写一个Monkey自动化测试脚本!!!...

    一.为什么需要一个测试脚本? 之前讲解了 Android Monkey 命令的使用方式,今天趁着还热乎就手把手用 Monkey 写一个压力测试的脚本.还不了解什么是 Monkey 的,可以看看之前的文 ...

  2. python写自动化测试脚本常见报错_Python Appium自动化测试 MonkeyScript

    Time will tell. 前边讲解的 Monkey 都是随机事件流,Monkey 在手机里像个无头苍蝇一样乱蹦乱跳,那么本章节就教你如何让 Monkey 按指令在手机里闹腾 -- Monkey ...

  3. monkey自定义脚本实践

    monkey专题系列: 1.monkey命令详解 2.android monkey 测试方法实践 上一篇文章monkey测试方法实践中,已经说过monkey隐藏的两个命令,–pck-blacklist ...

  4. Selenium3自动化测试——1. 新建第一个Selenium自动化测试脚本

    在安装好Python.PyCharm和Selenium后,开始进行第一个Selenium自动化测试脚本. 1. 对百度首页进行编写如下代码: from selenium import webdrive ...

  5. python写web自动化_使用Python+selenium实现第一个自动化测试脚本

    原标题:使用Python+selenium实现第一个自动化测试脚本 最近在学web自动化,记录一下学习过程. 此处我选用python3.6+selenium3.0,均用最新版本,以适应未来需求. 环境 ...

  6. python自动化测试脚本怎么编写_编写自动化测试脚本心得---菜鸟入门篇

    编写自动化测试脚本心得 -------- 菜鸟入门篇 本文中将不会讲解 ISEE 的测试原理.不说明 Python 的常用语法.不介绍 OTP 测试平 台的架构, 自动化测试组的牛人们已经为我们编写了 ...

  7. python脚本语言采用声音作为手段_LKJ自动化测试脚本定义及生成技术研究

    LKJ 自动化测试脚本定义及生成技术研究 白鸿钧,张明凯,李冠军,杨清祥 [摘 要] 摘要:为实现对列车运行控制系统软件的自动化测试,在通用脚本语 言的基础上定义专用的脚本语言,讨论专用脚本语言的结构 ...

  8. python自动化测试脚本可以测php吗_python unittest实现api自动化测试_python

    这篇文章主要为大家详细介绍了python unittest实现api自动化测试的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目测试对于一个项目的重要性,大家应该都知道吧,写python的 ...

  9. linux自动化测试脚本,linux iperf3 一键自动化测试脚本

    jerpf iperf3 一键自动化测试脚本: 更新日期:2015年09月06日 联系邮箱:linux_lcl@163.com 个人博客首页:http://990487026.blog.51cto.c ...

最新文章

  1. zabbix 自动注册发现
  2. 《Python 学习手册4th》 第十二章 if测试和语法规则
  3. 新时达二代操作器刷写数据线_新时达380全系一体机快捷调试
  4. Socket网络编程--简单Web服务器(2)
  5. javax.net.ssl.SSLHandshakeException(Cas导入证书)
  6. python程序设计实验教程 翟萍 第五章答案_Python程序设计实验教程
  7. cmd imp导入dmp文件_cmd 导入oracle数据的dmp文件
  8. 大数据预测实战-随机森林预测实战(四)-模型调参
  9. rtc校准算法_webrtc aecd算法解析一(原理分析)
  10. linux操作系统命令及流程图,计算机操作系统与简单命令
  11. Servlet期末复习笔记
  12. 企业之haproxy
  13. 关于手动误删表空间文件出现ora01033解决办法
  14. Android Scroller 滑动机制
  15. 建模实训报告总结_BIM建模实习报告,BIM实训总结1500字
  16. php web helloworld,webim_server.php
  17. 国家新标准上线,妈妈再也不用担心我吃辣条啦!
  18. R语言survival包coxph函数构建cox回归模型、ggrisk包ggrisk函数可视化Cox回归的风险评分图、使用cutoff包基于最小p值法方法计算最佳截断值(基于LIRI基因数据集)
  19. 学大伟业2018-2019学年第二学期《自主招生集训课程》
  20. 绕过CDN查找真实IP方法

热门文章

  1. 网络协议-TCP和UDP最完整的区别介绍
  2. 柿饼UI入门课程第一周作业
  3. bootcamp空间不足_mac安装双系统 提示磁盘上没有足够的可用空间的解决方法
  4. 计算机无法删除ie,ie无法删除怎么办
  5. 那周余嘉熊掌将得队对男上加男,强人所男、修!咻咻! 团队的Beta产品测试报告...
  6. AI面试锦囊|网易互娱AI Lab人工智能研究工程师两面分享
  7. Linux m4a转mp3
  8. Android Framework 记录之一
  9. 【中创算力】第六届优秀员工表彰大会暨四月中创生日会
  10. 大数据的学习需要预先了解哪些基础知识?