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 plus

Squish 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.

A screenshot showing a QtQuick code example with a Window component containing a Column, Repeater, Row, Switch, and dynamic Text elements. This type of QML structure is commonly used in Squish Qt UI test automation to demonstrate how to interact with repeated items, switches, and menu elements in a Qt application.

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 :

A screenshot of the rendered QtQuick interface created with a Repeater element, displaying three rows labelled ‘Menu item 0,’ ‘Menu item 1,’ and ‘Menu item 2,’ each with a toggle-style switch component. This type of UI output is commonly used in Squish Qt automated testing to validate interactions with repeated QML elements and dynamic menu components.

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 :

A screenshot of a Squish Qt locator dictionary displaying JSON-like properties for a QML Switch component, including attributes such as ‘checkable,’ ‘id: button_switch,’ ‘occurrence,’ ‘type: Switch,’ and ‘visible.’ This output is used in Squish Qt test automation to identify and interact with specific UI elements in QtQuick applications.

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 :

A screenshot showing Python utility functions commonly used in Squish Qt test automation. The code defines getChildrenOfType() and getChildrenWithProperty(), which recursively traverse Qt/QML object hierarchies to locate child elements based on name or specific property values. These helpers support complex UI test scripting by enabling reliable object identification within nested QtQuick structures.

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é :

A screenshot of the Squish Qt ‘Application Objects’ view, displaying a full QML hierarchy including a main QML root object, columns, rows, switches, text elements, and a repeater. This tree view is used in Squish Qt to inspect and identify QtQuick components for automated UI testing, enabling testers to explore object types, IDs, and nested structures.

L'arbre binaire de ceci ressemble à ceci :

A binary-style QML object tree diagram with a ‘Main’ node at the top, followed by ‘Column,’ branching into three ‘Row 0’ nodes. Each row contains a button_switch_0 and a Text_1 element labelled ‘Menu item 0,’ ‘Menu item 1,’ and ‘Menu item 2.’ The graphic visualises the QML hierarchy used in Squish Qt UI test automation examples.

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

A screenshot of a Squish Qt test script highlighting how a text_menu_1 dictionary is used to identify related QML objects. The code demonstrates two approaches: using getChildrenOfType() to find a Switch beneath the text element, or getChildrenWithProperty() to match the child whose id is button_switch. This snippet illustrates practical locator strategies for automated UI testing in QtQuick applications.

Étape par étape : comment fonctionne le parcours d'objet

Examinons maintenant de plus près l'ensemble du processus :

  1. Nous remontons l'arborescence QML jusqu'à la ligne 0 avec parent_container.parent et parent_count=1
  1. Ensuite, nous créons notre liste pour stocker les enfants que nous trouvons.
  1. 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.
  1. 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].

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.