Utilisation du cadre robotique pour ATDD
je voudrais entendre l'expérience d'autres personnes avec le cadre de Robot pour les tests d'acceptation automatisés.
Quelles sont ses principales forces et faiblesses ainsi que toute comparaison avec d'autres cadres (principalement Fitnesse et le Sélénium)?
le code qui sera testé est du code d'héritage en temps réel, principalement en C++.
3 réponses
j'ai utilisé le Robot Cadre à trois entreprises différentes couvrant environ six ans, au moment où j'écris ceci, et tous ont réussi d'une manière ou d'une autre.
Mes expériences
entreprise 1
le premier endroit où J'ai utilisé le Robot était une application Web basée sur Java pour une société de voyages Internet de premier plan. Nous avons utilisé Robot avec Jython, qui nous permet de créer des mots-clés en Java et d'agir directement avec le système en cours de test. Nous avons utilisé le sélénium pour piloter le web navigateur, la plupart de nos tests étant sur Firefox. Alors que l'effort de test a été largement réussi avec L'organisation QA, l'organisation de développement n'a pas réussi à l'adopter -- ils ont préféré utiliser JUnit plutôt que le Robot.
société 2
ma deuxième entreprise, je pense, a été un franc succès. Nous avons utilisé le Robot de nombreuses façons. L'utilisation principale était de conduire Internet Explorer pour l'acceptation et les tests de régression d'une très grande réussite commerciale. application.
nous l'avons également utilisé pour tester une application iPad en combinant Selenium avec Appium. Nous avons utilisé Robot pour tester les services RESTful qui ont fourni des données à l'application. Nous avons écrit des mots-clés spécialisés qui nous permettent de faire une analyse d'image, et nous avons également utilisé des tests de Robot pour faire une analyse rapide de notre équipement de formation avant chaque session de formation. Nous avions des mots-clés qui nous permettaient de photographier une base de données avant un test, et de restaurer la base de données après un test.
nous avons aussi commencé Utilisation du Robot pour aider avec les tests manuels. Nous avons mis des cas de test manuel dans Robot, qui nous ont permis de tirer parti des fonctionnalités de rapport et de marquage du Robot. Lorsque ces tests étaient exécutés, ils incitaient l'utilisateur à effectuer des étapes manuelles, ce qui s'est avéré beaucoup plus efficace que lorsque nous avions des testeurs lisant des étapes manuelles à partir d'un outil de gestion de cas ou D'un document Word.
entreprise 3
la troisième entreprise était une grande entreprise (chiffre D'affaires de 1 G$) avec un personnel informatique assez important. Ils avaient les testeurs avec très faible compétence technique (je me souviens d'une personne qui n'avait aucune idée de ce qu'était une ligne de commande). Une équipe s'est consacrée à la rédaction d'une série de mots clés et à la formation et au mentorat des autres équipes. Je pense que L'utilisation de Robot a été instrumentale pour obtenir une certaine utilisation des testeurs les moins qualifiés, bien que même avec des mots-clés de haut niveau c'était une lutte avec eux.
entreprise 4
Plus récemment, j'ai déménagé dans une très petite entreprise avec seulement un poignée de développeurs et pas des testeurs. Nous avons adopté l'utilisation de les objets de page avec le robot Framework, et nous avons maintenant une suite exceptionnellement stable de tests d'acceptation de haut niveau facilement lisible. L'utilisation de robots dans cette entreprise a été un succès sans faille.
points Forts
la plus grande force du Robot est sa flexibilité. Nous avons utilisé le Robot pour soutenir le test manuel, le test de SOAP et les services de repos, le test D'UI basé sur le web, le test de base de données, mise à l'essai des images et des applications mobiles. Parce que Robot est si facile à étendre avec des bibliothèques supplémentaires, il n'y a presque rien que vous ne pouvez pas tester si vous êtes prêt à retrousser vos manches et écrire quelques mots clés. En fonction de votre configuration, vous pouvez écrire des mots-clés en Python, Java, .NET, ou tout simplement n'importe quelle langue via L'API Robot remote.
parce que les cas de test de Robot et les mots-clés sont écrits en texte simple, vous n'êtes pas bloqué à l'aide d'un outil propriétaire pour créer ou vue des tests. Les utilisateurs peuvent choisir l'outil de leur choix -- Visual Studio, Eclipse, Emacs, Bloc-notes, etc. Il y a aussi un IDE (RIDE) spécifique au Robot, mais je ne le recommande pas. En outre, parce que les fichiers sont du texte simple, ils s'intègrent bien avec d'autres outils logiciels -- ils sont faciles à distinguer et à fusionner, à rechercher, etc.
Faiblesses
le Robot rend facile d'écrire des tests de mauvaise qualité. Bien qu'il existe des installations pour documenter les mots clés et les cas d'essai, et d'utiliser des noms lisibles par l'homme pour les mots-clés, les cas d'essai et les variables, il n'y a pas de bonne façon d'appliquer les pratiques exemplaires. La rédaction d'un grand nombre de tests et de mots-clés exige de la discipline. Comme le dit le proverbe, Robot donne beaucoup de corde pour se pendre avec.
une autre faiblesse est que le rythme de progression sur le Robot est assez lent. Du côté positif, le Robot est robuste et relativement exempt de bogues, donc il n'y a pas un grand besoin de patches fréquents. Cependant, il y a des demandes de fonctionnalités qui languissent dans leur traceur de problème depuis des années sans aucun mouvement, ce qui peut être décourageant.
résumé
dans toutes les entreprises, nous avons apprécié de pouvoir tirer parti de la flexibilité fournie par la syntaxe du Robot pour créer des tests basés sur des données, des tests de style BDD, ainsi que des tests de procédure simples. Et dans tous les cas, parce que les tests sont des fichiers texte, les ressources de test étaient faciles à gérer avec nos outils SCM (Mercurial, Subversion, et Git)
pour moi, le Robot s'est avéré facile à utilisation, extrêmement facile à étendre, et utile pour un large éventail de tâches de test, depuis le test à l'unité des fonctions Python, jusqu'au test des services web, basé sur le navigateur et le test de L'interface utilisateur de la tablette, le test des images, le test des bases de données, et même pour améliorer l'efficacité du test manuel.
nous utilisons le robot Framework sur mon lieu de travail depuis plus d'un an avec un succès modéré. Comme l'affiche,nous faisons aussi du c++. Nous avons pris un certain temps pour évaluer Robot contre Fitnesse / Slim et, à l'époque, les deux solutions étaient bonnes, mais les facteurs décisifs étaient (à partir de ~2009):
- il était plus clair comment Robot et ses rapports seraient étendus à de grands projets
- il n'était pas évident de contrôler la version de Fitnesse artéfacts
d'un point de vue technique, nous avons utilisé SWIG pour faire le pont entre le Robot et le C++. Nous enveloppons nos fixtures de test en SWIG et les associons avec le code de production sous test - nous donnant un module python qui peut être importé par Robot.
Nous utilisons le .format txt pour Robot d'entrée presque exclusivement - nous avons trouvé que cette version des contrôles mieux, c'est plus facile à lire, et nous n'étaient tout simplement pas utiliser les fonctionnalités avancées du langage HTML (qui est là où nous avons commencé). En outre, nous utilisons l' "BDD Style" la syntaxe du Robot aussi. Nous utilisons GoogleMock avec quelques enveloppements pour nous aider à définir les attentes qui sont vérifiées lors du démontage de chaque test de Robot.
autant Que l'organisation de tests, nous avons retenu l'approche suivante (avec l'inspiration d' L'approche de Dale Emery donnée ici):
- la hiérarchie fonctionnelle majeure est représentée par un dossier structure.
- une chose de la taille d'une fonctionnalité est décrite dans le nom d'un fichier de test D'un Robot.
- une description de chaque partie de cette fonctionnalité est utilisée au nom du cas D'essai du Robot.
- un exemple est donné comme les étapes dans le cas d'essai.
- le texte de l'exemple est décomposé en étapes à L'aide de "mots-clés"de Robot.
- le montage d'essai commande le code de production.
Par exemple, un téléphone peut avoir quelque chose comme ceci:
// PhoneProject/MakingCalls/DialAPhoneNumber.txt
*** Test Case ***
A user can dial a US number with an area code, up to 10 digits
Given a phone without any numbers dialed
Expect the attempted phone number to be 123-456-7890
When a user enters the numbers 1234567890
// A separate MakingCallsKeywords.txt or something similar
*** Keyword ***
Given a phone without any numbers dialed CreateNewDialer
Expect the attempted phone number to be ${phoneNumber} ExpectDialedNumber ${phoneNumber}
When a user enters the numbers ${numbersEntered} DialNumbers ${numbersEntered}
// MakingCallsFixture.cpp (which gets wrapped by SWIG)
std::wstring MakingCallsFixture::DialNumbers(const std::wstring& numbersEntered)
{
... Drive production code ...
}
// CreateNewDialer, ExpectDialedNumber also go here
nous couplerions alors cela avec des tests unitaires qui couvrent les conditions de coin (par exemple s'assurer que pas plus de 10 chiffres sont autorisés) - ou peut-être que ce serait un autre test d'acceptation (exécutable spec) selon qui lit les tests et leur familiarité avec le domaine.
nous créons une ébauche de ces spécifications et les révisons avec les experts du domaine et l'équipe avant de commencer les travaux. Cela a permis de débusquer un certain nombre de malentendus dès le début.
J'ai utilisé le cadre robotique pour les scénarios suivants.
test de L'IU
- Le Robot cadre est vraiment bon pour les tests de l'interface utilisateur
- le framework est livré avec l'éditeur RIDE qui peut être utilisé pour écrire des cas de test.
- vous n'avez pas besoin d'être un expert en commandes de sélénium et de sélénium sont consultables dans L'éditeur de RIDE.
- vous pouvez avoir du code partagé en utilisant des mots-clés et partagé ressources. Il vous permet de réutiliser simplement cas d'essai et essai le code de bibliothèque.
- vous pouvez appeler facilement une fonction de bibliothèque Python pour effectuer des tâches plus fastidieuses.
test de service, j'ai trouvé le cadre du Robot un peu difficile à utiliser pour le genre d'automatisation de test que j'entreprenais.
notre couche de service d'application est entièrement écrite en C / C++ . Je travaille personnellement sur un ordinateur portable Windows et notre application réside sur un serveur Linux.
j'ai trouvé la * Cadre Fitnesse* * beaucoup plus utile et plus simple à faire l'automatisation avec. Fitnesse avait les caractéristiques supplémentaires mentionnées ci-dessous qui ont permis d'écrire des cas de test facilement. Je N'ai pas pu trouver des fonctionnalités similaires dans Robot.
table de décision - vous pouvez écrire des cas de test dans Microsoft .xls type de format. Chaque ligne de la grille de données représente un cas d'essai. Chaque ligne aura un ensemble d'entrées et de sorties. Sorties sera précédée par un point d'interrogation dans le tête.
Table D'Interrogation Sortie du test sera liste de données que vous souhaitez valider.
aussi Fitnesse permet intégration facile avec D'autres langues comme C (en utilisant le service Slim). Cela ne nécessite pas de codage d'intégration. Les cas de test de Fitnesse exécutent directement les fixtures de test, les getters et les setters.
le Résumé de mon expérience:
j'ai trouvé un outil facile à utiliser pour UI automation.
je l'ai trouvé un peu difficile à utiliser pour l'automatisation des services.