2016-07-14 14 views
11

Testim, 0,5 saniyeden daha yavaş çalışırsa başarısız olur, ancak ortalama süre yalnızca konsolda yazdırılır ve ona erişmenin bir yolunu bulamıyorum. Bu verilere erişmenin bir yolu var mı?Çok yavaşsa bir performans testi nasıl başarısız olur?

Kod

//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)") 
} 

Test Verileri

[Tests.ParserTest testParticipantCodeParsingPerformance] ölçülen [Zaman, saniye] ortalama: 0.203, nispi standart sapma: 19,951,% değerleri: [0.186405, 0.182292, 0.179966, 0.177797, 0.175820, 0.205763, 0.315636, 0.223014, 0.200362, 0.178165]

cevap

8

Performans testiniz için bir temel belirlemeniz gerekir.

Report Navigator

ve en son deneme belirleyin: Rapor Navigator için baş. Tüm testlerinizin bir listesini göreceksiniz, ancak performansları onlarla ilişkili zamanlara sahip olacak. Performans Sonucu popover getirmek için zaman tıklayın:

Performance Result

"Taban" değeri aradığınız budur - 0.5s olarak ayarlayın ve bu testte bu Xcode bilgilendirecektir gerektiği yarım saniyede tamamlanır. Testiniz taban çizgiden% 10 daha yavaşsa, başarısız olur!

+1

Bunlar iyi çalıştı ama onlar sadece benim makinede lokal olarak çalışabilir onların taban çizgileri ayarlanmamıştır. Bu temel çizgiyi git projesine dahil etmenin bir yolu var mı? – Deco

+0

İşi bu yapan https://stackoverflow.com/a/46563991/957245 – Deco

2

Tanımladığınız şeye benzer bir şey yapmanın tek yolu, grafiksel olarak @ andyvn22'nin önerdiği gibi bir zaman sınırı belirlemektir.

Ancak, bunu tamamen kod içinde yapmak istiyorsanız, yapabileceğiniz tek şey, XCTestCase'i, kapağın yürütme süresini ölçen ve bunu bir assertiong içinde kullanılmak üzere döndüren yeni bir yöntemle genişletmektir. yapabileceğin şeyleri içeren örnek:

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) 
    } 
} 

ve ile kullanmak: Projemde ve diğer tüm kullanıcılar için git kullanıyorum

func testExample() { 
    XCTAssertTrue(500 < self.timeBlock{ 
     doSomethingLong() 
    }) 
} 
İlgili konular