2016-07-30 21 views
18

Domyślnie testy wydajności Xcodes uruchamiane są dziesięć razy, a mój wynik jest średnią z dziesięciu testów. Problem polega na tym, że uśredniony wynik różni się znacznie przy każdym uruchomieniu, więc muszę przeprowadzić test co najmniej pięć razy, aby uzyskać wynik zbieżny. Jest to zarówno żmudne, jak i czasochłonne; czy istnieje sposób na skonfigurowanie XCode lub samego testu urządzenia, aby działał więcej niż dziesięć razy?Jak mogę uruchomić testy wydajności więcej niż dziesięć razy?

enter image description here

Odpowiedz

8

klasy zrzutu XCTestCase ujawnia tej metody:

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

gdy metoda swizzled pierwszego parametru (ARG1) ma 10 czas trwania:

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

i dodaje się 4 nowych wartości (1,0 , 2,0, 3,0, 4,0) na końcu tej listy przed przekazaniem go z powrotem do pierwotnej implementacji, ale niestety innej klasy, który przestrzega, XCTestLog, posiada wewnętrzną testow który pobiera zadziałał:

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

Gdy metoda XCTestLog jest również nadpisana, więc nie zapewnia, dodatkowe 4 wartości można dodać bez żadnych skarg. niestety widok wciąż pokazuje tylko 10 wyników.

to jednak aktualizuje całkowity czas + wartości odchylenia standardowego w widoku mini.

Przed Swizzling

Before Swizzle

Po Swizzling i dodając 4 wartości After Swizzle

aby zobaczyć więcej niż 10 wyników należałoby prawdopodobnie trzeba dostosować czas pracy XCode powiedzieć tabela, aby wyświetlić więcej elementów.

+0

Czy to działa poprawnie? Wzrost z 0,003 sekundy do 0,717 sekundy wydaje się nieco większy dla trzech nowych wpisów. – Deco

+0

Tak, to działa poprawnie. Średnią dla oryginalnych 10 wartości było 0,00348 i średnią z 14 (po dodaniu 1, 2, 3, 4) Wartości to 0,71677 – Casey

+0

(0,003544568 + 0,003456569 + 0,003198263 + 0,003257955 + 0,003508724 + 0,003454298 + 0,003461192 + 0,00423787 + 0,003359195 + 0,003335757 + 1 + 2 + 3 + 4)/14 – Casey

4

Krótka odpowiedź: Nie, nie ma prądu interfejs narażony aby umożliwić blok miarą ponad dziesięciokrotnie.

dłuższej odpowiedzi: Nie, ale tam jest interfejsem narażone na zmiany niektórych metryk bloku pomiarowym. Domyślne dane znajdują się w tablicy String zwróconej z defaultPerformanceMetrics. Wygląda na to, że dostępna jest tylko jedna metryka: XCTPerformanceMetric_WallClockTime. Określa tylko metrykę wydajności, która rejestruje czas w sekundach między wywołaniami metod testu wydajności, a nie liczbą uruchomień bloku.

Powiązane problemy