我可以使用 XCTest 测试应用程序中某一部分的性能吗?

Can I test performance of one section in my application with XCTest?

因为我对 UNIT testing 和 Xcode XCTest 目标有点了解,所以我想知道在我的项目中,有一个部分包含许多 animations那里有许多服务和 database 流程,那么如何衡量 XCTest 中该屏幕的性能?

XCTestCase中有衡量性能的方法:measure and measureMetrics

这些方法执行块内的代码十次并报告单独执行时间、平均时间和偏差。他们还为每个测试设备设置了一个基线,如果您的代码的测量部分在未来变得明显变慢,则报告测试失败。

单元测试用例文件的Xcode模板底部有一个性能测试方法示例:

class CoreDataTestTests: XCTestCase {

    func testPerformanceExample() {
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }
}

这取决于你想对结果做什么。

如果您想通过某种基准测试来测试您的函数的性能,以查看在对该代码进行更改后速度是变慢还是变快,请查看 nils 建议的内容。

如果您想知道什么占用了处理时间,那么您最好使用 Instruments 获得准确的测量结果。您可以使用 Profilecommand+i.

Product 菜单中 运行 乐器

在设备上选择 time profiler 和 运行 进程(使用红色圆圈按钮)。请注意,启用一些设置有助于更清楚地查看数据。

像用户一样使用您的应用程序并实时观察调用树,因为它显示哪些函数占用的处理器时间最多。

从这里您可以看到可能需要优化的内容等。

注意:您可能需要在构建设置中启用 dSYM,以便在跟踪中获取符号而不是随机内存偏移量。

Instruments 是了解您的应用中正在发生的事情的好工具。您可以查看CPU核心使用情况、线程使用情况和线程等待情况等