52 votes

Interface de test: en quoi et comment le tester, et quel outil utiliser?

J'ai écrit des essais pour mon code Ruby pendant un certain temps, mais en tant que développeur frontend, je suis évidemment intéressé à porter cette dans le code que j'ai écris pour mon frontend code. Il ya quelques options différentes que j'ai été jouer avec:

Ce sont des gens à l'aide de tests? Et plus loin que ce que font les gens dans le test? JavaScript? Les liens? Les formes? Codé en dur contenu?

Toutes les pensées seraient grandement appréciés.

83voto

carlos Points 399

J'ai eu les mêmes questions il y a quelques mois et, après avoir parlé à beaucoup de développeurs et de faire beaucoup de recherches, c'est ce que j'ai trouvé. Vous devriez unité de tester votre JavaScript, écrire un petit ensemble de l'INTERFACE utilisateur, les tests d'intégration et d'éviter d'enregistrement et de lecture des outils de test. Laissez-moi expliquer que dans plus de détails.

Tout d'abord, considérons le test de la pyramide. C'est une analogie intéressante créée par Mike Cohn qui vous aidera à choisir le type de test que vous devriez faire. Au bas de la pyramide sont les tests unitaires, qui sont solides et de fournir la réponse rapide. Ceux-ci devraient être le fondement de votre stratégie de test et donc occuper la plus grande partie de la pyramide. En haut, vous avez l'INTERFACE utilisateur des tests. Ces tests qui interagissent avec votre INTERFACE utilisateur directement, comme le Sélénium n'par exemple. Bien que ces tests peuvent vous aider à trouver les bugs, ils sont plus chers et offrent une très lente de la rétroaction. Aussi, selon l'outil que vous utilisez, ils deviennent très fragiles et vous allez vous retrouver dépenser plus de temps à l'entretien de ces tests que l'écriture réelle de la production de code. La couche de service, dans le milieu, comprend des tests d'intégration qui ne nécessitent pas d'INTERFACE utilisateur. Dans les Rails, par exemple, vous pouvez tester votre interface REST directement au lieu d'interagir avec les éléments du DOM.

Maintenant, revenons à votre question. J'ai découvert que je pouvais réduire considérablement le nombre de bugs dans mon projet, qui est une application web écrite au Printemps Roo (Java) avec des tonnes de JavaScript, il suffit d'écrire assez de tests unitaires pour le JS. Dans mon application, il y a beaucoup de logique écrit en JS et c'est le genre de chose que je suis en train de tester ici. Je ne suis pas préoccupé par la façon dont la page a vraiment l'air ou si les animations joue comme ils le devraient. Je test si les modules que j'écris en JS exécuter les attendus de la logique, si un élément classes sont correctement affectées et si les conditions d'erreur sont bien gérées. Pour ces tests, j'ai été en utilisant le Jasmin. C'est un outil formidable. Il est très facile à apprendre et a beau se moquant de capacités, qui sont appelés les espions. Jasmin-jQuery ajoute plus grande fonctionnalité si vous êtes à l'aide de jQuery. En particulier, elle permet de préciser les luminaires, qui sont des fragments de code HTML, de sorte que vous n'avez pas manuellement moquer de la DOM. J'ai intégré cet outil avec maven et ces tests font partie de mon implant stratégie.

Vous devez être prudent avec les tests de l'INTERFACE utilisateur, spécialement si vous comptez sur enregistrement/de lecture, des outils comme le Sélénium. Depuis l'INTERFACE utilisateur change souvent, ces tests garder de les casser et de vous passerez beaucoup de temps pour trouver si les tests vraiment échoué, ou si elles sont simplement dépassés. Aussi, ils ne sont pas d'ajouter autant de valeur que les tests unitaires. Depuis ils ont besoin d'un environnement intégré pour l'exécuter, vous aurez la plupart du temps comme les exécuter seulement après la fin du développement, lorsque le coût de la fixation des choses est plus élevé.

Pour la fumée, des tests de régression, cependant, l'INTERFACE utilisateur tests sont très utiles. Si vous avez besoin d'automatiser, alors vous devez regarder pour certains dangers. Écrire vos tests, de ne pas les enregistrer. Enregistré tests reposent généralement sur générée automatiquement des requêtes xpath que de pause pour chaque petit changement que vous faites sur votre code. Je crois que le Concombre est un bon cadre pour l'écriture de ces tests et vous pouvez l'utiliser avec WebDriver pour automatiser le navigateur de l'interaction. Code de la réflexion sur les tests. Dans l'INTERFACE utilisateur de tests, vous devrez apporter des éléments plus faciles à trouver si vous n'avez pas à compter sur les complexes des requêtes xpath. Ajout de la classe et id des éléments où vous habituellement ne sont pas fréquents. Ne pas écrire des tests pour chaque petit coin de cas. Ces tests sont coûteux, d'écrire et de prendre trop de temps à s'exécuter. Vous devriez vous concentrer sur les cas qui explorent la plupart de vos fonctionnalités. Si vous écrivez trop de tests à ce niveau, vous aurez probablement tester la même fonctionnalité que vous avez déjà testé sur des tests unitaires (en supposant que vous avez écrites).

Dans mon projet actuel, je suis à l'aide de Spock et Geb pour écrire les tests de l'INTERFACE utilisateur. Je trouve ces outils incroyables. Ils sont écrits en Groovy, ce qui convient mieux à mon projet Java.

4voto

buxter Points 54

Il y a beaucoup d'options et d'outils pour cela. Mais leur choix dépend de si vous avez une INTERFACE web ou une application de bureau?

En supposant à partir des outils que vous avez mentionné, c'est l'INTERFACE utilisateur Web. Je suggère de Sélénium (aka WebDriver): http://seleniumhq.org/docs/

Il existe une variété de langues, il prend en charge (Ruby est dans la liste). Elle peut être exécutée à l'encontre d'une variété de navigateurs, annonce, il est très facile à utiliser avec beaucoup de tutoriels et de conseils disponibles. Oh, et c'est gratuit, bien sûr :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X