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

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

想像 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 条回复 时间 点赞

可以二次开发 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,但是已经超过了用户正常操作频率了

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

lcw 回复

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

iOStester 回复

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

lcw 回复

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

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

黑山老妖 回复

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

iOStester 回复

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

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

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

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

匿名 #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,请求你遇到过,这个是如何解决的?

lcw 回复

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

阿溱 回复

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

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

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

问一下 ,XCode 12.0 支持吗?

lcw 回复

老哥你解决了吗?

Mystic 回复

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

lcw 回复

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

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

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