2010-03-01 4 views
10

Depuis quelque temps, j'ai étudié Selenium RC afin de faire des tests fonctionnels de mon application web. J'ai maintenant trouvé une stratégie de test qui est si efficace, que je ne veux pas abandonner Selenium RC (après avoir passé des semaines à essayer de trouver un bon moyen de valider les contrôles de validation ASP.NET). Mais maintenant que mon aventure Selenium RC passe d'un POC à quelque chose que j'utilise actuellement, je suis confronté à un problème. C'est follement lent. Exécuter un seul test qui charge une page, remplit certains champs, et clique sur un bouton prend dans l'ampleur de secondes à exécuter. Quand il est en cours d'exécution, je peux facilement voir chaque champ individuel être rempli un à la fois. L'utilisation de Selenium IDE dans Firefox n'est pas si lente.Pourquoi Selenium RC est-il si lent?

J'ai trouvé cette page, qui indique clairement que Selenium RC est lent http://selenium-grid.seleniumhq.org/how_it_works.html

Mais pourquoi est-ce? Est-ce parce que le navigateur interroge le serveur sélénium? Si oui, cet intervalle d'interrogation ne peut-il pas être modifié? Ou y a-t-il une autre raison? Je ne suis pas habitué à un appel à distance prenant un temps humainement notable à exécuter.

Il est horrible que l'exécution de quelques tests devrait prendre tellement de temps. Je peux exécuter toute ma suite de tests de présentation (MVP), d'entreprise et de couche de base de données (plus de 500 tests) de manière plus rapide qu'il n'en faut pour exécuter 10 tests pour une seule page Web.

Répondre

7

Les tests fonctionnels/d'intégration prendront plus de temps à s'exécuter, car ils s'exécutent dans un navigateur. Cela signifie qu'il doit charger les 3 couches de votre MVC, puis les exécuter et la même chose quand il fait quelque chose sur la page. Chaque action a donc le potentiel de descendre dans la base de données. C'est intrinsèquement une tâche longue comparée aux tests unitaires.

Les tests démarrent en faisant un open sur cette page qui attend alors que tout soit chargé. Donc, si cela prend beaucoup de temps, cela pourrait prendre beaucoup de temps pour votre utilisateur s'il accède à la page. Par exemple. Beaucoup d'images, JavaScript/CSS non-modifié, mauvaises expirations lors des téléchargements. Cette page de Selenium indique que le serveur est un goulot d'étranglement car il implique que vous exécutez les tests de manière synchrone et que si vous avez migré vers Selenium Grid, vous pouvez les exécuter en parallèle pour accélérer la suite de tests. Cela ne signifie pas que le serveur sélénium interroge pour savoir ce qu'il doit faire, mais plutôt que les serveurs Selenium interrogent le concentrateur Grid pour voir s'il est toujours vivant et pour montrer qu'ils sont toujours en vie.

L'autre raison pour laquelle les tests sont lents est que le langage de base de Selenium est JavaScript qui interagit avec le DOM. Le DOM peut ralentir beaucoup les choses, surtout si vos tests utilisent XPath comme localisateurs. XPath + JavaScript + IE + Selenium == Douloureux et il n'y a rien que les développeurs de Selenium puissent faire plus pour l'affiner. Eh bien il y a et cela va être Selenium 2 qui est en alpha et peut être téléchargé à partir de http://selenium.googlecode.com/. J'ai travaillé sur l'implémentation .NET et je vois des améliorations de vitesse énormes pour le moment. J'ai blogged à ce sujet parce que les changements m'ont étonné. Je voyais jusqu'à 8 tests en cours d'exécution dans le même temps, il utilisait Selenium 1 pour exécuter 1 test

+0

Salut. Merci pour la réponse. Je suis parfaitement conscient que les tests fonctionnels sont relativement lents. Mais le sélénium RC lui-même est beaucoup plus lent que "normal", c'est-à-dire non sélénium RC.Exécuter un test qui ouvre une page avec un formulaire, remplit 15 champs, et soumet le formulaire prend une fraction de seconde en utilisant Selenium IDE. Le même test prend environ une seconde en utilisant Selenium RC et le pilote .NET. Il y a donc clairement un coût spécifique à RC. – Pete

+2

Démarrage du navigateur est un gros frais généraux et est spécifique RC. Dans toutes les autres instances de sélénium, le navigateur doit être ouvert pour lancer le test. – AutomatedTester

+1

Il y a un autre délai, autre que le démarrage du navigateur. En mi-test, Selenium RC sur IE prend plusieurs secondes juste pour remplir et soumettre un seul champ pour moi. –

2

Est-il possible que votre vitesse d'exécution par défaut est trop faible? Découvrez les méthodes getSpeed ​​() et setSpeed ​​() sur DefaultSelenium.

7

Testez-vous avec IE et Selenium en mode multi-fenêtres? Ceci est extrêmement lent et vous devriez essayer de démarrer le séleniumserver avec -singlewindow