Измерение времени выполнения тестового примера

Я пытаюсь измерить и увеличить время выполнения тестового примера. Я делаю следующее:

  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 (примечание: не мой сайт). См. также stackoverflow.com/questions /25101370/ и stackoverflow.com/questions /382113/генерировать-процессор-загрузить-в-java   -  person    schedule 20.11.2017
comment
@Mahmoud_Bokhari Я думаю, что соотношение не увеличилось, потому что по мере увеличения abcTime увеличивается testEndTime. или я что-то упускаю?   -  person user1207289    schedule 30.11.2017