Astuces et conseils Squish Qt : travailler avec des objets sans propriétés uniques
Chez Spyrosoft, nous savons que lorsqu'il s'agit de tests logiciels, l'efficacité et la précision sont cruciales. C'est là qu'intervient Squish, un framework polyvalent pour les tests automatisés d'interface graphique. Dans cet article, nous partageons des astuces et des conseils pour certains des problèmes les plus courants rencontrés avec Squish lors de projets d'automatisation de tests Qt. Nous explorons également comment gérer les objets qui ne possèdent pas les propriétés habituelles sur lesquelles les testeurs logiciels s'appuient généralement.
Que sont les applications Qt ?
Les applications Qt sont développées à l'aide de framework Qt. Qt est un framework multiplateforme basé sur C++ qui fournit une large gamme d'outils et de bibliothèques pour créer des GUI (interfaces graphiques utilisateur) et d'autres composants logiciels pour les applications de bureau, mobiles et web.
Le plus grand avantage des applications Qt c'est qu'elles peuvent fonctionner sur plusieurs systèmes d'exploitation, notamment Windows, macOS, Linux, Android et iOS. Avec les applications Qt, les développeurs peuvent écrire le code une seule fois et le déployer sur diverses plateformes. Il n'est pas nécessaire de procéder à d'importantes modifications du code.
En raison de cette polyvalence, Qt est couramment utilisé dans diverses industries. Il est particulièrement populaire pour la création d'applications multiplateformes dotées d'interfaces graphiques riches.
Qu'est-ce que Squish ?
Squish est un outil de test automatisé. Il est principalement utilisé pour tester les interfaces utilisateur graphiques (GUI) dans les applications développées avec Qt. Squish est l'un de nos principaux outils de test, principalement en raison des avantages significatifs que cet outil offre :
- Capacités multiplateformes : Squish prend en charge un large éventail de plateformes, notamment Windows, macOS, Linux/Unix, iOS, Android et divers systèmes embarqués. Par conséquent, nous pouvons utiliser les mêmes processus de test sur différentes plateformes.
- Prise en charge de diverses technologies d'interface graphique (GUI): Nous utilisons Squish pour tester des applications développées à l'aide de diverses technologies d'interface graphique, telles que Qt, Java, Windows Forms, Web (HTML5/JavaScript), et bien d'autres.
- Tests automatisés: Squish peut être intégré aux processus CI/CD, ce qui rend les tests automatisés possibles et efficaces. Ainsi, nous pouvons traiter les problèmes potentiels dès le début du processus de développement.
- Squish GUI Tester: Le Squish GUI Tester est un outil polyvalent permettant d'exécuter des tests automatisés dans divers scénarios, notamment les tests par lots distribués et les applications hybrides. Il prend en charge plusieurs langages de script et offre un environnement intuitif pour l'enregistrement et la relecture, ce qui améliore le processus de test.
Vous souhaitez en savoir plus sur notre offre de services Qt ?
En savoir plusSquish for Qt – surmonter les obstacles de l'automatisation QA
Maintenant que nous avons couvert les bases, examinons un défi courant d'automatisation des tests. Il se produit lorsque l'objet que nous voulons utiliser dans un script n'a pas d'ID unique.
La production de scripts de test stables et performants est essentielle pour surmonter ces obstacles à l'automatisation des QA. Ces scripts simplifient la création, la maintenance et le dépannage des tests, en particulier lorsqu'ils s'appuient sur des cartes d'objets et des outils d'identification d'objets.
En travaillant avec Squish, nous pouvons rechercher d'autres propriétés uniques des objets et les utiliser pour créer une automatisation précise et fiable. Cependant, il nous arrive parfois de manquer ces deux ingrédients essentiels à une automatisation réussie. Par exemple, cela peut se produire en raison d'un manque de coopération de la part des développeurs ou simplement parce que certains des QML propriétés qui provoquent l'effet secondaire d'avoir plusieurs éléments avec les mêmes propriétés.

Dans cet exemple, le développeur QML tente de créer une liste de boutons avec quelques libellés. Bien sûr, vous pourriez modifier cela pour créer un ID unique. Mais l'automatisation des tests commence souvent tard dans le projet, lorsqu'il existe déjà une dette technique importante.
Le résultat du code ci-dessus se présente comme suit :

Maintenant, si nous souhaitons commencer à automatiser les tests sur une telle interface utilisateur, nous devons suivre les exigences reçues, qui nous indiquent d'interagir avec le bouton situé à côté de l'élément de menu 1.
Après avoir ouvert Squish et utilisé le sélecteur sur le commutateur à côté de l'élément de menu 1, nous obtenons ceci comme dictionnaire de localisateurs :

Comme nous pouvons le constater, il existe un ID générique, identique pour tous les commutateurs de ce menu. Nous ne pouvons pas l'utiliser car la propriété d'occurrence provoque une instabilité dans les tests dès qu'un élément est ajouté à ce menu.
Contourner les tests d'interface graphique utilisateur dans Squish pour Qt
Par le passé, le blog Froglogic a publié du code permettant de parcourir l'arborescence QML pour trouver les enfants de l'objet sélectionné et les objets attendus. L'article lui-même était vraiment utile, mais avec quelques améliorations, il peut devenir un excellent outil pour contourner des problèmes tels que celui de l'exemple ci-dessus.
Voici le code permettant de trouver ces enfants avec l'amélioration, pour laquelle nous fournissons une explication ci-dessous :

Le défi de l'automatisation des tests dans les interfaces utilisateur comportant des éléments répétés
Avec les fonctions ci-dessus, nous pouvons sélectionner n'importe quel objet pouvant être un frère de l'élément que nous recherchons, ou même un arrière-arrière-petit-fils d'un frère d'un tel objet. Examinons donc cela, en commençant par les bases.
Visualisation de la structure de l'arborescence QML
Voici l'arborescence QML affichée dans Squish avec l'objet souhaité sélectionné :

L'arbre binaire de ceci ressemble à ceci :

L'exécution du code ci-dessous nous permet d'obtenir une référence exacte à l'interrupteur souhaité :

Étape par étape : comment fonctionne le parcours d'objet
Examinons maintenant de plus près l'ensemble du processus :
- Nous remontons l'arborescence QML jusqu'à la ligne 0 avec parent_container.parent et parent_count=1
- Ensuite, nous créons notre liste pour stocker les enfants que nous trouvons.
- Enfin, nous parcourons les enfants du conteneur, à la recherche du type ou des propriétés souhaités. Nous stockons tous les objets correspondants dans une liste, puis nous utilisons la récursion pour aller plus loin, à la recherche des petits-enfants, etc.
- Nous affichons les résultats sous forme de liste (nous avons utilisé [0] car nous attendions un seul enfant correspondant à nos exigences souhaitées).
![A simple QML hierarchy diagram illustrating a single Row 0 node with two children: the button_switch_0 switch component and the Text_1 element labelled ‘Menu item 1.’ This visualisation is used in Squish Qt testing to explain why a list-style query returns a single matching child, accessed with index [0].](/wp-content/uploads/2024/08/image-hmi-squish-qt-8.jpg)
Surmonter les limitations de l'automatisation des interfaces utilisateur dues à l'absence d'identifiants
Disposer d'identifiants ou de propriétés uniques est toujours la meilleure façon de procéder. Cependant, il arrive parfois que, en raison d'une dette technique ou de délais serrés, nous ne puissions pas obtenir des développeurs qu'ils ajoutent ces éléments manquants, essentiels à nos scripts d'automatisation des tests.
Bien que la solution ci-dessus combinant Squish et QT ne soit pas parfaite, elle fournit néanmoins des outils permettant de contourner certains problèmes et peut constituer une excellente amélioration de l'automatisation des tests si elle est utilisée avec précaution.
Résumé
En résumé, Qt et Squish sont tous deux des outils puissants pour un développement logiciel efficace et ses tests. Qt est un framework polyvalent pour le développement multiplateforme, tandis que Squish automatise et améliore les procédures de test.
La combinaison de ces outils rationalise le développement et garantit un logiciel de haute qualité en automatisant les tests, contribuant naturellement à des économies de temps et de coûts significatives.
Vous cherchez une équipe expérimentée capable de vous aider à développer une application Qt ou à la tester avec Squish ? Nous sommes à votre service. Pour en savoir plus sur Squish for Qt, consultez notre services Qt ou contactez-nous directement via le formulaire ci-dessous.
FAQ
Si vos objets GUI ne disposent pas d'identifiants uniques ou de propriétés stables, vous pouvez tout de même les automatiser en parcourant l'arborescence QML à l'aide de scripts récursifs améliorés. Cette méthode vous permet de localiser les éléments par hiérarchie, type ou relations entre éléments frères – en évitant de dépendre de propriétés d'occurrence instables et en améliorant la fiabilité de votre automatisation des tests.
Bien que la collaboration des développeurs aide en fournissant des propriétés d'objet ou des identifiants uniques, Squish permet toujours aux testeurs de créer des scripts d'automatisation sans cette contribution. En utilisant des techniques de parcours intelligentes, les testeurs peuvent interagir avec les éléments de l'interface graphique en fonction de leur contexte ou de leur structure – même dans des environnements techniquement contraints.
Contrairement aux outils d'automatisation à usage général, Squish est conçu spécifiquement pour les tests d'interface graphique et bénéficie d'une intégration poussée avec Qt. Il prend en charge QML, Qt Widgets et les interfaces hybrides, et offre des fonctionnalités de script avancées en Python, JavaScript et d'autres langages. Froglogic (désormais partie de The Qt Company) assure une prise en charge native et des mises à jour fréquentes adaptées à Qt.
Absolument. Squish peut être intégré aux outils CI/CD populaires tels que Jenkins, GitLab CI ou Azure DevOps. Cela permet des tests GUI continus et une détection précoce des bugs, accélérant les boucles de retour d'information dans les environnements de développement agile et améliorant la qualité globale des logiciels.
arrow_circle_rightNOUS CONTACTER
Contactez-nous pour découvrir comment nous pourrions soutenir votre projet
arrow_circle_right Autres articles