2016-07-14 5 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.179966,0.177797,0.175820,0.205763,0.315636,0.223014,0.200362,0.178165]

答えて

8

パフォーマンステストのベースラインを設定する必要があります。レポートナビゲータにヘッド:

Report Navigator

と最近のテスト実行を選択します。すべてのテストのリストが表示されますが、パフォーマンスには時間が関連付けられています。パフォーマンス結果のポップオーバーを起動する時間をクリックします。

Performance Result

「ベースライン」の値は、あなたが探しているものである - 0.5秒に設定し、それがこのテストというのXcodeを通知しますべき半分で完了します。テストがベースラインよりも10%以上遅い場合、失敗します!

+1

これらがうまく働いているが、彼らは唯一の私は私のプロジェクトと他のすべてのユーザーのためのGitを使用しています、私のマシン上でローカルに動作しますベースラインを設定しないでください。このベースラインをgitプロジェクトに含める方法はありますか? – Deco

+0

私はこれを発見しました https://stackoverflow.com/a/46563991/957245 – Deco

2

あなたの説明に似た何かをする唯一の方法は、@ andyvn22のようなグラフィカルに時間制限を設定することです。

しかし、完全にコード内で実行したいのであれば、XCTestCaseをクロージャの実行時間を測定してアサーションに使用するための新しいメソッドで拡張することができます。ここではあなたは何ができるかの例:

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() 
    }) 
} 
関連する問題