腾讯云技术社区-掘金主页持续为你们呈现云计算技术文章,欢迎你们关注!python
做者:樊林android
对于android的开发以及测试人员,对adb命令必定会很熟悉,adb工具可谓android测试的入门神器,安装、卸载、抓log、截图等等包罗万象。不少自动化以及性能工具都必定程度上要依赖adb工具。ios
刚开始接触iOS时,一直但愿iOS有一套相似adb工具的东西,结果都被告知要用itools、ituns类的图形化界面工具。后来通过研究,要在iOS上实现一套类adb工具理论上是没有问题,有不少开源库可使用,因此就作了一套idb出来(目前适用于windows平台),做为iOS的测试的基础工具,主要实现了两个功能。程序员
一、让用户可使用idb对iOS手机进行基础的操做,就如同使用adb操做android手机;shell
二、封装好了一键抓取网络包(生成pcap文件)以及log的方式,提升相应的效率。 windows
完整idb工具下载地址(仅供交流学习):
share.weiyun.com/f28c0e8f6fb… 。微信
第一步:首先经过usbmux技术,和手机创建链接。usbmux是一种能够经过usb管道(也就是一个usb端口)创建多路复用链接的系统。这是一个类TCP系统,经过这种系统,主机的端口号能够和手机中的特定端口号创建链接并通讯。网络
第二步:链接手机的lockdown服务,对应的端口号为62708,而后经过和lockdown服务传输数据,实现相应的功能。这个服务一般只能经过usb端口创建相应的tcp链接(也就是第一步说的usbmux系统)。Lockdown服务能够用来作不少事情,安装应用、查看文件、重启等等。架构
通讯协议从低到高以下:app
一、USB协议:经过usb端口传输多个链接的数据,相似于网络中的数据链路层;
二、usbmuxd协议:打开设备上TCP端口链接,类型于网络中的运输层;
三、lockdownd协议:用于和lockdown服务传输数据,相似于网络中的应用层。
了解到iTunes的原理后,不少人便开始本身开发一些库,实现同样的功能,最有名的就是libimobiledevice是基于C语言实现的,编译配置比较麻烦,学习成本也较高。后来也出了对应的python库,即pymobiledevice。idb就是基于这个python库实现的。
idb架构设计上分为5层:
一、usbmux层:usb驱动层;
二、PlistService层:链接创建层,调用usbmux层,完成链接的创建,示例代码以下:
self.s = mux.connect(dev, 62708);
三、Locdown封装层:封装好基本的lockdwon服务,并完成和手机的配对验证;
四、功能实现层:经过lockdown实现对应的功能,核心示例代码以下:
实现安装功能
self.lockdown.startService("com.apple.mobile.installation_proxy")
实现文件相关功能
self.lockdown.startService("com.apple.mobile.house_arrest")
五、命令行工具封装层:工具的初衷是为了开发一套相似android的adb的工具,这一层主要仿照adb,实现对应命令行参数的解析并调用功能实现层,完成对应的功能。
一、模仿adb的交互方式:adb的便利性以及高效已经获得了你们的普遍承认,因此idb的用法要和adb保持一致,作到在命令行中直接输入idb+对应的命令便可实现对应的功能;
二、具体的实现:工具使用的是python语言开发实现的,而python的运行方式最多见的是 python+脚本文件名,要作到在命令行中直接输入idb实现对应脚本python脚本的运行并实现参数的传递;
最初想到的方案:将python打包成可执行的exe文件,这个操做比较重,并且以后改起来又比较麻烦,同时也不符合python脚本语言的特性,最终抛弃了这种方案。
最终方案:简洁的bat封装(bat是windows自带的批处理语言)。
A、新建一个idb.bat文件,将idb.bat文件所在目录加入Path环境变量后,命令行中输入idb,便可运行对应的idb.bat文件;
B、Python脚本路径设置:最
终须要调用相应的python脚本实现相应的功能,为了保证在任意目录下,都能正常运行。
在idb.bat中设置对应python脚本的绝对路径:目前python脚本和bat脚本在同一个目录下,因此能够用“%~dp0%mypy%”来表示python脚本的绝对路径,“mypy”变量表明对应的python脚本的名称。
C、Bat到python的参数传递:bat脚本中能够用“%*”表示在命令行中收到的参数,能够用这种方式传递参数给python。
具体的实现以下:
在iOS平常测试过程当中,会有一些抓包、抓log的需求,这些在android测试中也比较麻烦,因此在idb开发过程当中,但愿可以将抓网络包、抓log操做尽最大可能简化。
一、交互设计:一条命令开始抓取、Ctrl+C结束、当前目录生成pcap文件以及log文件 。
二、具体实现:
A、命令封装:idb pcap。
B、网络包和log的抓取实现通用的封装:核心实现start和stop两个函数。
start:启动工做线程实现对应的功能,并在工做线程中时刻检测对应的标志位,看是否要结束;
stop:修改标志位为结束,触发工做线程的中止;处理并存储生成的文件。
C、入口函数对Ctrl+C的捕获:当运行python程序时,使用键盘输入Ctrl+C,python程序内部会抛出一个KeyboardInterrupt异常,咱们能够经过捕获对应的异常实现相应的功能。
D、为了方便查看,对应的文件统一以当前的时间命令,并存在在命令行所在的路径。
核心代码实现:
下载地址(仅供交流学习):share.weiyun.com/f28c0e8f6fb… 。
下载对应的zip包,而后解压。
“.”开头的是eclipse工程文件,不用管(能够直接做为pydev工程导入eclipse,仅供交流学习)。
“idb.py”实现idb全部功能的脚本。
“idb.bat”入口函数,方便在命令行中直接经过“idb”命令调用相应功能。
“pymobiledevice_sheldonfan”调用的类库,全部须要的python库都已经放在里面了。
一、支持手机基本操做:重启、锁屏、休眠;
二、支持应用的安装、卸载、查看;
三、支持沙盒目录的查看以及基本的文件操做(iOS10以后出现限制,暂没法完美支持);
四、支持log、网络pcap包的一键抓取。
一、安装python2.7(32位版),并设置环境变量。设置方法以下:
依次打开:计算机——》右键——》属性——》左上角"高级系统设置"——》右下角“环境变量”——》系统变量——》选中“Path”——》点击“编辑”——》将python的目录加进去用";"分割,其余不要变——》点击肯定。
Python目录指的是python的安装目录,默认安装在C:\Python27目录下。Python目录须要包含python的可执行文件,以下图:
二、Windows 7,安装iPhone驱动(检验标准,各类iPhone手机助手可以识别并链接手机);
三、下载完后能够将目录添加到PC的环境变量中,方便在任何地方调用。
若是已经添加了环境变量,直接打开cmd便可。
1.重启手机:输入命令 idb reboot。
二、关机:idb shutdown。
三、让手机休眠:idb sleep //这个命令会让手机进入深度睡眠,usb链接也会断掉;按电源键点亮屏幕,又会正常链接 。
4.安装app(ipa文件):idb install “ipa文件路径”。
五、卸载app:idb uninstall “app的id”(相似于android中的包名)。
六、显示全部的APP:idb listapps //默认显示全部的APP。
七、显示用户安装的APP:idb listapps user。
八、显示系统自带的APP:idb listapps sys。
九、查看系统级文件列表:idb shell //ios使用沙盒环境,默认进入的是系统的图片、书籍音乐,也只能显示这些文件:
十、获取系统文件到本机:idb pull 手机目录 pc目录
手机目录能够经过idb shell命令来查看(就是上一条命令)。
示例:idb pull /DCIM .
将手机中的DCIM目录抓到当前目录(当前目录用“.”表示)。
能够pull单个文件,也能够pull整个目录。
十一、push文件到系统目录idb push “pc文件路径”“手机目录”。
手机目录也是经过idb shell来肯定的(push图片后,手机没法识别,后续会继续优化)。
十二、获取APP沙盒中的文件:idb -p “应用id” pull “ 手机目录”“pc目录”。
示例以下:
idb -p com.tencent.mlife.dailybuild pull Documents .
将应用id为com.tencent.mlife.dailybuild 的应用的Documents 目录,拉到当前目录(用“.”表示)
1三、push文件到app沙盒中:idb -p “应用id” push“pc文件路径”“手机目录”。
1四、idb logcat 抓系统日志,也能够经过idb logcat >mylog.txt重定向到文件。
1五、idb screenshot 截图,这个须要手机装了开发者功能,若是没装的话,能够考虑在手机上按电源键以及home键,而后pull到电脑上。
1六、idb pcap抓包,开始抓包,按Ctrl+C结束,会在当前的cmd所在的目录生成对应的pcap文件以及log文件。
按Ctrl+C结束抓取,提示总流量并在当前目录生成pcap文件以及日志文件(系统日志)。
一、驱动必定要先装好,若是电脑识别不了手机,全部的命令都没法执行;
二、有时候链接不上手机,多是驱动加载问题,能够尝试启动itunes从新安装驱动、重启电脑、重启手机;
三、部分APP的沙盒环境是不能访问的,这个和APP设置有关。通常平常测试的APP(非正式发布的)都容许访问沙盒目录,方便获取相应的文件。可是iOS10增长了对沙盒目录的限制,没法完美支持;
四、目前支持python2.7 32位版,其余版本暂时没法支持(由于有些引用类库的限制)。
想知道更多测试相关干货 请关注咱们的微信公众号——腾讯移动品质中心TMQ:
【有奖讨论】程序员,怎么应对三十岁? 点击查看详情
相关阅读
Web 性能压测工具 ApacheBench(ab)使用总结
手机发烫是为什么—— App 电量测试定位方法
iOS 程序从开发完到上 AppStore 那点事儿
此文已由做者受权腾讯云技术社区发布,转载请注明文章出处
原文连接:cloud.tencent.com/community/a…
获取更多腾讯海量技术实践干货,欢迎你们前往腾讯云技术社区