2016-07-30 6 views
18

डिफ़ॉल्ट रूप से एक्सकोड प्रदर्शन परीक्षण दस बार चलाए जाते हैं और मेरा परिणाम उन दस परीक्षणों का औसत होता है। समस्या यह है कि जब भी मैं इसे चलाता हूं तो औसत परिणाम काफी भिन्न होता है इसलिए मुझे एक अभिसरण परिणाम प्राप्त करने के लिए कम से कम पांच बार परीक्षण करना पड़ता है। यह दोनों थकाऊ और समय लेने वाला है; दस बार से अधिक चलाने के लिए या तो XCode या इकाई परीक्षण को कॉन्फ़िगर करने का कोई तरीका है?मैं दस बार से अधिक अपने प्रदर्शन परीक्षण कैसे चला सकता हूं?

enter image description here

उत्तर

8

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; 

जब इस विधि पहले पैरामीटर (ARG1) swizzled है 10 अवधियों है: (

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

मैं 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 परिणाम दिखाता है।

हालांकि यह मिनी व्यू में कुल समय + मानक विचलन मान अपडेट करता है।

Before Swizzle

Swizzling Swizzling के बाद और 10 से अधिक परिणाम देखने के लिए 4 मूल्यों After Swizzle

जोड़ने से पहले एक शायद XCode क्रम बदलाव करने को बताने के लिए होता है अधिक आइटम दिखाने के लिए टेबल।

+0

क्या यह सही काम करता है? 0.003 सेकेंड से 0.717 सेकेंड की वृद्धि तीन नई प्रविष्टियों के लिए थोड़ा सा लगता है। – Deco

+0

हाँ यह सही काम करता है। मूल 10 मानों का मतलब 0.00348 था, और 14 का मतलब (1, 2, 3, 4 जोड़ने के बाद) मान 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

संक्षिप्त उत्तर: नहीं, वहाँ कोई वर्तमान में दस गुना से एक उपाय ब्लॉक अधिक अनुमति देने के लिए सामने आ इंटरफेस है।

लंबा उत्तर: नहीं, लेकिन माप ब्लॉक के कुछ मीट्रिक को संशोधित करने के लिए एक इंटरफेस खुलासा हुआ है। डिफ़ॉल्ट मीट्रिक defaultPerformanceMetrics से लौटाई गई स्ट्रिंग सरणी में हैं। ऐसा लगता है कि अभी केवल एक मीट्रिक समर्थित है: XCTPerformanceMetric_WallClockTime। यह केवल एक प्रदर्शन मीट्रिक निर्दिष्ट करता है जो प्रदर्शन परीक्षण के startMeasuring() और stopMeasuring() विधियों पर कॉल के बीच सेकंड में समय रिकॉर्ड करता है, न कि ब्लॉक चलाने की संख्या की संख्या।

संबंधित मुद्दे

 संबंधित मुद्दे