Измерване на времето за изпълнение на тестов случай

Опитвам се да измеря и увелича времето за изпълнение на тестов случай. Това което правя е следното:

  1. Да приемем, че тествам метода abc() с помощта на testAbc().
  2. Използвам android studio и junit за моята разработка на софтуер.
  3. В самото начало записвам времевия знак в нано секунди в началната променлива и след това, когато методът приключи, той връща разликата между текущите нано секунди и началото.
  4. testAbc() е разделен на 3 части: инициализация, тестване abc() и твърдение (проверка на резултатите от теста).
  5. Проследявам времето за тестване в testAbc() по същия начин, както правя в метода abc().
  6. след изпълнение на теста открих, че методът abc() отнема около 45-50% от времето за тестване.
  7. Промених testAbc() както следва:
void testAbc(){
startTime = System.nanoTime();
//no modification to the initialization part
//testing abc part is modified by placing it in a for loop to increase its 
//execution time.
for(int i=0 ; i < 100; i++)
{
    //test abc code goes here ...
    abcTime += abc();
}

//assertion part wasn't modified
testEndTime = System.nanoTime - startTime;
}

Повтаряйки тестовата част, мислех, че съотношението между abcTime и testEndTime ще се увеличи (чрез драстично увеличаване на abcTime), но това изобщо не беше, имах предвид, че е 45-50%.

Моите въпроси:

  • Защо съотношението не се увеличи? Имам предвид, че по принцип времето за изпълнение на частите за инициализация и твърдение не трябва да се влияе от for цикъла и следователно времето за abc трябва да се доближи до тестовото време след 100 повторения.
  • Как мога да увелича съотношението между abc() и testAbc()?

благодаря ви за отделеното време.


person Mahmoud_Bokhari    schedule 19.11.2017    source източник
comment
Защо трябва да забавите теста си? Какво ще кажете да използвате малко Thread.sleep() в теста?   -  person    schedule 19.11.2017
comment
Здравей RC, благодаря ти за отговора. Трябва да увелича изчислението на моите тестове, за да измеря неговата консумация на енергия с помощта на вътрешния индикатор за гориво. Опитах Thread.sleep() и използвах for цикъл (1 до 1000000) вътре в abc(). Те са много ефективни за увеличаване на времето, но не увеличават изчислението.   -  person Mahmoud_Bokhari    schedule 20.11.2017
comment
Не знам какво е изчисление, но може би това, което искате, е да симулирате натоварването на процесора, ако е така: caffinc.github.io/2016/03/cpu-load-generator (NB: не е моят сайт). Вижте също stackoverflow.com/questions /25101370/ и stackoverflow.com/questions /382113/generate-cpu-load-in-java   -  person    schedule 20.11.2017
comment
@Mahmoud_Bokhari Мисля, че съотношението не се е увеличило, защото с увеличаването на abcTime, testEndTime също се увеличава. или пропускам нещо?   -  person user1207289    schedule 30.11.2017