Dec*_*nna 21 xcode performance-testing ios xctest swift
默认情况下,Xcodes性能测试运行十次,结果是十次测试的平均值.问题是每次运行时平均结果差别很大,所以我必须运行测试至少五次以获得收敛结果.这既乏味又耗时; 有没有办法配置XCode或单元测试本身运行十次以上?
XCTestCase的类转储公开此方法:
- (void)_recordValues:(id)arg1 forPerformanceMetricID:(id)arg2 name:(id)arg3 unitsOfMeasurement:(id)arg4 baselineName:(id)arg5 baselineAverage:(id)arg6 maxPercentRegression:(id)arg7 maxPercentRelativeStandardDeviation:(id)arg8 maxRegression:(id)arg9 maxStandardDeviation:(id)arg10 file:(id)arg11 line:(unsigned long long)arg12;
Run Code Online (Sandbox Code Playgroud)
当这个方法被淘汰时,第一个参数(arg1)有10个持续时间:
["0.003544568",
"0.003456569",
"0.003198263",
"0.003257955",
"0.003508724",
"0.003454298",
"0.003461192",
"0.00423787",
"0.003359195",
"0.003335757"]
Run Code Online (Sandbox Code Playgroud)
我将4个新值(1.0,2.0,3.0,4.0)添加到此列表的末尾,然后再将其传递回原始实现,但不幸的是,另一个观察到的类XCTestLog有一个内部完整性检查被触发:
Assertion failure in +[XCTestLog _messageForTest:didMeasureValues:forPerformanceMetricID:name:unitsOfMeasurement:baselineName:baselineAverage:maxPercentRegression:maxPercentRelativeStandardDeviation:maxRegression:maxStandardDeviation:file:line:]
caught "NSInternalInconsistencyException", "Performance Metrics must provide 10 measurements."
Run Code Online (Sandbox Code Playgroud)
一旦该XCTestLog方法也被覆盖,因此它没有断言,可以添加额外的4个值而不会有任何抱怨.遗憾的是,该视图仍然只显示了10个结果.
但它会更新迷你视图中的总时间+标准偏差值.
在Swizzling之前
为了查看超过10个结果,可能需要调整XCode运行时以告诉表显示更多项.
在最新的 Xcode (11.0+) 中,您不需要调整来更改迭代计数。使用以下函数:
\n\nfunc measure(options: XCTMeasureOptions, block: () -> Void)
这将允许您指定XCTMeasureOptions哪个具有iterationCount属性。
文档中有趣的注释:
\n\n\n\n性能测试运行其块
\niterationCount+1时间,忽略第一次迭代并记录剩余迭代的指标。该测试忽略第一次迭代,以减少与 \xe2\x80\x9c 预热 \xe2\x80\x9d 缓存和其他首次运行行为相关的测量方差。
简短的答案:不,当前没有暴露的接口允许测量块超过十次。
更长的答案:不,但是有一个接口可以修改度量模块的某些度量。默认指标位于从返回的String数组中defaultPerformanceMetrics。目前似乎仅支持一种指标:XCTPerformanceMetric_WallClockTime。这仅指定一个性能指标,该指标记录调用性能测试startMeasuring()和stopMeasuring()方法之间的时间(以秒为单位),而不记录该块运行的次数。
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |