• @zhangzhao_lenovo,罗列 FastMonkey 几个可以提高的点:

    1. XCTest 工程跑起来后会有 60s 暂停,临时解决方法见#525 楼;【已解决】
    2. 测试执行过程中会停顿,报 Idle 啥的问题,但是现在设置的 wait 时间为 5s,所以马上会跳过,但本质原因未找到;【未解决】
    3. 测试过程中消除弹窗,Descendants matching type Alert... 似乎也会暂停;【未解决】
    4. 测试结束退出后,退出 exit0 但是会报 failure;【未解决】
    5. 性能数据如何获取 ,配合系统的 instruments 命令,"instruments -v -t {template} -w {device_udid} -D {trace_file} -l 10000 {app_path} ,注意点:启动 XCTestWD 后面,可以延迟 10 秒再去执行这个 instruments 命令,这里我是用 python 的threading.Timer 搞了个定时;【解决】
    6. more...
  • 第一个问题,XCTWaiter 我 hook 了下,确实是 60s 超时,方法交换下,修改时间随意,我这边是 5s:

    extension XCTWaiter {
        @objc open class func swizzled_wait(for expectations: [XCTestExpectation], timeout seconds: TimeInterval, enforceOrder enforceOrderOfFulfillment: Bool) -> XCTWaiter.Result {
            let result = self.swizzled_wait(for: expectations, timeout: 5, enforceOrder: enforceOrderOfFulfillment)
            return result
        }
    
        class func swizzleMethods() {
            let _ : () = {
                let originalSelector = #selector(XCTWaiter.wait(for:timeout:enforceOrder:))
                let swizzledSelector = #selector(XCTWaiter.swizzled_wait(for:timeout:enforceOrder:))
                let originalMethod = class_getClassMethod(XCTWaiter.self, originalSelector)
                let swizzledMethod = class_getClassMethod(XCTWaiter.self, swizzledSelector)
                method_exchangeImplementations(originalMethod!, swizzledMethod!)
            }()
        }
    }
    

    但是这样有个问题,其他用到这个方法的都会被替换了,自己做个处理哈。@John,比如搞个全局变量,第一次跳过了就不要固定 5s 超时了,或者判断是 60 秒超时就设置短一些

  • XCUIApplication.init 目前确实会等待 60s 左右才 lauch,一直等待系统方法 [XCTWaiter waitForExceptations:timeout:enforceOrder:] 设了 60s 的超时。。。 另外中间停顿粗略看报错是等待应用程序 idle 那个。目前整个自动化平台搭建完了,开始着手取解决这两个问题,毕竟影响了自动化效率,不解决不行。。。。请问 @zhangzhao_lenovo 大神,这两个问题解决了吗?求教。

    ps: 关于性能确实可以配合 instrument 来获取,目前用自定义模板获取下 FPS,GPU 等数据,但是貌似也没啥价值。崩溃日志用 idevicecrashreport 取拿,但是我是一次崩溃都没跑出来。。。。