开源测试工具 fastmonkey 自我扫盲贴

yxys01 · 发布于 2017年08月24日 · 最后由 pacerron 回复于 2017年11月17日 · 3753 次阅读
本帖已被设为精华帖!

基于 XCTestWD,swiftmonkey 二次开发,实现无需插桩的 iOS monkey 自动化工具 fastmonkey

优势

无需插桩!
高效率,每秒4-5个action!
轻量极简!

原理

先致敬两个开源工具;

1.swiftmonkey
       https://github.com/zalando/SwiftMonkey
       因其直接使用了 苹果的私有api 如XCEventGenerator.tapAtTouchLocations 故执行速度极快。同时也用类似android monkey的事件生成机制,自身源源不断的产生如 tap,swipe,pinchIn等事件使其对被测app产生了极大的压力
       缺点:需要插桩
2.XCTestWD
       https://github.com/macacajs/XCTestWD
       类似facebook wda的方式,在xcode中执行xcuitest时启动一个监听server,可通过外部发送命令来创建待测app对应session并启动app,同时也实现了dump tree 和依据xpath,id等来定位某个控件并操作这些控件
3.Fastmonkey
       (https://github.com/zhangzhao4444/Fastmonkey
       结合两者优点并改造两者,在XCTestWD基础上实现一个server路由,外部命令时可引导启动app 并执行monkey

       首先感谢来自熊猫tv的大佬@zhangzhao_lenovo的无私贡献,开源给我们社区使用,这基本算UIAutomation被遗弃后,第一款无须注入就能使用的iOS monkey测试的工具了,给zhangzhao_lenovo大佬点赞。其次感谢macaca团队的@SamuelZhaoY @xdf 大佬们(ps:肯定还有其他大佬,这里我只把XCTestWD的作者,和我们最熟悉的达峰大佬@出来了,希望其他大佬不要在意),给我们做自动化测试的人员提供那么好用的macaca,以及他们自己写的可以用来代替WDA的XCTestWD,我代替伸手党们对你们表示感谢。

废话不多说了,今天我开始使用Fastmonkey,最开始配置有点小问题,但是很快在zhangzhao_lenovo大佬以及@Only7的帮助下解决了,这里我来写个扫盲贴(安装贴?)

第一步:打开终端,git clone下来(其他方式皆可)

$ git clone https://github.com/zhangzhao4444/Fastmonkey.git

第二步:因为我是直接git下来的,Fastmonkey在我的/Users/xxxxx/Fastmonkey路径下,接下来我们更新依赖包.

先定位到XCTestWD-master下

$ cd /Users/xxxxx/Fastmonkey/XCTestWD-master

cartfile安装第三方库

$ carthage update

第三步:第三方库下载好,开始配置XCTestWD.xcodeproj。我们用Xcode打开XCTestWD.xcodeproj,然后来配置XCTestWD里面的一些内容

首先是XCTestWD->General->Signing->Team,把账号设置好,具体可以见XCTestWD的配置,保证不报错。

当然XCTestWDUITests->General->Signing->Team也一样

然后在XCTestWD->Build Setting->Header Search Paths和XCTestWD->Build Setting->Objective-C Bridging Header中,把里面的XCTestWD/XCTestWD-Bridging-Header.h删掉。
理由见下面。

第四步:环境配置好了,就是运行了,我这里就直接用真机来运行的。

首先,打开一个终端窗口,执行:

$ iproxy 8001 8001

接着,再打开一个终端窗口。执行:

$ cd /Users/xiatian/Fastmonkey/XCTestWD-master/XCTestWD 
$ xcodebuild -project XCTestWD.xcodeproj \
           -scheme XCTestWDUITests \
           -destination 'platform=iOS,name=(your device name)' \
           XCTESTWD_PORT=8001 \
           clean test

出现上面的页面,说明XCTestWD运行成功了

最后,打开第三个终端窗口,执行:

$curl -X POST -H "Content-Type:application/json" \
              -d "{\"desiredCapabilities\":{\"deviceName\":\"xxxx\",\"platformName\":\"iOS\", \"bundleId\":\"com.PandaTV.Live-iPhone\",\"autoAcceptAlerts\":\"false\"}}" \
              http://127.0.0.1:8001/wd/hub/monkey

你就可以看见你手机成功打开PandaTV,然后monkey似的在那乱点了~~~~

问题:

、error: bridging header '/Users/xxxxx/Fastmonkey/XCTestWD-master/XCTestWD/XCTestWD/XCTestWD-Bridging-Header.h' does not exist

原因:

xcode buildsetting有问题。 xctestwd中没有用到oc,swift混编,header search path,objecktive-c bridging header 配置可去掉再试试。xctestwduitest中用了混编才需要 xctestwduitest-bridging-header.h

解决方案:

XCTestWD->Build Setting->Header Search Paths和XCTestWD->Build Setting->Objective-C Bridging Header中,把里面的XCTestWD/XCTestWD-Bridging-Header.h删掉

、Swifter无法找到

原因:未安装第三方库

解决方案:

先定位到XCTestWD-master下

$ cd /Users/xxxxx/Fastmonkey/XCTestWD-master

cartfile安装第三方库

$ carthage update

、如果Mac插入多台iPhone设备

iproxy 8001 8001 后需要加serialid 指定哪台iPhone设备做端口映射。 然后curl 中执行对应iPhone设备

、xcodebuild方式跑起来的截图和crash日志在哪里找呢?

xcode里中断运行时 有个log路径的日志输出 xxx/XCTestWD-xxx/Logs/Test/Attentment

、crash log也是会生成在 Attachments文件夹里面吗? 该crash log是否可以追踪到app代码问题?

crash 也在Attachments里

就是系统生成的崩溃堆栈文件,研发有对应的符号文件是可以定位的

当然,最后再次感谢zhangzhao_lenovo大佬,该贴只为扫盲,解决一些小白的安装流程及问题,做了伸手党,也要帮大佬解决一点小问题嘛。

大佬原贴在此:https://testerhome.com/topics/9524

有难度的问题可以去该帖近距离触摸zhangzhao_lenovo大佬,没难度的就在这个帖子下面大家一起讨论吧。

照例,在最后@几个大神防止帖子沉下去。。。。

@seveniruby @xdf @zhangzhao_lenovo@Lihuazhang@pliue (ps:继续抱大腿活动)

2017-10-19更新

最近升级Xcode9和iOS11后,fastmonekey也受到一定影响,存在一些新的问题,大家可以看下这篇文章:https://testerhome.com/topics/10390,希望能帮助你们解决问题。

感谢@Test_Sir的贡献。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 26 条回复
104 seveniruby 将本帖设为了精华贴 08月25日 06:42
4481

学习学习

8e8f92

Mark ! 感谢分享!

5楼 已删除
9bfbe7

请问下执行iproxy 8001 8001报错iproxy 找不到是什么原因,还有第二个和三个终端的deviceName就是苹果手机的udid吗

8136

Code signing is required for product type 'UI Testing Bundle' in SDK 'iOS 10.3' 提示我这个 我应该怎么处理

25f875
yxys01 · #8 · 2017年08月29日 作者
9bfbe7hejianhao0612 回复

你是不是没有安装libimobiledevice啊?

25f875
yxys01 · #9 · 2017年08月29日 作者
9bfbe7hejianhao0612 回复

deviceName是你的设备名称啊

xcode->device->你的设备->name
一般是 XXX的 iPhone

25f875
yxys01 · #10 · 2017年08月29日 作者
8136304764691 回复

xcode版本不够吧,升级xcode吧

10152

执行到最后一步,提示找不到我的设备,但是错误日志里打出的列表中又有我的设备。。。
执行命令是:xcodebuild -project XCTestWD.xcodeproj -scheme XCTestWDUITests -destination 'platform=iOS,name=(“张圣洁”的 iPhone)' XCTESTWD_PORT=8001 clean test
错误日志:
xcodebuild: error: Unable to find a destination matching the provided destination specifier:
{ platform:iOS, name:(“张圣洁”的 iPhone) }

The requested device could not be found because no available devices matched the request.

Available destinations for the "XCTestWDUITests" scheme:
{ platform:iOS, id:48ade89d767be26fa2d6a53eec51085e02e43ec6, name:“张圣洁”的 iPhone }
{ platform:iOS, id:537a954539a82db33ed879a4d500c70a8458de9c, name:yan的 iPhone }
{ platform:iOS Simulator, id:B896FC57-4760-4930-AB11-2D5C4E223769, OS:10.3.1, name:iPad (5th generation) }
{ platform:iOS Simulator, id:1662F473-A67B-4E6A-8971-651B16394D72, OS:10.3.1, name:iPad Air }
{ platform:iOS Simulator, id:6D42E5E7-0F33-4A20-9837-E0BADBBA8342, OS:10.3.1, name:iPad Air 2 }
{ platform:iOS Simulator, id:950FB86A-CDEC-40F0-8FF2-AC2800F884DF, OS:10.3.1, name:iPad Pro (9.7 inch) }
{ platform:iOS Simulator, id:0512C785-4C39-4F35-93DA-B383CC8510DE, OS:10.3.1, name:iPad Pro (10.5-inch) }
{ platform:iOS Simulator, id:CAFEDC20-E79F-4061-9E24-B55E37A353B1, OS:10.3.1, name:iPad Pro (12.9 inch) }
{ platform:iOS Simulator, id:745B0C59-04DF-43D8-B431-086F74CAD7A5, OS:10.3.1, name:iPad Pro (12.9-inch) (2nd generation) }
{ platform:iOS Simulator, id:C79D11A9-DFE7-43A9-9871-3C030360AD57, OS:10.3.1, name:iPhone 5 }
{ platform:iOS Simulator, id:85F607AE-C9C5-4230-A5F6-01361253BBBF, OS:10.3.1, name:iPhone 5s }
{ platform:iOS Simulator, id:6D792B46-0296-4332-B643-FAC2BCB485B4, OS:10.3.1, name:iPhone 6 }
{ platform:iOS Simulator, id:8F207306-E311-43A5-8826-76C526E1E54E, OS:10.3.1, name:iPhone 6 Plus }
{ platform:iOS Simulator, id:FAE72621-4D4D-40DB-B6A8-CB422F8ABBFD, OS:10.3.1, name:iPhone 6s }
{ platform:iOS Simulator, id:34B7D02E-DBFC-4BCB-94D9-013E9B34BE91, OS:10.3.1, name:iPhone 6s Plus }
{ platform:iOS Simulator, id:F5C83B6B-148B-4C5A-B6E6-E620DE0ACA60, OS:10.3.1, name:iPhone 7 }
{ platform:iOS Simulator, id:2E95E3EF-D2FB-4921-A613-27021378E2DA, OS:10.3.1, name:iPhone 7 Plus }
{ platform:iOS Simulator, id:46143C6D-A772-450C-A8E9-CA0B429650F6, OS:10.3.1, 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 }

4113bc

运行xcodebuild -project XCTestWD.xcodeproj 这句报错:
2017-08-30 19:02:35.530 xcodebuild[41499:4750078] Error Domain=IDETestOperationsObserverErrorDomain Code=4 "Test operation was canceled. If you believe this error represents a bug, please attach the log file at /Users/mac/Library/Developer/Xcode/DerivedData/XCTestWD-cseytoewhlzxivgopaonbuqulosj/Logs/Test/BBE6C2E9-EFFC-4AC7-BF69-A360B492C709/Session-XCTestWDUITests-2017-08-30_190230-J7U8QS.log" UserInfo={NSLocalizedDescription=Test operation was canceled. If you believe this error represents a bug, please attach the log file at /Users/mac/Library/Developer/Xcode/DerivedData/XCTestWD-cseytoewhlzxivgopaonbuqulosj/Logs/Test/BBE6C2E9-EFFC-4AC7-BF69-A360B492C709/Session-XCTestWDUITests-2017-08-30_190230-J7U8QS.log}

Testing failed:
Use of undeclared type 'XCTestWDMonkey'
Use of unresolved identifier 'XCTestWDMonkey'
** TEST FAILED **

The following build commands failed:
CompileSwift normal armv7 /Users/mac/Documents/Fastmonkey/XCTestWD-master/XCTestWD/XCTestWDUITests/XCTestWDRunner.swift
CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compiler
(2 failures)

25f875
yxys01 · #15 · 2017年08月31日 作者
10152holyzhang 回复

你curl中设备名不要打引号啊,就像下面这个:

curl -X POST -H "Content-Type:application/json" \
              -d "{\"desiredCapabilities\":{\"deviceName\":\"XXX的 iPhone\",\"platformName\":\"iOS\", \"bundleId\":\"com.neudzf.CSDNBlog\",\"autoAcceptAlerts\":\"false\"}}" \
              http://127.0.0.1:8001/wd/hub/monkey

其次你先不要插两台设备,如果要并发的话,请参考原贴的回复 https://testerhome.com/topics/9524

{ platform:iOS, id:48ade89d767be26fa2d6a53eec51085e02e43ec6, name:“张圣洁”的 iPhone }
{ platform:iOS, id:537a954539a82db33ed879a4d500c70a8458de9c, name:yan的 iPhone }
16楼 已删除
17楼 已删除
10152
25f875yxys01 回复

我用xocode安装的xctestwd,然后curl的时候 链接的时候有问题
服务端:
Requesting connecion to device handle == 8 (serial: 48ade89d767be26fa2d6a53eec51085e02e43ec6), port 8001
Error connecting to device!
链接端:
curl: (52) Empty reply from server

25f875
yxys01 · #19 · 2017年08月31日 作者
10152holyzhang 回复

首先是xcode不是xocode,你这代码注意点,别因为打错导致错误。
其次,你先按我写的指导教程一步一步的走嘛,先跑通,你再去用xcode run嘛。。。
最后,你这个是链接失败的错误,看看是不是端口没打开或者xctestwd没装好?
个人建议,你先按我的指导贴一步一步走一遍,看看是不是还有问题,再来提好吗?

156e5d
25f875yxys01 回复

求教,按照你的步骤执行,在执行到xcodebuild -project XCTestWD.xcodeproj -scheme XCTestWDUITests -destination 'platform=iOS,name=slideplus' XCTESTWD_PORT=8001 clean test 出现下图错误,帮忙看下如何处理,万分感谢🙏

25f875
yxys01 · #21 · 2017年08月31日 作者
156e5dslideplustest 回复

你这个是代码层面的错误,建议去问@zhangzhao_lenovo;其次,我在https://testerhome.com/topics/9524#reply232xcode版本问题,你要不先降到8.3.3试试?看到你好像是

156e5d
25f875yxys01 回复

嗯,谢谢楼主回复,我正在下载8.3的,9的有点不靠谱~

25f875
yxys01 · #23 · 2017年08月31日 作者
156e5dslideplustest 回复

希望你能成功运行。其实我也下了9来用过,确实兼容方面存在一定的问题,如果是研发还好,测试使用的框架有些地方不是那么友好。

1ef498

请问楼上前辈下的Xcode8.3.3成功了吗?我也是执行到那一步报错了;错误原因如下图我看了一下Xcode版本是8.3.3,请教一下大神有什么办法能解决吗?

2182

"xcode里中断运行时 有个log路径的日志输出 xxx/XCTestWD-xxx/Logs/Test/Attentment "
求问这个具体路径是?

A99604
2182bingle 回复

我找了很久才找到= =!
当前用户目录下的/Library/Developer/Xcode/DerivedData/XCTestWD-xxx/Logs/Test/Attachments

13930 Test_Sir FastMonkey iOS11 踩坑记 中提及了此贴 10月11日 14:45
332

xcode 9.0,iOS 11 报错信息
/Users/Xx/Downloads/Fastmonkey-master/XCTestWD-master/XCTestWD/XCTestWDUITests/server/models/XCTestWDSession.swift:80:16: Use of unresolved identifier 'XCTestWDApplication'

156e5d
332fengcanfly 回复

解决方法:https://testerhome.com/topics/10390 这个帖子的问题2和问题3
#将XCTestWDApplication.m和XCTestWDApplication.m文件拖拽到Xcode中的PrivateHeaders文件下

需要在XCTestWDUITests-Bridging-Header.h文件中添加
#import "XCTestWDApplication.h"

30楼 已删除
332
156e5dslideplustest 回复

问题解决了,👍

2425
1ef498_Aaron 回复

你的问题解决了么,我也遇到了同样的问题。

7310

ode Signing Error: No profiles for 'XCTestWD.XCTestWDUITests' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'XCTestWD.XCTestWDUITests'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild.

求助,一直报这个错误

7310

The app ID "XCTestWD.XCTestWD" cannot be registered to your development team. Change your bundle identifier to a unique string to try again.

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