iOS 测试 求问支持 Xcode11 的 IOS monkey (踩了很多坑才来问)

iOStester · 2019年12月13日 · 最后由 zzl 回复于 2021年07月27日 · 4375 次阅读

想像 Android 一样借助 monkey 乱点,发现手动测不出来的 bug
我的需求:项目编译环境是 Xcode11.x,支持新的 iOS 系统(如 iOS13)
在网上找了一周 iOS monkey 的资料,大概分三种:
1.fastmonkey 根据论坛里的帖子去一步步实验,发现源代码是 swift3.0 写的,而且只支持 Xcode9.x
看了很多教程才发现不满足我的需求,浪费我两天时间
论坛帖子 https://testerhome.com/topics/9810

2.crashmonkey
同样支持 Xcode7.x,没意义,弃用
论坛帖子 https://testerhome.com/topics/2718

3.swift monkey
monkey 的程序运行时没有报错,但是手机处于白屏没有任何点击操作,网上没有人遇到我这样的情况

所以来问大家,目前在用什么工具来做 monkey 测试,如果是 swift monkey 是否遇到过我这种情况吗,小弟多谢

共收到 31 条回复 时间 点赞

我最近也在调查 Monkey 随机测试,现状:
1)使用 FastMonkey 用 Xcode10.1 把测试工程跑起来,被测试的应用用 Xcode11.3.1 跑起来。能在真机上看到自动化测试效果,在 Xcode 中也能看到对测试应用的截图。
2)用 SwiftMonkey 能支持最新的 Xcode,能在 Xcode 看到截图和闪退日志。但是需要植入测试代码,因为公司开发的应用太多,需要一个一个植入,这一点比较费劲儿,并且因为私有 API 的原因也不能提交商店。

以上两种方法都需要用打开 Xcode 来编译,看测试结果。不知道有没有可以不用 Xcode 来编译分析,直接用脚本或命令测试,还支持多机并发,还能出测试报告的方法。Android 有 Jenkins+Monkey,IOS 有吗?希望有测试大神指点一二~

可以用下载 Xcode10.1,执行 Carthage update 时记得修改将 xcode10.1 改成默认版本,update 编译时候记得修改一下对应依赖工程的 swift 版本,否则可能会 update 失败,update 成功后将 iOS13 版本的 diskimage 拷贝到 Xcode10.1,然后执行 test 了。

fastmonkey 吧,虽然环境问题搭建起来比较麻烦,但还是可以实现的

黑山老妖 回复

xcode 版本多少,是否遇到 swift 语言过低的问题

lcw 回复

你好,下载了你的代码,并且按照你的教程操作,bundleIdentifier 都修改了
运行起来 sjk-monkey 程序(没有任何报错),整个屏幕黑红两块如图,并且待测的 app 没有启动
请问怎么解决

lcw 回复

是待测 app 完全没有启动,我检查过 bundleID 没啥问题
我们 app 的编译环境只支持 Xcode11 以上,换 Xcode10.1 是下策了
代码我放在云盘了https://yunpan.360.cn/surl_yr3hbHGfSjE(提取码:4b58),有空的时候帮忙看下
另外能加下 qq 联系下吗,我 qq:1102010028

iOStester 回复

xcode10.1 2 楼说的问题,遇到了

iOStester 回复

额,待测试 app 完全没启动,还是启动了又拉回到这个 demo app,完全没启动的话可能还是 bundleID 的问题吧,具体没看到代码也不清楚。。。还有一种方法是你可以找到 10.1 的 xctest framework 替换到 11 的 Xcode 下 也可以使用原来的那个 monkey

lcw 回复

非常感谢亲的分享,已经可以用起来。谢谢!

iOStester 回复

需要你修改 sjk-monkeyUITests 目录下的 sjk-monkeyuiTests 里面
let application = XCUIApplication.init(bundleIdentifier: "com.XXX.xxx"),亲测修改可以用。

阿溱 回复

哥们,你用的 Xcode 什么版本呢

阿溱 回复

下载代码后,改成自己的证书,
除了 sjk-monkeyuiTests 里面
let application = XCUIApplication.init(bundleIdentifier: "com.XXX.xxx"),还需要修改别的吗

阿溱 回复

我也运行起来了,但是貌似没看到设置运行时长,请问你知道在哪设置运行时长吗?

薇大帅 回复

运行时长就是 fastmonkey 里的运行次数
monkey.monkeyAround(iterations: 1000)

我把 fastmonkey 导入 xcode11,连 product->test 都是暗的,是不兼容吗

Krautzun 回复

Scheme 选择 XCTestWDUITests,不能选择 XCTestWD

匿名 #19 · 2020年04月02日

@lcw 大神,我按照你的方式,目前遇到一个问题,从被测应用里面跳转到了 appstore 或者其他应用,它就直接失败了,没有切换回来,这是什么原因??
拉起代码如下:

func actInForeground(_ action: @escaping ActionClosure) -> ActionClosure {
    return {
        guard #available(iOS 9.0, *) else {
            action()
            return
        }
        let closure: ActionClosure = {

            // 判断是否在前台,不在前台则拉起
            if self.currentApp.state != .runningForeground {
                self.currentApp.activate()

            }

报错信息如下:

    t =    46.13s             Snapshot accessibility hierarchy for app with pid 3592
    t =    46.67s     Wait for com.123.mobilepamo to idle
2020-04-02 15:12:55.414837+0800 PAMonkeyUITests-Runner[3894:644425] ************************ 长按 *******************************
2020-04-02 15:12:55.414920+0800 PAMonkeyUITests-Runner[3894:644425] ************************ 处理action *******************************
    t =    47.00s Tap Application 'com.123.mobilepamo'[0.00, 0.00] -> (107.7, 46.9)
    t =    47.01s     Wait for com.123.mobilepamo to idle
    t =    47.04s     Find the Application 'com.123.mobilepamo'
    t =    47.04s         Snapshot accessibility hierarchy for app with pid 3592
    t =    48.05s         Find the Application 'com.123.mobilepamo' (retry 1)
    t =    48.05s             Snapshot accessibility hierarchy for app with pid 3592
    t =    49.06s         Find the Application 'com.123.mobilepamo' (retry 2)
    t =    49.06s             Snapshot accessibility hierarchy for app with pid 3592
    t =    49.21s     Assertion Failure: MonkeyXCTest.swift:73: Error getting main window kAXErrorServerNotFound
    t =    49.23s Tear Down
2020-04-02 15:12:57.643319+0800 PAMonkeyUITests-Runner[3894:644425] ************************ tearDown *******************************

还有一种报错,也拉不起来

Assertion Failure: MonkeyXCTest.swift:166: Failed: Application for Application 'com.123.mobilepamo' is not foreground and does not allow background
iOStester 回复

我也遇到了,app 启动后是红黑两块,请问下你最后是如何解决的?

匿名 #21 · 2020年07月22日
lcw 回复

使用 xtest api(XCUICoordinate tap 方式)点击,发现有些一次点击需要 1-6 秒,看日志是在等待 app idel,请求你遇到过,这个是如何解决的?

n方 回复

请问目前用你用的什么方法啊

阿溱 回复

你好 请问怎么设置运行时长呢 另外怎么查看崩溃信息啊

问一下 ,XCode 12.0 支持吗?

lcw 回复

老哥你解决了吗?

Mystic 回复

我也遇到这种情况,请问怎么解决的

lcw 回复

请问这种是需要 app 的源码进行编译,才能跑 monkey,还是像 appium 一样不需要 app 源码就可以执行 monkey 测试?另外方便加下联系方式请教下吗,我的 qq: 1415356286

回复所有人,https://www.cnblogs.com/dreamyu/p/11280030.html
这个帖子比较有参考价值,可以解决楼上调不起所测 app 的问题。

匿名 #25 · 2020年08月14日
lcw 回复

可以二次开发 swiftmonkey,把不支持 10.1 以上的 XCEventGenerator 换成 xctest 的 API
这是我之前二次开发的记录https://www.cnblogs.com/dreamyu/p/11280030.html
这是我之前改造的https://github.com/lcyfly/sjk_swiftmonkey
只是修改了下 tap 点击事件,如果是其它手势操作可以根据 xctest 的 API 自己修改下,修改后点击频率会降低到大约每秒 3-4 个 action,但是已经超过了用户正常操作频率了

lcw 回复

大佬你好,我现在已经成功跑起来了您的工程,可以正常运行了,但是怎么查看结果啊,您可以加一下我 qq 吗?有很多问题想问您一下,541347048

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