1

我有一个testmethod在数据库testNGthreadPoolSize = 10创建记录的 in

我需要计算所有线程创建所有记录所花费的总时间请帮助我找到相同的。

@Test(threadPoolSize = 10, invocationCount = 10)
public void testCreate(){
       long StartTime = new Date().getTime() ; 
        //operation to create records
       long EndTime = new Date().getTime() ;

     }

如何计算上述代码中所有线程所花费的时间?

上面的代码给了我一次只被一个线程占用的时间。

4

2 回答 2

0

我会调用一个类似于 startTick() 的外部函数,它会跟踪 startTime,然后一旦设置,就不会被覆盖,而 endTick() 会收集所有结束时间。在 afterTest 中,我可以做 endTick - startTick..类似的事情:

startTick(){
  if(startTime == null)
    startTime = new Date().getTime();
}

testCreate() {
  startTick(); 
        //operation to create records
  endTick();
}

endTick(){
    endTime = new Date().getTime();
}
@AfterTest
afterTest(){
  endTime - startTime;
}
于 2012-12-24T12:06:06.897 回答
0

听起来您需要发布有关测试时间的数据,以便它可以在报告中使用,而不是在同一测试的其他线程中使用。

为此,您可以将每个测试的结果存储在某个中心位置并稍后查找总数。以下对您有用吗?

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

}

如果你想为整个测试计时,而不仅仅是它的一部分,你可以使用ITestResultTestNG 提供的接口。

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

但是,时间可能与上述时间不同,因为可能会有额外的开销。

于 2012-12-25T00:14:15.950 回答