Aujourd'hui, je veux vous parler d'un tout nouvel outil open-source pour les tests automatisés appelé Airtest . À l'avenir, je ferai quelques articles supplémentaires avec une histoire détaillée sur les éléments individuels de cette boîte à outils et comment travailler avec eux, mais maintenant j'ai pour objectif de vous le présenter et de vous donner une idée générale de celui-ci.
Ceci est le premier de trois articles. La deuxième partie décrit le cadre de reconnaissance d'image (Image Recognition) - AirTest , et la troisième et dernière partie est consacrée à Poco - le cadre d'automatisation de l' interface utilisateur en écrivant du code .
AirTest IDE a été développé par NetEase et est destiné aux applications "difficiles à automatiser", comme par exemple les jeux. En fait, ils sont le principal objectif des développeurs, bien que cela ne cesse pas d'utiliser AirTest pour d'autres applications.
AirTest IDE fonctionne sur Windows, MacOS X et Linux et contient 2 frameworks: AirTest et Poco. Ce développement a été présenté par Xin Liu lors du Android Game Developer Summit 2018 . Python 2.7 et Python 3.3+ sont utilisés pour écrire des tests. Des choses aussi importantes que la prise en charge de l'exécution immédiate de tests sur un grand nombre d'appareils, du code source ouvert et des applications gratuites, ainsi que des tests écrits faciles - tels sont les avantages mis en évidence par les développeurs. L'application peut être utilisée à la fois sur Windows et MacOS et vous permet d'automatiser les applications à partir du système d'exploitation suivant: Windows, iOS, Android.
Le projet AirTest sur GitHub contient 4 projets: Airtest , Poco , iOS-Tangent , multi-device-runner .
Il convient également de mentionner que NetEase fournit sa propre batterie de périphériques physiques pour les tests automatisés appelée AirLab .

Brièvement sur les cadres.
Airtest est un cadre multiplateforme de reconnaissance d'images pour les jeux et applications mobiles basé sur la conservation d'images . AirTest IDE vous permet d'interagir avec l'application à l'aide des commandes suivantes:
toucher, attendre, glisser, existe, texte, événement clé, instantané, sommeil, assert_exists, assert_not_exists, assert_equal, assert_not_equal. Je parlerai des caractéristiques et des paramètres des commandes dans un article séparé consacré à une étude plus détaillée des cadres AirTest et Poco. Il convient maintenant de mentionner que la commande keyevent est responsable de «l’appui sur les boutons physiques» de l’appareil, tels que Accueil, Alimentation, Menu, Retour. Lors de l'utilisation de la plupart des commandes, l'utilisateur est invité à mettre en surbrillance une partie de l'écran du périphérique de travail, dont une capture d'écran sera utilisée pour la commande correspondante (toucher, glisser, affirmer, etc.).

Les avantages d'Airttest que je peux souligner après le travail:
- Écriture de code rapide et claire. Tout se fait, en pratique, en mode automatique, il suffit de sélectionner les paramètres nécessaires, d'ajuster les timings et de faire attention au choix de l'image.
- La définition exacte de l'image, qui est utilisée dans le code, sur l'appareil de travail actif. De plus, le rapport indique le pourcentage de coïncidence (comparaison) de l'image utilisée dans le code et de l'image de l'écran de l'appareil de travail.
- En parlant de rapports. Après chaque lancement, vous pouvez créer un rapport à l'aide du raccourci clavier Ctrl \ Cmd + L. Un rapport pratique fournit des informations telles que: les types d'assertions, leurs résultats, et chaque étape de test est mise en évidence dans une sous-section distincte avec des informations sur l'endroit où AirTest a cliqué, où il s'attendait à une image, le pourcentage d'images correspondantes, etc.
- Une fois que vous avez écrit le code, vous pouvez l'utiliser sur n'importe quel appareil.
- Multithreading: connectez plusieurs périphériques de test et exécutez-les en parallèle.
Airtest, que je peux souligner après le travail:
- Si dans le processus, il y a des éléments qui se ressemblent visuellement, par exemple des curseurs, des boutons, etc., alors avec une probabilité élevée, AirTest ne comprendra pas quel contrôle vous souhaitez utiliser. Cela sera indiqué dans l'erreur correspondante. Mais ce moins est facilement supprimé en utilisant le deuxième cadre (Poco), qui sera discuté ci-dessous.
- La comparaison des images (à partir du code et des images réelles à l'écran) se produit en noir et blanc. Cela vaut la peine de considérer si vous êtes important, par exemple, l'apparence visuelle du personnage (sa couleur, ses différents vêtements, etc.). Si les personnages sont visuellement différents, mais qu'ils sont affichés à l'écran de la même manière (une pose, etc.), la vérification réussira très probablement. Les options de reconnaissance d'image ont une coche «rgb» que vous pouvez utiliser, mais cela ne fonctionne pas très bien si vous avez une petite image.
- Vous ne pouvez pas «figer» l'écran lorsque vous utilisez l'application pour prendre avec précision les captures d'écran dont vous avez besoin. De temps en temps, vous devez "attraper" le cadre dont vous avez besoin.
- Parce que application en version bêta ouverte, vous pouvez rencontrer diverses erreurs ou inexactitudes gênantes, par exemple, comme l'impossibilité de redimensionner une fenêtre avec une application intégrée sous Windows. Les auteurs mettent désormais à jour l'IDE AirTest tous les quelques mois, et j'espère que ces oublis seront bientôt corrigés.
Poco est un cadre universel pour automatiser l'interface utilisateur (UI), qui fournit de puissantes API indépendantes du moteur (de jeu). Ceux-ci, à leur tour, récupèrent la hiérarchie des éléments de l'interface utilisateur lors de l'exécution. Grâce à cela, l'utilisateur peut "accéder" à toute la hiérarchie des éléments sur la page en cours en quelques clics vers l'élément dont il a besoin, etc. En outre, ce cadre vous permet de «figer» l'écran actuel pour écrire du code en fonction de la hiérarchie des éléments de la fenêtre actuelle. Poco est conçu pour aider AirTest à comprendre de quel type d'élément d'interface utilisateur les tests parlent, mais personne ne vous dérange pour écrire tous les tests en utilisant uniquement ce framework.
Tous les tests sont écrits en Python. Les implémentations de commandes peuvent être trouvées dans les API correspondantes: module airtest.core.api , package airtest.core.android, package airtest.core.ios, package airtest.core.win

Avantages Poco que je peux souligner après le travail:
- Un certain nombre de moteurs de jeu importants sont pris en charge, notamment Unity3D, cocos2dx-js, cocos2dx-lua, les moteurs internes NetEase, ainsi que la prise en charge des applications natives Android / iOS. Si vous souhaitez utiliser un moteur qui ne figure pas dans la liste des moteurs "pris en charge", vous pouvez écrire le vôtre en suivant les instructions appropriées . Dans la documentation officielle, il est fait mention de l'Unreal Engine, mais jusqu'à présent, tout est limité à la phrase "Coming soon".
- La hiérarchie des éléments de l'interface utilisateur à l'écran revient en temps réel.
- Démarrage rapide et exécution de tests.
- Comme dans AirTest, j'ai écrit le code une fois - utilisez-le partout. Prise en charge de Python 2.7 et 3.3+
- Il est possible de connecter n'importe quelle bibliothèque externe à votre projet
- À en juger par la documentation, il existe un support pour les capteurs GPS, accéléromètre et gyroscopique, ainsi que pour les modes d'affichage portrait et paysage.
Poco par contre que je peux souligner après le travail:
- Pendant le travail sur Windows 7, je n'ai pas trouvé de problèmes fondamentaux. ce qui interférerait avec le travail à part entière, mais ils le sont actuellement avec Windows 10. L'essentiel est un mouvement incorrect des objets (commande de balayage) dans certains cas. Par exemple, j'indique l'objet à déplacer et les coordonnées du deuxième objet, qui est le point final. Dans ces rares cas, Poco manque l'emplacement final, mais les rapports montrent les données de déplacement correctes (vecteur) et l'étape est considérée comme réussie.
- Lorsque vous sélectionnez des éléments avec de grandes dispositions (disposition), la sélection peut chevaucher la fenêtre de Poco Assistant et vous ne pourrez pas sélectionner d'autres éléments tant que la sélection n'est pas supprimée de la fenêtre actuelle. Pour supprimer la sélection, vous pouvez utiliser le raccourci clavier Alt + F4
Pour compléter l'image, il convient de mentionner que Airtest IDE possède son propre plug-in Selenium , avec lequel vous pouvez automatiser votre projet Web, mais en utilisant uniquement un navigateur Chrome. Le reste, pour le moment, n'est pas pris en charge. Personnellement, je n'ai pas encore travaillé avec lui, donc je ne peux pas parler de son travail, mais il était impossible de le manquer dans cette brève description.

En conséquence, je dirais que AirTest IDE est un développement très prometteur conçu pour automatiser l'interface utilisateur dans les jeux, mais, pour le moment, ne convient pas pour tester le processus de jeu en tant que tel. Si vous avez beaucoup d'éléments d'interface utilisateur et / ou de nombreux appareils à vérifier et que vous ne voulez pas passer beaucoup d'heures-homme, cet IDE pourrait bien devenir votre bouée de sauvetage. Pour commencer à écrire les tests les plus simples, vous n'avez pas besoin de connaissances approfondies en automatisation et en programmation, il vous suffit d'avoir une compréhension de base de l'utilisation de Python. Bien sûr, de cette façon, vous n'irez pas loin et vous devrez apprendre ce langage de programmation, mais pour commencer et comprendre à quel point ce programme vous convient, c'est suffisant pour vos yeux. La seule chose qui est frustrante maintenant est diverses erreurs gênantes associées, par exemple, à l'impossibilité de redimensionner une fenêtre avec un périphérique de travail (application Windows) après l'avoir incorporée, chevauchant un grand objet sélectionné de l'interface du programme principal, etc., mais c'est tout à fait possible se réconcilier, surtout compte tenu du fait que l'application est en phase bêta.
