Выявление медленных тестов - PullRequest
1 голос
/ 07 марта 2009

В тесте / модуле ruby ​​программное обеспечение указывает, сколько времени требуется для выполнения тестов, а серии прохождений, ошибок и неудач действуют как псевдо-индикатор выполнения.

Помимо использования инструментов профилирования кода или выполнения тестов по отдельности, существует ли простой способ определить, какие методы тестирования являются быстрыми, а какие - медленными?

Ответы [ 3 ]

2 голосов
/ 07 марта 2009

Когда мне нужно сделать это в большом наборе тестов, я перезаписываю настройку Test :: Unit :: TestCase и демонтаж. Он не дает точных измерений, но может помочь оценить относительную скорость.

module Test
  module Unit
    def setup
      @start_time = Time.now
    end

    def teardown
      puts "#{@method_name}: #{Time.now - @start_time}s"
    end
  end
end
1 голос
/ 17 января 2010

Если вы используете гем test-unit, запуск тестов в подробном режиме даст вам информацию о том, сколько времени занял каждый тест:

ruby test/test_unit.rb --verbose
Loaded suite test/test_unit
Started
ChaserTestCase: 
  test_handle_funny_characters_in_class_method_names:   .: (0.000645)
  test_handle_funny_characters_in_instance_method_names:.: (0.000523)
  test_modify_and_unmodify_class_method:                .: (0.000534)
...
Finished in 0.019894 seconds.

MiniTest будет также иметь бенчмаркинг.

1 голос
/ 09 марта 2009

Согласно ответу Сары, я бы предпочел другое решение:

Установка, как написала Сара, но Teardown должен добавить имя теста и время выполнения в список.
Таким образом, вы можете оценить этот список, для сортировки или чего-то еще. Я не знаю Руби, поэтому не знаю, сработает ли это.

Вот код Java для JUnit, чтобы объяснить мои мысли ...

public class ExecutionTimeTest {

  public static ArrayList<Double> executionTimes;

  public double start;

  @BeforeClass
  public static void initializeList() {
    executionTimes = new ArrayList<Double>();
  }

  @AfterClass
  public static void printExecutionTimes() {
    int i = 1;
    for (Double time : executionTimes) {
      System.out.println("Test " + (i++) + ": " + time);
    }
  }

  @Before
  public void startExecutionTime() {
    start = System.currentTimeMillis();
  }

  @After
  public void calculateExecutionTime() {
    executionTimes.add(System.currentTimeMillis() - start);
  }
}
...