2009-03-07 7 views
1

Dans le test/l'unité de ruby, le logiciel indique le temps nécessaire à l'exécution des tests, et la série de passes, d'erreurs et de défaillances se comporte comme une pseudo-barre de progression. En plus d'utiliser des outils de profilage de code ou d'exécuter des tests individuellement, y a-t-il un moyen facile de dire quelles méthodes de test sont rapides et lesquelles sont lentes?Identification des tests à exécution lente

Répondre

2

Lorsque j'ai besoin de le faire dans une grande suite de tests, je substitue l'installation et le démontage de Test :: Unit :: TestCase. Il ne donne pas de mesures précises, mais il peut aider à évaluer la vitesse relative.

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

Selon la réponse de Sarah, je préférerais une autre solution:

installation comme Sarah a écrit, mais le Teardown doit ajouter le nom du test et le temps d'exécution dans une liste.
Donc, vous pouvez évaluer cette liste, pour le tri ou quoi que ce soit. Je ne connais pas Ruby, donc je ne sais pas si ça marcherait.

Voici un code Java pour JUnit pour expliquer mes pensées ...

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

Intéressant. Dans Ruby, vous voudrez probablement le faire dans la classe TestSuite. Si vous l'avez ajouté à TestCase, il y aura un tableau execution_times pour chaque classe de test, plutôt qu'un pour la suite. –

+0

C'est la différence entre BeforeClass et Before. BeforeClass sera exécuté une fois, avant sera exécuté pour chaque cas de test. – guerda

1

Si vous utilisez la pierre précieuse unité de test, l'exécution des tests en mode verbose vous donnera des informations sur la durée de chaque Test a pris:

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 sera also avoir l'analyse comparative.

Questions connexes