Macaca MacOs 环境安装配置 macaca 总结记

老马 · 2016年11月29日 · 最后由 老马 回复于 2018年03月21日 · 5030 次阅读

由于公司有 ios 下的 APP 自动化测试需求,所以在虚拟机 Mac 环境下鼓捣了下 macaca 的安装配置

一 安装配置 MacOS 虚拟机


OS X EI Capitan 10.11.4 版本

链接:http://pan.baidu.com/s/1dFtA3C1 密码:fs9c

用的是最新的 VMware Workstation Pro 12.5.2

安装图文参考

http://m.blog.csdn.net/article/details?id=51050770

unlocker208 下载地址

http://download.csdn.net/detail/cekiasoo/9480282

照着以上弄就可以了,都是正确的做法。

设置虚拟机 macos 联网

在安装 MacOS 时候,选择的是桥接方式,但安装完 vmtools 重启后,发现并不能在公司局域网环境联网

于是参考http://www.07net01.com/linux/2016/01/1178321.html

参考以上设置这里为公司网关地址

打开 VMware Workstation Pro 编辑菜单里的 “虚拟网络编辑器” 修改如下

标红处改为你所在局域网的网关地址即可

然后在你安装好的 MacOS 虚拟机设置里

二安装配置 JAVA

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载 jdk-8u111-macosx-x64.dmg

双击安装好后,执行 java -version 显示是可以的

vmacdeMac:~ vmac$ java -version
java version "1.8.0_111"Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)  

但还是要继续配置 JAVA_HOME 环境变量,否则 macaca doctor 会报错

配置 JAVA_HOME 环境变量

sudo vim /etc/profile

末尾追加

#Java Environment Path
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

三安装配置 xcode7.3.1

Xcode7.3.1
下载链接:http://pan.baidu.com/s/1o8nHisU 密码:305h

虚拟机 MacOS 的设置里设置文件夹共享,将下载的 Xcode_7.3.1.dmg 放入共享文件夹下。

双击下载好的 Xcode_7.3.1.dmg,选中 xcode 图标拖拽至右侧的 Applications 即可进行复制安装。

否则双击 xcode 图标启动的是类似虚拟镜像的 xcode。

四安装配置 macaca 相关

nodejs 下载 https://nodejs.org/en/download/

pkg 包方式 node-v6.9.1.pkg

双击下载好的 pkg 即可自行安装,安装好后,我们来看下相关默认配置

vmacdeMac:~ vmac$ node -v
v6.9.1
vmacdeMac:~ vmac$ npm -v
3.10.8
vmacdeMac:~ vmac$ npm config get prefix
/usr/local
vmacdeMac:~ vmac$ npm config get cache
/Users/vmac/.npm
vmacdeMac:~ vmac$ npm config set registry http://registry.npm.taobao.org
vmacdeMac:~ vmac$ npm config get registry
http://registry.npm.taobao.org/  

第一次安装不带 sudo 报了权限错误

带了 sudo 安装后 执行 macaca -v 也报了权限错误

然后卸载掉 sudo npm uninstall macaca-cli -g

设置下该目录的权限为当前登录账号

sudo chown $USER /usr/local/lib/node_modules

过程如下:

再直接用 npm i macaca-cli -g 正常

然后安装了驱动 npm i macaca-ios -g

npm i macaca-electron -g

觉的这种方式总有权限问题,所以最后我卸载掉该 pkg 选择了如下的 tar 包安装方式,这种方式的好处是,绿色,安全,更新维护方便。

建议你也选择 tar 包的安装方式。

tar 包方式 node-v6.9.1-darwin-x64.tar

解压到目录/Users/vmac/nodejs 重命名为 nodejs

配置 nodejs 环境变量

sudo vim /etc/profile

末尾追加

#Nodejs Environment Path
export PATH=$PATH:/Users/vmac/nodejs/bin

source /etc/profile

过程如下:

如此便利用 tar 包安装完 nodejs,安装好后,我们来看下相关默认配置

vmac$ node -v
v6.9.1

vmac$ npm -v
3.10.8

vmac$ npm config get prefix
/Users/vmac/nodejs

vmac$ npm config get cache
/Users/vmac/.npm

vmac$ npm config get registry
https://registry.npmjs.org/

vmac$ npm config set registry http://registry.npm.taobao.org

vmac$ npm config get registry
http://registry.npm.taobao.org/

然后直接用 npm i macaca-cli -g 安装正常

然后安装了驱动 npm i macaca-ios -g

npm i macaca-electron -g

五安装配置 android 环境

下载地址 http://tools.android-studio.org/index.php/sdk

下载 android-sdk_r24.4.1-macosx.zip 解压到

/Users/vmac/android-sdk-macosx

配置 ANDROID_HOME 环境变量

sudo vim /etc/profile

末尾追加

#Android-sdk-macosx Path
export ANDROID_HOME=/Users/vmac/android-sdk-macosx
export PATH=$PATH::$ANDROID_HOME/tools/:$ANDROID_HOME/platform-tools

source /etc/profile

cd /Users/vmac/android-sdk-macosx/tools

./android 启动 sdk manager 下载所需的相关 tools 和 avd 虚拟机

我们需要改下下载的地址为 mirrors.neusoft.edu.cn

然后下载如图所示的相关工具

我们执行下 macaca doctor 看下还缺什么

然后再安装 npm i macaca-android -g 就正常了

六安装配置 homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
vmacdeMac:~ vmac$ brew -v
Homebrew 1.1.2
Homebrew/homebrew-core (git revision a06e; last commit 2016-11-29)

安装 ios-webkit-debug-proxy

看到 macaca doctor 红色的还缺少,那我们来用 brew 安装 ios-webkit-debug-proxy

brew install ios-webkit-debug-proxy

接下来我们再来看看 macaca doctor

全线飘绿。

打完收工,其他的请参考社区内其他帖子。
比如:

Macaca iOS 驱动调整为 USB 通信

Macaca 已支持自动设置开发者信息

Macaca iOS 真机测试

七 app-inspector 真机查看元素设置

7.1 查找 DEVELOPMENT_TEAM_ID

打开任意 xcode 工程,选择 team,我打开的是上一步安装的 macaca-ios 驱动工程下的 webdriverclient 的 WebDriverAgentRunner ,然后选择 Build Settings ,然后找到 Development Team 点击其下右侧的 other,找到下图的 TEAM_ID。TEAM_ID 是一个 10 位数字字母组成的字符串.

(如果你首次打开且未登录 Apple ID 账号的话,此处应该是没有账号的,你可以去 xcode 工具栏,xcode->Preferences 下的 Accounts 栏下添加下您的 Apple ID,这样 xcode 就会为您生成一个您的 TEAM_ID)

7.2 重新安装 app-inspector 即可,通过环境变量将 TEAM_ID 传进去

如果之前已经安装过 app-inspector 请先卸载并清理干净再安装,如下命令

npm uninstall app-inspector -g

npm cache clean 

DEVELOPMENT_TEAM_ID=********** npm i app-inspector -g

7.3 修改 app-inspector 下的 webdriveragent 下的 Product Bundle identifier

需要修改上步安装好的 app-inspector 下的 webdriveragent 具体路径见下图红框
需要修改的有 WebDeriverAgentLib 和 WebDriverAgentRunner 下的 Product Bundle identifier
改为你自己的账号.

这个账号类似如下图:
由于 WebDeriverAgent 这东西是 facebook 开发并签名发布的,这是一种 mac 系开发的签名安全认证机制,所以我们要本地运行它的话要保证和本地账号权限一致,我们修改为了
自己的账号后便有了可以运行它的权限了.这个账号是类似这样的 ,这是我修改后的,有人问怎么改,我不清楚,反正你用你的 apple id 添加到 xcode->Preferences 下的 Accounts,然后 在 Accounts->View Details->iOS Development->Create 如此便创建 iOS Development Singing Identities 该账号了。

如上步骤,接下来就是
连接上你的 iphone 手机,再在 xcode 中 windows->Devices 找到你设备的 identifier 复制下来

然后便是

app-inspector -u  youridentifier

这时会自动向您的手机安装 webdriveragent ,看到安装图标后,您还需要在你的手机设置->通用 找到设备管理添加下该 webdriveragent 的信任,然后停掉当前命令,再次启动 app-inspector -u youridentifier 即可正常安装成功,并自动打开浏览器进行元素查看.

八 macaca-ios 驱动连接真机设置

8.1 安装 usbmuxd

由于 macaca-ios 的升级,我们还需要安装 usbmuxd
请参考 Macaca iOS 驱动调整为 USB 通信

brew install usbmuxd

8.2 同 7.1 步,找到 TEAM_ID

8.3 重新安装 macaca-ios 即可,通过环境变量将 TEAM_ID 传进去

如果之前已经安装过 macaca-ios 请先卸载并清理干净再安装,如下命令

npm uninstall macaca-ios -g

npm cache clean 

DEVELOPMENT_TEAM_ID=**********  npm i macaca-ios -g

8.4 修改 macaca-ios 下的 webdriveragent 下的 Product Bundle identifier

需要修改上步安装好的 macaca-ios 下的 webdriveragent 具体路径见下图红框
需要修改的有 WebDeriverAgentLib 和 WebDriverAgentRunner 下的 Product Bundle identifier
改为你自己的账号

接下来就可以真机跑脚本了,略.

期间 mvn macaca java 工程该传递的 ios 参数都写了 可还是运行期间报了错,如下:

macaca server --verbose
>> request.js:24:12 [master] pid:6284 get remote update info failed.
>> index.js:17:12 [master] pid:6285 webdriver server start with config:
 { port: 3456,
  verbose: true,
  always: true,
  ip: '192.168.66.87',
  host: 'Mac-macacadeiMac.local',
  loaded_time: '2017-01-22 10:09:32' }
>> middlewares.js:17:10 [master] pid:6285 base middlewares attached
>> router.js:127:10 [master] pid:6285 router set
>> webdriver sdk launched
^[[A>> responseHandler.js:11:12 [master] pid:6285 Recieve HTTP Request from Client: method: POST url: /wd/hub/session, jsonBody: {"desiredCapabilities":{"app":"/Users/macaca/svn/macacadev/HuaShengUI/app/HuashengSecurities.ipa.zip","reuse":"3","bundleId":"com.***.***","javascriptEnabled":true,"platformName":"IOS","udid":"************************************","version":"10.2","deviceName":"iPhone 6","autoAcceptAlerts":true},"port":3456,"host":"127.0.0.1"}
>> session.js:47:10 [master] pid:6285 Creating session, sessionId: e18cc523-aeee-4fac-85e9-acb87fa45462.
ios-deploy
>> helper.js:194:12 [master] pid:6285 Unzipping local app form /Users/macaca/svn/macacadev/HuaShengUI/app/HuashengSecurities.ipa.zip
>> responseHandler.js:54:12 [master] pid:6285 Send Error Respone to Client: Error: spawn ios-deploy ENOENT
>> responseHandler.js:60:14 [master] pid:6285 Error: spawn ios-deploy ENOENT
    at exports._errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

  Error: spawn ios-deploy ENOENT
      at exports._errnoException (util.js:1022:11)
      at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
      at onErrorNT (internal/child_process.js:359:16)
      at _combinedTickCallback (internal/process/next_tick.js:74:11)
      at process._tickCallback (internal/process/next_tick.js:98:9)

最后安装了下 ios-deploy 就好了

安装命令:

brew install ios-deploy

希望以上对大家测试 ios 真机有帮助。

更多信息请参考 wiki 汇总

小马的 macaca 入门指引合集
Macaca Ios 真机调试文档

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 13 条回复 时间 点赞

Hi,

I configured all these settings , but it is not showing the installed driver list when running command as "macaca doctor"


博主,这里一直卡在这了。。。怎么解决啊?谢谢!

#2 楼 @tfzhou 不知道 你再说什么 请具体描述下你的问题

#3 楼 @harsayer
执行到这里了,
1.真机跑脚本,怎么弄?
2.终端直接输入 macaca server --verbose,就出现上面那个情况了。

老马 #17 · 2017年02月04日 Author

#4 楼 @tfzhou 你的 macaca 脚本 是 java 还是 nodejs 还是 python 版本的啊 你的截图 我没看出来 macaca server 报什么错了。
参考 https://testerhome.com/wiki/macaca   先去把自己的脚本项目鼓捣好  先调试好样例项目 真机跑下样例项目

老马 关于 Macaca 的并发测试 (iOS) 中提及了此贴 02月20日 09:50
老马 macaca 启动 app-inspector 问题求助 中提及了此贴 03月09日 14:34

请问你的 qq 多少,我有点问题想咨询下

tfzhou 回复

你好请问在么

我操作第七部分
我按了 create 之后,什么都没有发生,如图
,请问谁遇过类似情况,如何解决

老马 Macaca iOS 真机实战 中提及了此贴 03月23日 16:49
和曦 [公告] App Inspector 重磅升级 中提及了此贴 04月05日 16:24

@harsayer 您好,我遇到一个 app-inspector 无法正常工作的问题,
Log 可详参https://testerhome.com/topics/5808 #104 楼
可以帮忙看看吗,谢谢!

@harsayer ,求帮忙🙏
补充信息如下:
虚拟机里可以跑成功,真机不行。

跑模拟器 Xcode Debug 的 log:

2017-04-06 13:47:40.352 XCTRunner[4833:113945] Running tests...
2017-04-06 13:47:48.499 XCTRunner[4833:113945] Continuing to run tests in the background with task ID 1
Test Suite 'All tests' started at 2017-04-06 13:47:48.672
Test Suite 'WebDriverAgentLib.framework' started at 2017-04-06 13:47:48.674
Test Suite 'WebDriverAgentLib.framework' passed at 2017-04-06 13:47:48.674.
     Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test Suite 'WebDriverAgentRunner.xctest' started at 2017-04-06 13:47:48.676
Test Suite 'UITestingUITests' started at 2017-04-06 13:47:48.677
Test Case '-[UITestingUITests testRunner]' started.
    t =     0.00s     Start Test at 2017-04-06 13:47:48.678
    t =     0.00s     Set Up
2017-04-06 13:47:48.685 XCTRunner[4833:113945] Built at Apr  6 2017 11:53:41
2017-04-06 13:47:48.705 XCTRunner[4833:113945] ServerURLHere->http://192.168.199.187:8100<-ServerURLHere
    t =    47.95s     Find the Application "local.pid.4769" 0x6080002a69c0
    t =    47.95s         Snapshot accessibility hierarchy for local.pid.4769

本地访问 server 后返回:

{
  "value" : "Unhandled endpoint: \/ -- http:\/\/192.168.199.187:8100\/ with parameters {\n    wildcards =     (\n        \"\"\n    );\n}",
  "sessionId" : "41A81AA0-6090-4419-9D81-C1EFA27ACD59",
  "status" : 1
}

本地访问 status 返回:

{
  "value" : {
    "state" : "success",
    "os" : {
      "name" : "iOS",
      "version" : "10.3"
    },
    "ios" : {
      "simulatorVersion" : "10.3",
      "ip" : "192.168.199.187"
    },
    "build" : {
      "time" : "Apr  6 2017 11:53:42"
    }
  },
  "sessionId" : "41A81AA0-6090-4419-9D81-C1EFA27ACD59",
  "status" : 0
}

本地访问 inspector 截图:

跑真机时 Xcode Debug 的 Log:

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  Referenced from: /var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/XCTRunner
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
    /private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest: code signing blocked mmap() of '/private/var/containers/Bundle/Application/67D95C0C-0253-4654-A88B-1C646458E939/WebDriverAgentRunner-Runner.app/Frameworks/XCTest.framework/XCTest'
(lldb) 

试过很多方法,现在怀疑是 Xcode 的问题
虽然我的 Xcode 从 8.2.1 升级到了 8.3,iOS 从 10.0.2 升级到了 10.3 和 10.3.1,但都没有解决:(
https://github.com/facebook/WebDriverAgent/issues/429
https://github.com/facebook/WebDriverAgent/issues/521

现在我该怎么办?

老马 执行 macaca 测试过程中提示错误,求助 中提及了此贴 05月11日 17:56


一直卡在这里,也不报错,咋回事

老马 #17 · 2017年09月27日 Author
笑哼 回复

请不要用 sudo 仔细看文中推荐的 tar 包安装 node 的方式,和相关目录的权限设置 都是用的普通登录账号和相关 rwx 权限。

最新的 出来了
https://testerhome.com/topics/12428
你们看这个吧.....

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册