2016-07-14 8 views
11

मैं अपने परीक्षण को असफल करना चाहता हूं अगर यह 0.5 सेकंड से धीमा चलता है लेकिन औसत समय केवल कंसोल में मुद्रित होता है और मुझे इसे एक्सेस करने का कोई तरीका नहीं मिल रहा है। क्या इस डेटा तक पहुंचने का कोई तरीका है?यदि प्रदर्शन धीमा हो तो प्रदर्शन परीक्षण कैसे विफल हो सकता है?

कोड

//Measures the time it takes to parse the participant codes from the first 100 events in our test data. 
func testParticipantCodeParsingPerformance() 
{ 
    var increment = 0 
    self.measureBlock 
    { 
     increment = 0 
     while increment < 100 
     { 
      Parser.parseParticipantCode(self.fields[increment], hostCodes: MasterCalendarArray.getHostCodeArray()[increment]) 
      increment++ 
     } 
    } 
    print("Events measured: \(increment)") 
} 

टेस्ट डाटा

[Tests.ParserTest testParticipantCodeParsingPerformance] 'मापा जाता [समय, सेकंड] औसत: 0.203, रिश्तेदार मानक विचलन: 19.951%, मान: [0.186405, 0.182292, 0.179 9 66, 0.177797, 0.175820, 0.205763, 0.315636, 0.223014, 0.200362, 0.178165]

उत्तर

8

आपको अपने प्रदर्शन परीक्षण के लिए आधारभूत रेखा निर्धारित करने की आवश्यकता है। रिपोर्ट नेविगेटर पर जाएं:

Report Navigator

और अपने हाल के परीक्षण चालन का चयन करें। आप अपने सभी परीक्षणों की एक सूची देखेंगे, लेकिन प्रदर्शन वाले लोगों के साथ समय जुड़ेगा। प्रदर्शन परिणाम पॉपओवर ऊपर लाने के लिए समय पर क्लिक करें:

Performance Result

"आधारभूत" मूल्य के लिए आप क्या देख रहे हैं है - 0.5s के लिए सेट और कहा कि इस परीक्षण है कि Xcode सूचित करेंगे चाहिए आधे सेकेंड में पूरा यदि आपकी परीक्षा बेसलाइन की तुलना में 10% से अधिक धीमी है, तो यह असफल हो जाएगी!

+1

ये अच्छी तरह से काम किया है लेकिन वे केवल मेरे मशीन पर स्थानीय रूप से काम करते हैं, मैं अपने प्रोजेक्ट और अन्य सभी उपयोगकर्ताओं के लिए Git उपयोग कर रहा हूँ उनके बेसलाइन सेट नहीं है। क्या इस आधार रेखा को गिट प्रोजेक्ट में शामिल करने का कोई तरीका है? – Deco

+0

मुझे यह मिला कि नौकरी https://stackoverflow.com/a/46563991/957245 – Deco

2

जो कुछ आप वर्णन करते हैं उसके समान कुछ करने का एकमात्र तरीका @ andyvn22 की तरह ग्राफिक रूप से समय सीमा निर्धारित करना है।

लेकिन, यदि आप इसे कोड में पूरी तरह से करना चाहते हैं, तो केवल एक चीज जो आप कर सकते हैं वह एक्ससीटीएस्टकेस को एक नई विधि के साथ बढ़ाता है जो बंद होने के निष्पादन समय को मापता है और इसे एक assertiong में उपयोग करने के लिए देता है, यहां एक है आप क्या कर सकते हैं के उदाहरण:

extension XCTestCase{ 
    /// Executes the block and return the execution time in millis 
    public func timeBlock(closure:()->()) -> Int{ 
     var info = mach_timebase_info(numer: 0, denom: 0) 
     mach_timebase_info(&info) 
     let begin = mach_absolute_time() 

     closure() 

     let diff = Double(mach_absolute_time() - begin) * Double(info.numer)/Double(1_000_000 * info.denom) 
     return Int(diff) 
    } 
} 

और के साथ उपयोग करें:

func testExample() { 
    XCTAssertTrue(500 < self.timeBlock{ 
     doSomethingLong() 
    }) 
} 
संबंधित मुद्दे