首先,这个monkey的实现,并不是我写的,我只是按照Testerhome上面大神的教程实施的,我只不过来记录一下,自己在实现这个方案时,是如何操作,遇到何种坑,以及是如何解决的。
原帖传送门>>> https://testerhome.com/topics/8025
好了,开始交代我的实施。
实施工具:mac电脑一台,iPhone手机一部;
开发环境:OS X 10.12.3
Xcode 8.3.2
Eclipse for OS X 4.6.3、maven
关于Xcode和eclipse、maven环境的配置、这里就不介绍了,网上一堆教程,现在开始准备Macaca的环境。
一、准备Macaca环境
1、安装usbmuxd
$ brew install usbmuxd
2、安装ios-webkit-debug-proxy
$ brew install ios-webkit-debug-proxy
3、安装ios-deploy
$ npm i ios-deploy -g
4、安装ideviceinstaller
ideviceinstall如果需要用命令行安装的话,使用不了,具体我也没试,既然原作者说了,那就按他建议的来,直接到GitHub上下载源代码到本地,然后编译运行。
ideviceinstall GitHub地址:https://github.com/libimobiledevice/libimobiledevice
4.1、在编译之前,先将设置以下内容到环境变量中:
LD_LIBRARY_PATH=/usr/local/opt/openssl/lib:"${LD_LIBRARY_PATH}"
CPATH=/usr/local/opt/openssl/include:"${CPATH}"
PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig:"${PKG_CONFIG_PATH}"
export LD_LIBRARY_PATH CPATH PKG_CONFIG_PATH
打开终端,输入 $ sudo vim etc/profile ,然后按i进入编辑模式,将以上内容添加到环境变量,然后按esc退出编辑模式,输入 “:wq!”保存并退出。
4.2、编译安装ideviceinstall
打开终端并进入到libimobiledevice工程目录,分别执行:
./autogen.sh
make
sudo make install
5、安装carthage
$ brew install carthage
6、安装macacajs 包括,macaca-cli macaca-ios
$ npm install macaca-cli@1.2.2 -g
$ npm install macaca-ios@1.0.66 -g
原文没有指定安装版本,但实际上隐藏着一个大坑,因为Macaca在近期做了重构,现在新版本是2.几的版本了,但是iOS monkey作者并没有支持到Macaca的新版本(我之前就毫无意外地掉这个坑了,最后通过跟Macaca作者和iOSmonkey原文作者沟通,才晓得),所以如果想要使用这套环境,要么就等iOS monkey的作者支持Macaca最新版本,要么就安装旧版本了。
好了,安装完成之后,检测macaca环境,确保无报错(至少iOS的环境应该都是好的了)
$ macaca doctor
检查无误之后,到此,我们的Macaca环境就完事了。
二、WebDriverAgent项目重签名
2.1、下载WebDriverAgent
GitHub地址:https://github.com/facebook/WebDriverAgent
2.2、WebDriverAgent项目重签名
2.2.1、使用xcode打开保存在本地的WebDriverAgent项目,在项目资源列表点击工程文件、然后在TARGETS上,分别点中那五个targets,然后在general或者build setting上修改bundle ID并选择签名的证书,bundle ID修改就是把原来的“facebook”字样修改掉,比如换成什么abc都行,只要后面选择证书的时候,能够不报错就行。如下图1:
记得是5个都要改,一个个检查吧。完了之后,打开终端,进入WDA工程目录,执行
$ ./Scripts/bootstrap.sh
build完成以后,之前以为就可以完成WDA的配置了,就进入下一步了,然后,只是又不知不觉掉了一个坑而已,好了,继续往下看往下搞。
2.2.2、Xcode->file->Open Quickly,输入/usr/local/lib/node_modules/macaca-ios/node_modules/webdriveragent/WebDriverAgent/WebDriverAgent.xcodeproj ,回车
这里会发现,在这个路径下,又有一个WDA工程,然后查看工程设置,发现bundle ID和签名都没修过过,按照2.2.1步骤里面修过bundle ID 和选择签名,完成之后,才是真的完成了WDA的配置。
三、编译、执行iOS Monkey
3.1、编译iOS Monkey
iOS Monkey开源工程下载地址:https://github.com/baozhida/iosMonkey
下载到本地后,由于这个开源项目是maven工程,所以编译之前先得把maven环境弄好,这里不再赘述。
终端进入到工程目录,执行
$ maven install
结果,发现报错了!!!Failed to execute goal on project iosMonkey: Could not resolve dependencies for project iosMonkey:iosMonkey:jar:1.0: Failure to find macaca.webdriver.client:macacaclient:jar:2.0.4 inhttps://repo.maven.apache.org/maven2was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
看一下工程上的Maven Dependencies,没有找到macacaclient-2.0.4.jar这个jar包,update maven工程,也仍然没有下载得回来,但是pom.xml上,是明确配置有这个依赖的;网上一查,原来是macaca在maven默认的仓库下架了,所以会提示找不到,当时尝试修改maven的settings.xml,使用阿里的镜像,但是好像并没有生效,搞不懂为啥,尝试多次仍然搞不定之后,就换了个思路,就是把jar包下载回来,从本地导入。
到 http://jcenter.bintray.com 下载macacaclient 2.0.1版本,然后先修改pom.xml上macacaclient的配置,即把版本号修改成2.0.1就好(这里说一下为什么要用2.0.1版本,2.0.1是原作者使用的版本,前面也说过,macaca进行了重构,使用最新版本可能会有隐藏的坑,为了别再掉入类似的坑,还是直接选择原作者当时使用的版本了),然后,执行:
$ mvn install:install-file -DgroupId=macaca.webdrivier.client -DartifactId=macacaclient -Dversion=2.0.1 -Dfile=你的路径/macacaclient-2.0.1.jar -Dpackaging=jar -DgeneratePom=true
这时候,我们再看一下工程目录下的Maven Dependencies,已经有macacaclient-2.0.1.jar了,这时候再次终端执行 mvn install 就可以编译成功了,target下生成iosMonkey-1.0.jar。
3.2、执行iOS Monkey
先在xcode把WDA跑起来:xcode->produck->test
终端进入iOS Monkey工程目录,执行
$ macaca server --verbose
新开另外一个终端窗口,同时也进入iOS Monkey工程目录,执行
$ java -jar [iosMonkey.jar Path] -u [设备的UDID] -b [测试App的BundleID] -port [macaca服务端口,可选] -proxyport[usb代理端口,可选]
设备的udid可以通过iTunes或者iTools获取,服务端口和代理端口可以不设置,使用默认的就好了,命令执行之后,应该就能跑起来了,另外,如果需要登录,建议先手动登录成功后,再执行monkey。效果如下: