听起来您需要发布有关测试时间的数据,以便它可以在报告中使用,而不是在同一测试的其他线程中使用。
为此,您可以将每个测试的结果存储在某个中心位置并稍后查找总数。以下对您有用吗?
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);
}
但是,时间可能与上述时间不同,因为可能会有额外的开销。