【问题标题】:Limiting XCTests measure() to one run only将 XCTests measure() 限制为仅运行一次
【发布时间】:2018-07-31 23:12:25
【问题描述】:

作为我正在编写的 UI 测试的一部分,我想衡量一项功能的性能。测试本身需要一段时间,而且我要测量的部分很小,而且测试运行的频率足够高,每次运行只需进行一次测量即可获得所需的数据。不过,XCTestCase 的 measure(_:) 会运行 10 次。

是否有任何选项我可以给它或measureMetrics(_:automaticallyStartMeasuring:for:) 只运行一次测量,或者有什么方法让我自己进行测量并将其反馈给测试运行器,以便它以@987654323 的方式与 Xcode 集成@ 会吗?

【问题讨论】:

    标签: ios xcode xctest xctestcase


    【解决方案1】:

    这很烦人。

    虽然在 Xcode 11 中,你可以在调用self.measure { } 时指定XCTMeasureOptions,即measure(options: XCTMeasureOptions, block: () -> Void)。在options中,可以设置iterationCount为1。

    但是!

    iterationCount设置为1,Xcode实际上会运行两次measure block,根据iterationCount的文档:

    性能测试运行其块迭代Count+1 次,忽略第一次迭代并记录剩余迭代的指标。该测试忽略了第一次迭代以减少与“预热”缓存和其他首次运行行为相关的测量方差。

    它在实践中确实运行了两次。

    同时根据文档将iterationCount设置为0不会产生任何结果:

    ... iterationCount+1 次,忽略第一次迭代并记录剩余迭代的指标

    我不知道更改测量计数的Runtime Swizzling way 是否可以摆脱热身运行。

    解决方法

    设置一个计数器以...

    1. 跳过第一次运行:
        func testYourFunction() {
            let option = XCTMeasureOptions()
            option.iterationCount = 1
            var count = 0
            self.measure(options: option) {
                if count == 0 {
                    count += 1
                    return
                }
                // Your test code...
            }
        }
    
    1. 回滚更改:
        func testYourFunction() {
            let option = XCTMeasureOptions()
            option.iterationCount = 1
            var count = 0
            self.measure(options: option) {
                defer {
                    if count == 0 {
                        try? setUpWithError()
                        // call `setUpWithError` manually
                        // or run your custom rollback logic
                    }
                    count += 1
                }
                // Your test code...
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2021-01-09
      • 2014-04-11
      • 1970-01-01
      • 2012-06-23
      • 2023-03-23
      • 2014-08-15
      相关资源
      最近更新 更多