Macaca Macaca 实现 IOS Monkey 测试 (支持 macaca2.x 版本)

utopia · 发布于 2017年03月17日 · 最后由 dreamer.li 回复于 2017年08月15日 · 5365 次阅读
本帖已被设为精华帖!

统一回复

macaca新版替换了facebook的wda。我正常安装新版macaca套件之后,无需坐任何修改,这个项目还可以使用

安装新版macaca遇到不少问题

必须的步骤:升级macOS到10.12.5 ,升级Xcode搭配8.3.3,安装新版carthage,安装 gradle

MACdeMacBook-Pro:XCTestWD MAC$ macaca doctor

  macaca-doctor version: 2.0.1


  Node.js checklist:

  node env: /usr/local/bin/node
  node version: v6.9.4

  iOS checklist:

  Xcode Command Line Tools is ready, version: 2347.
  xcodebuild version: 8.3.3
  iproxy[usbmuxd] is installed at: `/usr/local/bin/iproxy`
  ios_webkit_debug_proxy is installed at: `/usr/local/bin/ios_webkit_debug_proxy`
  carthage is installed, version: 0.23.0

  Android checklist:

  JAVA version is `1.8.0_40`
  JAVA_HOME is set to `/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home`
  ANDROID_HOME is set to `/Users/MAC/Library/Android/sdk`
  Platforms is set to `/Users/MAC/Library/Android/sdk/platforms/android-25`
  ADB tool is set to `/Users/MAC/Library/Android/sdk/platform-tools/adb`
  gradle is installed, version: 4.0

  Installed driver list:

  android: 2.0.23
  ios: 2.0.18

说明

苹果去掉了原有的测试框架改用XCTest之后,一直等大神放出原生的iosmonkey。但是入侵式的方式可能开发不会接受。前几天发现一个项目是通过macaca实现的,尽管效率比起原生模式的monkey差很多,总比没有好。试用了几天,基本实现monkey的功能。能够模拟长时间操作App的场景,但是无法对App进行Monkey压力测试。

从0到1非常困难,从1到2就简单很多,项目是复制来的,修复了一些bug,修改了一点逻辑。原版在https://github.com/hujiachun/iosMonkey

我改版的项目在https://github.com/baozhida/iosMonkey

现在客户端是使用同步的方式处理发送的事件,效率稍低

经实测:

iPhone 6plus 10.2.1,每分钟可以执行大约40次事件;

iPhone 7 10.2,每分钟可执行大约60次事件;

通过修改代码实现了异步http请求,发送事件的请求数量可以大幅提升,但是很多请求会阻塞,没有执行,实际效果不好,遂放弃。

更新

2017.3.17: 原版本呼起app的指令是当成事件,按照一定的频率执行,不管现在是否是在测试APP页面都会执行。现在改为守护进程的模式,只有当前页面跳出测试APP时候才会执行打开APP的指令。

2017.4.5:

1.修复app守护进程的bug,由于时间问题导致的

2.增加返回homescreen的事件,事件概率是2%,返回手机主页5s后重新打开app

0、简介

  • 1.修改了原版的构建方式,maven bulid(其实没看懂之前构建的配置)

  • 2.解决了idevicedebug 命令呼起app无效的问题

  • 3.根据app实际情况,修改了特殊点的处理(在有些页面,点击固定的位置才能返回,不是通用的右上角)

  • 4.如果不修改直接使用,直接使用target下面的jar包,如果实现自己的方法,需要重新编译

1、功能

  • 1.可以模拟android monkey执行的方式,在IOS APP页面点击 滑动操等作,支持 ios 9和ios10

  • 2.支持多台ios一起执行

  • 3.计划保存截图(未完成)

  • 4.计划自动收集crash日志(未完成)

2、准备macaca环境

安装usbmuxd

$ brew install usbmuxd

安装ios-webkit-debug-proxy

$ brew install iso-webkit-debug-proxy

安装ios-deploy

$ npm i ios-deploy -g

安装ideviceinstaller

$ brew install ideviceinstaller

编译libimobiledevice

libimobiledevice需要自己编译,证实直接安装的不能用

https://github.com/libimobiledevice/libimobiledevice

下载到本地

Before building, try setting:

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
You might want to add that to your .bash_profile.

CPATH and PKG_CONFIG_PATH are for compiling. LD_LIBRARY_PATH is for runtime. See also https://gist.github.com/samrocketman/70dff6ebb18004fc37dc5e33c259a0fc

Then to compile run:

./autogen.sh
make
sudo make install

安装carthage

$ brew install carthage

安装macacajs包括,macaca-cli macaca-ios

npm install macaca-cli -g

npm install macaca-ios -g

MAC全局安装的路径分别如下:

/usr/local/lib/node_modules/macaca-cli
/usr/local/lib/node_modules/macaca-ios

检测macaca环境,无报错

$ macaca doctor

3、WebDriverAgent项目重签名

按照项目

https://github.com/baozhida/MacacaAutomation

操作项目重签名

4、帮助命令

如果需要多个iOS设备一起执行,需要指定 proxyport ,同时macaca使用不同的端口

$ java -jar iosMonkey-1.0.jar -h
-u:设备的UDID
-b:测试App的Bundle
-port:macaca服务的端口,默认3456
-proxyport:usb代理端口,默认8900

5、执行iosMonkey

开一个窗口执行

$ macaca server --verbose

在一个新窗口执行

$ java -jar [iosMonkey.jar Path] -u [设备的UDID] -b [测试App的BundleID] -port [macaca服务端口,可选] -proxyport[usb代理端口,可选]

6、修改源码重新打包方法

如果需要源码实现自定义的功能,在项目目录下执行

$ mvn assembly:assembly

最后提示如下,标示打包成功,target下生成iosMonkey-1.0.jar,可以使用最新的包

INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.350 s
[INFO] Finished at: 2017-03-06T17:01:30+08:00
[INFO] Final Memory: 20M/324M
[INFO] ------------------------------------------------------------------------
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 78 条回复
798276

@xdf
Macaca又多一个应用场景

@Lihuazhang
看了你的SwiftMonkey。感觉很强大,但是不熟悉ios相关语言😁

2457

@utopia 高产,我得试试,标题有些错误改下

110

赞,你这个好

798276
2457xdf 回复

已改。非原创。只是优化

110 Lihuazhang 将本帖设为了精华贴 03月17日 23:14
4442

赞,学习啦~

—— 来自TesterHome官方 安卓客户端

104

不错 梳理的挺清楚 上个二维码我来打赏

13930

好赞,是我一直期待的东西,干货满满

798276
104seveniruby 回复

已加二维码☺ ☺ ☺

2457

我也给你打赏,期待更多好文

798276
2457xdf 回复

太激动了,感谢

7555

@utopia 确实不错 我也打赏

7555

@utopia ideviceinstaller 这个开源地址下的东西 能给解释下吗 我看macaca好多都是这个github地址下的 比如 usbmuxd。
libimobiledevice 这东西是个连接驱动吧? 以前弄ubuntu 连接ios手机 好像弄过这东西 今天看了这个github地址才知道 。还有 能解释下 用的这些 usbmuxd ios_webkit_debug_proxy ios-deploy carthage 都主要负责在你的框架里干什么事么?

798276
7555harsayer 回复

这些都是依赖的工具

说下我明确知道的吧,都是在使用过程中遇到问题或者疑问,自己查询资料得到的

有误,更新

ideviceinstaller是单独的一个项目,不是在libimobiledevice工具套件里面的

libimobiledevice

在windows上大家可以使用iTunes来与iPhone进行通信,但是Linux上没有这类的官方软件,所以一些爱好者就破解了iTunes的通信协议,然后在Linux上实现了该协议,也就是libimobiledevice

可以到官网去看详细的介绍 http://www.libimobiledevice.org/
很多ios助手应该是依赖这个的。

简单说是可以操作ios手机的命令行工具,iTunes上实现的功能,通过命令行也可实现。

mac上安装了之后有很多命令行工具。这是一个工具套,从名称大概能知道是做什么,不明确的直接加 -h 查看帮助,很简单。

本项目用到了ideviceinstaller idevicesyslog idevicedebug(这个是打开app用的) ,后期打算结合 idevicescreenshot 和 idevicecrashreport 自动分析crash日志。

-rwxr-xr-x    1 root  admin      9804  3  8 12:51 idevice_id
-rwxr-xr-x    1 root  admin     43316  3  8 12:51 idevicebackup
-rwxr-xr-x    1 root  admin     57448  3  8 12:51 idevicebackup2
-rwxr-xr-x    1 root  admin     27952  3  8 12:51 idevicecrashreport
-rwxr-xr-x    1 root  admin     14552  3  8 12:51 idevicedate
-rwxr-xr-x    1 root  admin     16292  3  8 12:51 idevicedebug
-rwxr-xr-x    1 root  admin     23196  3  8 12:51 idevicedebugserverproxy
-rwxr-xr-x    1 root  admin     14976  3  8 12:51 idevicediagnostics
-rwxr-xr-x    1 root  admin      9376  3  8 12:51 ideviceenterrecovery
-rwxr-xr-x    1 root  admin     28404  3  8 12:51 ideviceimagemounter
-rwxr-xr-x    1 root  admin     22244  3  8 12:51 ideviceinfo
lrwxr-xr-x    1 MAC   admin        55  7 21  2016 ideviceinstaller -> ../Cellar/ideviceinstaller/1.1.0_2/bin/ideviceinstaller
-rwxr-xr-x    1 root  admin      9828  3  8 12:51 idevicename
-rwxr-xr-x    1 root  admin     14772  3  8 12:51 idevicenotificationproxy
-rwxr-xr-x    1 root  admin     31988  3  8 12:51 idevicepair
-rwxr-xr-x    1 root  admin     27604  3  8 12:51 ideviceprovision
-rwxr-xr-x    1 root  admin     14464  3  8 12:51 idevicescreenshot
-rwxr-xr-x    1 root  admin     14880  3  8 12:51 idevicesyslog```

包括上面的ideviceinstaller,这个是命令行安装卸载 app用的 ideviceinstaller 是单独安装的,原文中已经说明

devicescreenshots截屏的,idevicesyslog查看系统日志的,idevicecrashreport是获取crash日志的。还有备份,恢复手机系统的等等。

具体的使用方式查看帮助

MACdeMacBook-Pro:iosMonkey-master MAC$ ideviceinstaller -h
Usage: ideviceinstaller OPTIONS
Manage apps on iOS devices.
  -u, --udid UDID   Target specific device by its 40-digit device UDID.
  -l, --list-apps   List apps, possible options:
       -o list_user - list user apps only (this is the default)
       -o list_system   - list system apps only
       -o list_all  - list all types of apps
       -o xml       - print full output as xml plist
  -i, --install ARCHIVE Install app from package file specified by ARCHIVE.
                        ARCHIVE can also be a .ipcc file for carrier bundles.
  -U, --uninstall APPID Uninstall app specified by APPID.
  -g, --upgrade ARCHIVE Upgrade app from package file specified by ARCHIVE.
  -L, --list-archives   List archived applications, possible options:
       -o xml       - print full output as xml plist
  -a, --archive APPID   Archive app specified by APPID, possible options:
       -o uninstall - uninstall the package after making an archive
       -o app_only  - archive application data only
       -o docs_only - archive documents (user data) only
       -o copy=PATH - copy the app archive to directory PATH when done
       -o remove    - only valid when copy=PATH is used: remove after copy
  -r, --restore APPID   Restore archived app specified by APPID
  -R, --remove-archive APPID  Remove app archive specified by APPID
  -o, --options     Pass additional options to the specified command.
  -h, --help        prints usage information
  -d, --debug       enable communication debugging

usbmuxd

是USB和ios手机通信的工具,USB通信代替WIFI
webdriveragent项目中有明确说明
https://github.com/facebook/WebDriverAgent/wiki/Common-Issues
截图:

iproxy详细介绍:

http://iphonedevwiki.net/index.php/SSH_Over_USB

macaca使用iproxy的帖子:

Macaca iOS 驱动调整为 USB 通信 https://testerhome.com/topics/6314

3253

你好,我照着配了一下,运行时候macaca server处报:BundleId com.apple.test.WebDriverAgentRunner-Runner does not exist.导致monkey无法进行
但是在重签名的时候我并没有将Bundleld改成com.apple.test.WebDriverAgentRunner-Runner
想请教一下这边是我漏改了哪出造成的问题?

798276

没有成功安装wda吧,这个id不需要改
这个属于如何配置wda,很多帖子说的很详细

96
3253micky_jw 回复

我也是这个问题。。。但是WDA单独是可以test到真机的,求解

8136

http://www.akblog.cn/2017/02/11/macOS-Sierra%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85libimobiledevice/ 安装make时 报各种环境的错误 这里有详细的介绍怎么解决

96

给力!真的能用,赞

15498

ideviceinstaller iOS10 不需要了把?

798276
15498mamian 回复

都需要的,你知道代替的方案么

15498
798276utopia 回复

我刚刚测试的时候,没有编译这个,成功调起了

798276
15498mamian 回复

安装wda不用这个,是直接xcodebuild安装的,安装卸载测试APP用这个,这个是macaca依赖的,也可以提前安装好,不用macaca指令安装

3253
798276utopia 回复

问题已经解决,感谢。

16087

正在寻找ios monkey的方案

96

自定义功能是在工程的java类里面修改代码,然后目录下mvn assembly:assembly
显示build failure

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 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]

咋回事?求解

96


报这个错,何解?

798276
32rolex_sky001 回复

是横线,不是下划线,名称已经更正,谢谢提出

798276
32pieceone 回复

看看仓库里有没有macacaclient的jar包

96
798276utopia 回复

果然,哈哈。感谢

96
798276utopia 回复

没有,下载不到2.0.4版的macaca-client

798276
32pieceone 回复

http://jcenter.bintray.com 可以手动下载

96
798276utopia 回复

下载了,也写入到pom里面了,但工程里的pom还是报错,影响打包不?

96

请教,这一段是怎么设置的?

798276
32pieceone 回复

过会应该就好了,清下缓存

798276
32rolex_sky001 回复

设置环境变量

96
798276utopia 回复

重新写了个dependency就好了~
期待更多的monkey event,锁屏/HOME等😁

2457

@utopia HOME可以用keys实现

96

请教下,我执行macaca doctor没有报错,并且服务已经起起来了,

但是执行iosMonkey.jar的时候报错

请问是什么问题呢

8136

已经解决问题了

43楼 已删除
96

12deMacBook-Pro:libimobiledevice Test002$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make all-recursive
Making all in common
CC debug.lo
In file included from debug.c:36:
../src/idevice.h:30:10: fatal error: 'openssl/ssl.h' file not found
#include
^
1 error generated.
make[2]: *** [debug.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

没人遇到这个问题吗?

798276
2457xdf 回复

homescreen事件已经添加

96
32Dsh.R 回复

我也遇到了这个问题,请问解决了吗

798276
32Dsh.R 回复

日志很明显,端口被占,换了一个

798276
32rolex_sky001 回复

服务端口要对应

13930
32pieceone 回复

如何重写的?我这边有同样的问题

6628

@utopia
1.使用这套测试工具,有无跑了多少小时,出现多少次crash的报告自动整理出来呢?
2.怎么才能让monkey跑出来的日志自动保存下来?
3.这套monkey 测试的脚本,假定程序不会闪退,脚本最多能坚持持续运行多少小时?

6628

另外,通过homebrew安装ios-deploy会报错,建议通过npm进行安装。

798276
6628zhangqi4mvp 回复
  1. 回归测试的几次都试过晚上跑,第二天发现执行 1、2千次事件就失败了,有bug,也一直在优化,git时不时就更新,真正的APP的crash没有跑出来,我司的iosapp还是比较稳健的,而且ios crash是不容易复现的(另一套Android monkey 每次跑出很多crash)。倒是wda经常crash,不稳定。自动解析crash日志的难度比较大, 还没做好。
  2. 保存日志应该不难,暂时没做
  3. 最长的一次跑了近3个小时,5千次事件(iPhone 6p macaca有时响应很慢,猜测和app本身和wda有关,wda多次出现crash),macaca执行事件异常,退出了
798276 utopia 关闭了讨论 04月12日 17:13
798276 utopia 重新开启了讨论 04月12日 17:13
798276
6628zhangqi4mvp 回复

我最新也用npm安装了 ios-deploy 谢谢提醒,已更新

96
13930Test_Sir 回复

macacaclient的依赖删除,保存,再写一遍。。。然后就不报错了

13930

python没有driver.keys()类似得方法,所以不能使用home按键.
python版基本搞定

12803

返回404,要怎么处理啊?

The command executed successfully.
Response content:{"value":{"width":375,"height":667},"sessionId":"f1c775ba-37b1-4c9a-a099-1e66104ab04b","status":0}
The command executed successfully.
Response content:{"value":{"width":375,"height":667},"sessionId":"f1c775ba-37b1-4c9a-a099-1e66104ab04b","status":0}
The command executed successfully.
sending Tap Event : Tap->(212.0, 37.0)
404
Response content:Not Found
请确认参数配置,需要帮助请输入 java -jar iosMonkey.jar -h
ERROR信息com.alibaba.fastjson.JSONException: syntax error, pos 3, json : Not Found
60楼 已删除
96
12803melody902 回复

是很奇怪啊,我也遇到了,就是发了一个事件流,恰好跳出被测app,然后没有response,就挂了

96

我遇到一个问题,测试没多久就跳出app了,然后就一直没有跳回到被测的app。都是下面这种情况

798276
32odc_M 回复

能在补充一点日志么,正常情况下,idevicedebug会自动呼起测试app

10690

作者好,这边遇见了不能卸载的问题,是和签名有关吗

responseHandler.js:54:12 [master] pid:12428 Send Error Respone to Client: Error: 2017-06-06 11:39:46.141 ios-deploy[12444:115473] [ !! ] [ ERROR ] Could not uninstall package with bundle id XCTestWD.XCTestWD

responseHandler.js:60:14 [master] pid:12428 Error: 2017-06-06 11:39:46.141 ios-deploy[12444:115473] [ !! ] [ ERROR ] Could not uninstall package with bundle id XCTestWD.XCTestWD

at ChildProcess. (/usr/local/lib/node_modules/macaca-ios/node_modules/ios-device/lib/helper.js:46:17)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:194:7)
at maybeClose (internal/child_process.js:899:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)

Error: 2017-06-06 11:39:46.141 ios-deploy[12444:115473] [ !! ] [ ERROR ] Could not uninstall package with bundle id XCTestWD.XCTestWD

at ChildProcess. (/usr/local/lib/node_modules/macaca-ios/node_modules/ios-device/lib/helper.js:46:17)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:194:7)
at maybeClose (internal/child_process.js:899:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)

798276
10690farawaytarget 回复

这是最新版的macaca了,我还没正式使用过😂 😂 😂

10690
798276utopia 回复

期待哦,小白只有等你们写好再试了~😅 😅

Ba19ad
10690farawaytarget 回复

WDA不用了。打开该路径下的XCTestWD并修改签名。

96

大神,请教一下,我这边服务可以启动成功,在运行之后,也收到了请求,但是后面还是出错了,搞不懂啥原因,麻烦帮看一下
服务端的日志:

index.js:18:12 [master] pid:14196 webdriver server start with config:
{ port: 3456,
verbose: true,
always: true,
ip: 'xxx',
host: 'xxx',
loaded_time: '2017-06-14 14:41:15' }
middlewares.js:17:10 [master] pid:14196 base middlewares attached
router.js:127:10 [master] pid:14196 router set
webdriver sdk launched
responseHandler.js:11:12 [master] pid:14196 Recieve HTTP Request from Client[2017-06-14 14:41:24]: method: POST url: /wd/hub/session, jsonBody: {"desiredCapabilities":{"proxyPort":8900,"reuse":3,"bundleId":"cn.xxx","platformName":"ios","udid":“xxx","autoAcceptAlerts":true},"port":3456,"host":"127.0.0.1"}
session.js:47:10 [master] pid:14196 Creating session, sessionId: 6a54886d-4ac3-43d1-bb1b-0ae8d6ed6107.
ios-deploy
macaca-ios.js:240:12 [master] pid:14196 App "xxx" is already installed.
xctest-client.js:52:14 [master] pid:14196 project path: /usr/local/lib/node_modules/macaca-ios/node_modules/xctestwd/XCTestWD/XCTestWD.xcodeproj
macaca-ios.js:158:10 [master] pid:14196 {
"bundleId": "xxx",
"platformName": "ios"
}
macaca-ios.js:160:10 [master] pid:14196 Trying to start xctestwd server...
BundleId XCTestWD.XCTestWD does not exist.
xctestwd start with port: 8900
xctest-client.js:224:14 [master] pid:14196 xcode version: 8.3.2
XCTestWD version: 1.0.33
xctest-client.js:172:14 [master] pid:14196 xcodebuild: error: Unable to find a destination matching the provided destination specifier:
{ id:xxx }

Unsupported device specifier option.
The device “My Mac” does not support the following options: id
Please supply only supported device specifier options.

Available destinations for the "XCTestWDUITests" scheme:
{ platform:iOS, id:xxx, name:“hdcs”的 iPhone }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPad Air }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPad Air 2 }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPad Pro (9.7 inch) }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPad Pro (12.9 inch) }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 5 }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 5s }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 6 }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 6 Plus }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 6s }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 6s Plus }
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone 7 }
{ platform:iOS Simulator, id:xx, OS:10.3, name:iPhone 7 Plus }x
{ platform:iOS Simulator, id:xxx, OS:10.3, name:iPhone SE }

Ineligible destinations for the "XCTestWDUITests" scheme:
{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }

xctest-client.js:173:14 [master] pid:14196 please check project: /usr/local/lib/node_modules/macaca-ios/node_modules/xctestwd/XCTestWD/XCTestWD.xcodeproj
xctest-client.js:255:14 [master] pid:14196 killing deviceLogProc pid: 14205
xctest-client.js:260:14 [master] pid:14196 killing runnerProc pid: 14208
xctest-client.js:266:14 [master] pid:14196 killing iproxyProc pid: 14207
xctest-client.js:183:14 [master] pid:14196 xctest client exit with code: 70, signal: null
xctest-client.js:145:16 [master] pid:14196 devicelog exit with code: null, signal: SIGKILL
xctest-client.js:247:14 [master] pid:14196 Fail to start xctest: undefined
responseHandler.js:54:12 [master] pid:14196 Send Error Respone to Client: undefined

InternalServerError: Internal Server Error
at Object.throw (/usr/local/lib/node_modules/macaca-cli/node_modules/koa/lib/context.js:91:23)
at Object.module.exports (/usr/local/lib/node_modules/macaca-cli/node_modules/webdriver-server/lib/server/responseHandler.js:57:17)
at module.exports.throw ()
at onRejected (/usr/local/lib/node_modules/macaca-cli/node_modules/co/index.js:81:24)
at process._tickCallback (internal/process/next_tick.js:109:7)

xctest-client.js:211:14 [master] pid:14196 iproxy exit with code: null, signal: SIGKILL

执行monkey的日志:
2017-06-14 14:42:27 Response:Internal Server Error


请在命令行输入 macaca server --verbose 启动服务


请确认参数配置,需要帮助请输入 java -jar iosMonkey.jar -h
ERROR信息java.lang.NullPointerException
=======启动app守护进程=======

日志上涉及隐私的信息我手动改掉啦,真心求助大神帮忙定位下到底什么原因,万分感谢!

798276
32abcdeuck 回复

这是最近的macaca版本吧,发帖时候还是老版本,新的还没试呢

96
798276utopia 回复

应该是的,那这个测试方案,支持到哪个版本?我换旧版本试试。

96
798276utopia 回复

作者你好,我刚才试了下Macaca1.2.2版本,然后iOSmonkey依赖macacaclient1.0.48.jar,还是出一样的错误呢,怎么破?

798276
32abcdeuck 回复

Macaca. 1.2.2
Android 1.1.34
iOS 1.0.66
Macaca client 2.0.1
当时是这样的配置
你说一模一样的报错,你用的不是老版本,老版不可能有xctestwd这样的信息

96
798276utopia 回复

$ macaca doctor


  • version 1.2.2 is outdate *
  • run: npm i -g macaca-cli@2.0.4 * ************************************

More information: https://macacajs.github.io/changelog.html

macaca-doctor version: 1.0.28

Node.js checklist:

node env: /usr/local/bin/node
node version: v7.10.0

iOS checklist:

Xcode is installed at: /Applications/Xcode.app/Contents/Developer
Xcode Command Line Tools is ready, version: 2347.
iproxy[usbmuxd] is installed at: /usr/local/bin/iproxy
ios_webkit_debug_proxy is installed at: /usr/local/bin/ios_webkit_debug_proxy

Android checklist:

JAVA version is 1.8.0_131
JAVA_HOME is set to /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
ANDROID_HOME is not set

Installed driver list:

android: 2.0.22
ios: 2.0.15

现在用的版本都跟你的一样,macacalient也是用2.0.1的,然后还真的是同样的错误,是不是我用的最新的wda导致的呢?

96

作者好,我在跑这个测试的时候,遇到了一个调不起app的问题,而且对app的bundle ID有问题,明明已经是正确的bundle ID了,但是说不是,请看日志

The command executed successfully.
---EVENT执行了:45次---
sending Event : Submit->(211,565)
==当前启动的APP bundleid是<正确的app bundle ID>,非测试APP,重新呼起测试APP====
==当前启动的APP bundleid是<正确的app bundle ID>,非测试APP,重新呼起测试APP====
==当前启动的APP bundleid是<正确的app bundle ID>,非测试APP,重新呼起测试APP====
==当前启动的APP bundleid是<(null)>,非测试APP,重新呼起测试APP====
200
Response content:{"sessionId":"81255d3a-aff4-4de1-a0ae-38034883a61b","status":0,"value":null}
The command executed successfully.
---EVENT执行了:46次---
sending Event : Content->(283,266)
==当前启动的APP bundleid是<正确的bundle ID>,非测试APP,重新呼起测试APP====
200
Response content:{"sessionId":"81255d3a-aff4-4de1-a0ae-38034883a61b","status":10,"value":{"message":"An element command failed because the referenced element is no longer attached to the DOM."}}
An element command failed because the referenced element is no longer attached to the DOM.

D754b7

@utopia 请问有在进行crash与截图部分的实现吗?

798276
32abcdeuck 回复

==当前启动的APP bundleid是<正确的bundle ID>,非测试APP,重新呼起测试APP====

这个实时的分析系统日志,不是非常的实时,有延时,应该是之前跳出app,检测到才提示的

{"sessionId":"81255d3a-aff4-4de1-a0ae-38034883a61b","status":10,"value":{"message":"An element command failed because the referenced element is no longer attached to the DOM."}

app可能是出现crash了,目前crash之后,macaca服务就异常了

798276
D754b7Only7 回复

并没有实现,现在忙其他的事情,不怎么有时间搞这个了

96

现在用新版的macaca,也是报错,楼主嘛时候更新呢?

3206 xiaoluosun IOS Monkey 扩展了几个小功能 中提及了此贴 06月20日 20:07
96
32rolex_sky001 回复

../src/idevice.h:30:10: fatal error: 'openssl/ssl.h' file not found
你的问题解决了吗 ?

798276

统一回复,支持macaca2.x版本,出现错误的原因不在iosmonkey这个项目,原因主要是在安装macaca以及XCTestWD的配置等原因,这类问题我也没法答复,请自行搜索答案,或者 到git上提报问题。

83楼 已删除
84楼 已删除
85楼 已删除
A7ed86

你好,这个运行会产生一些什么日志之类的东西吗。跑的时候,发现系统占用内存一直在变大,每分钟0.01Gb的速度增长

798276
A7ed86dreamer.li 回复

wda 时期,每步操作wda都会有记录和截图,所以会存储空间会一直增长,时间久了几十上百G的空间也会占满,
我写了定时脚本,自动删除
目前XCTestWD版本,没关注这个情况

A7ed86

运行的时候,xctest crash很频繁,有人在关注哈这个问题吗

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