2009-03-07 9 views
1

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

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

ответ

2

Когда мне нужно сделать это в большом наборе тестов, я переопределяю настройку и отключение 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

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

установки как Сара написала, но 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); 
    } 
} 
+0

Интересно. В Ruby вы, вероятно, захотите сделать это в классе TestSuite. Если вы добавите его в TestCase, для каждого тестового класса будет один массив execute_times, а не один для пакета. –

+0

В этом разница между BeforeClass и Before. BeforeClass будет выполняться ОДИН раз, прежде чем будет выполнен для каждого тестового примера. – guerda

1

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

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 будет also иметь бенчмаркинг.