同じテストの他のスレッドでは使用されず、レポートで使用できるように、テスト時間に関するデータを公開する必要があるようです。
このために、各テストの結果を中央の場所に保存し、後で合計を見つけることができます。以下はあなたのために働くでしょうか?
public class TimeTest {
Map<Long, Long> timeRecord = new ConcurrentHashMap<Long, Long>();
@Test(threadPoolSize = 10, invocationCount = 10)
public void testCreate(){
long threadID = Thread.currentThread().getId();
long startTime = new Date().getTime() ;
//operation to create records
long endTime = new Date().getTime();
long diffTime = endTime - startTime;
timeRecord.put(threadID, diffTime);
// Log time taken
System.out.println("TestMethod[" + threadID + "] TestTime: " + diffTime);
}
@AfterTest
public void displayTime() {
long runtime = 0;
for (Long threadID : timeRecord.keySet()) {
runtime += timeRecord.get(threadID);
}
System.out.println("AfterSuite TotalTime: " + runtime);
}
}
テストの一部だけでなく、テスト全体の時間を測定したい場合はITestResult
、TestNG が提供するインターフェースを使用できます。
@AfterMethod
public void recordTime(ITestResult testResult){
long threadID = Thread.currentThread().getId();
long timeDiff = testResult.getEndMillis() - testResult.getStartMillis();
// Log time taken
System.out.println("AfterMethod[" + threadID + "] TestTime: " + timeDiff);
}
ただし、追加のオーバーヘッドが発生する可能性があるため、上記の時間とは異なる場合があります。