How can I run my performance tests more than ten times?

前端 未结 4 1768
星月不相逢
星月不相逢 2021-02-12 05:59

By default Xcodes performance tests are run ten times and my result is the average of those ten tests. The problem is the averaged result varies considerably each time I run it

4条回答
  •  遇见更好的自我
    2021-02-12 06:15

    a class dump of XCTestCase exposes this method:

    - (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;
    

    when this method is swizzled the first parameter (arg1) has the 10 durations:

    ["0.003544568",
    "0.003456569",
    "0.003198263",
    "0.003257955",
    "0.003508724",
    "0.003454298",
    "0.003461192",
    "0.00423787",
    "0.003359195",
    "0.003335757"]
    

    i added 4 new values (1.0, 2.0, 3.0, 4.0) to the end of this list before passing it back to the original implementation, but unfortunately a different class that observes, XCTestLog, has an internal sanity check that gets tripped:

    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." 
    

    once the XCTestLog method is also overridden so it doesn't assert, the additional 4 values can be added without any complaints. unfortunately the view still only shows the 10 results.

    it does however update the total time + standard deviation values in the mini view.

    Before Swizzling

    After Swizzling and adding 4 values

    in order to view more than 10 results one would probably have to tweak the XCode runtime to tell the table to show more items.

提交回复
热议问题