我可以使用 XCTest 测试我的应用程序中某个部分的性能吗?
Posted
技术标签:
【中文标题】我可以使用 XCTest 测试我的应用程序中某个部分的性能吗?【英文标题】:Can I test performance of one section in my application with XCTest? 【发布时间】:2016-08-12 11:20:49 【问题描述】:由于我对UNIT testing
和 Xcode XCTest
目标有点了解,我想知道在我的项目中,有一个部分包含许多 animations
和许多服务以及那里的 database
进程,所以如何在XCTest
中测量该屏幕的性能?
【问题讨论】:
【参考方案1】:在XCTestCase
中有衡量性能的方法:measure和measureMetrics。
这些方法执行块内的代码十次,并报告各个执行时间、平均时间和偏差。他们还为每个测试设备设置了基线,如果您的代码的测量部分在未来变得明显变慢,则报告测试失败。
单元测试用例文件的 Xcode 模板底部有一个性能测试方法示例:
class CoreDataTestTests: XCTestCase
func testPerformanceExample()
self.measure
// Put the code you want to measure the time of here.
【讨论】:
所以在这里我需要测量我的动画 + 数据库数据获取速度,所以我需要将该代码放在这个测量块中,或者只是通过 XCTest 类调用该函数? 将代码保留在原处,并从测试方法的测量块中调用该函数。被测方法需要是公共的或内部的(如果是内部的:使用@testable
导入其模块)。通过单击断点槽中的小菱形运行测试,或使用 Product->Test 菜单命令运行所有测试。对于动画性能,您可能还想检查 Instruments,有一些用于动画性能分析的工具。
感谢您的回答,让我检查一下。
@CodeChanger - 请注意您的动画是异步运行的,因此您需要使用 XCTestExpectation 和 waitForExpectation,否则您的测试将在异步代码之前完成。【参考方案2】:
这取决于你想对结果做什么。
如果您想通过某种基准测试来测试您的函数的性能,以查看更改该代码后事情是变慢还是变快,请查看nils
的建议。
如果您想知道处理时间的原因,最好使用Instruments
获得准确的测量结果。您可以使用Profile
或command+i
从Product
菜单运行仪器。
选择time profiler
并在设备上运行该进程(使用红色圆圈按钮)。请注意,启用一些设置有助于更清楚地查看数据。
像用户一样使用您的应用,并实时观察调用树,因为它显示了哪些函数占用了最多的处理器时间。
从这里您可以看到可能需要优化的内容等。
注意:您可能需要在构建设置中启用 dSYM,以便在跟踪中获取符号而不是随机内存偏移。
Instruments 是一个很好的工具,可以帮助您了解您的应用中发生了什么。可以查看CPU核心使用率、线程使用率、线程等待等。
【讨论】:
以上是关于我可以使用 XCTest 测试我的应用程序中某个部分的性能吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 IOS 的 XCTest 单元测试用例中模拟方法(带参数)调用