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
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
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);
}
}
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.
- 1. SQL: requête sur la vue - exécution lente
- 2. Exécution d'une mise à jour lente avec SSIS
- 3. Exécution de tests unitaires sur des fonctions imbriquées
- 4. Exécution de tests XUnit.net avec TestDriven.net
- 5. Exécution de tests depuis un module
- 6. Exécution de tests automatisés sur TFS 2008
- 7. Exécution de tests VSTS sans mstest.exe
- 8. Ruby on Rails: Exécution de tests
- 9. Identification des références de service Web ASP.NET
- 10. iPhone: Suivi/Identification des touches individuelles
- 11. Exécution de tests en tant qu'utilisateur différent dans Visual Studio
- 12. Identification des fichiers pour un correctif/correctif
- 13. Identification des espaces blancs en C++
- 14. Identification des blocs identiques du code
- 15. Ruby - Exécution de tests dans un ordre aléatoire avec rake
- 16. Identification d'IIS 7 à l'aide de NSIS
- 17. Hashtable lente pour ajouter des valeurs?
- 18. Traitement des clients avec une connexion lente
- 19. Exécution du résumé NUnit après l'exécution des tests NUnit dans un fichier de commandes
- 20. Identification des exceptions en double pour le suivi des bogues
- 21. cvs checkin: Identification des noms des fichiers archivés
- 22. Console lente à apparaître pendant le débogage
- 23. Identification d'objet R
- 24. Pourquoi la détection des touches devient-elle plus lente et plus lente?
- 25. lente exportation de l'accès à Excel
- 26. Héritage des tests unitaires
- 27. Identification de hauteur sous Linux
- 28. Comment générez-vous des tests à partir des spécifications?
- 29. Comment optimiser cette requête MySQL lente (très lente)?
- 30. Tables à langer de MyISAM à InnoDB font lente
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. –
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