Как я могу выполнить свои тесты производительности более десяти раз?

По умолчанию тесты производительности Xcodes выполняются десять раз, и мой результат является средним из этих десяти тестов. Проблема в том, что усредненный результат значительно меняется каждый раз, когда я запускаю его, поэтому я должен запустить тест по крайней мере пять раз, чтобы получить результат с конверсией. Это утомительно и требует много времени; есть ли способ настроить XCode или unit test для запуска более десяти раз?

введите описание изображения здесь

Ответы

Ответ 1

дамп класса 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;

когда этот метод swizzled, первый параметр (arg1) имеет 10 длительностей:

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

i добавлено 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." 

как только метод XCTestLog также переопределяется, поэтому он не утверждает, дополнительные 4 значения могут быть добавлены без каких-либо жалоб. к сожалению, в представлении показывается только 10 результатов.

однако, он обновляет значения общего времени + стандартного отклонения в мини-представлении.

Перед Swizzling

Перед Swizzle

После Swizzling и добавления 4 значений После Swizzle

чтобы просмотреть более 10 результатов, вероятно, придется настроить среду выполнения XCode, чтобы показать таблице, чтобы показать больше элементов.

Ответ 2

Короткий ответ: Нет, нет текущего интерфейса, который позволяет блоку измерения более десяти раз.

Более длинный ответ: Нет, но есть интерфейс, подверженный изменению определенных показателей блока меры. Метрики по умолчанию находятся в массиве String, возвращаемом из defaultPerformanceMetrics. Прямо сейчас есть только одна метрика: XCTPerformanceMetric_WallClockTime. Это указывает только метрику производительности, которая записывает время в секундах между вызовами методов тестирования производительности startMeasuring() и stopMeasuring(), а не количество раз, когда блок выполняется.