Les tests automatisés sont connus pour être très précieux pour tout programmeur. C'est un outil qui permet de simuler les actions d'une personne sur un périphérique spécifique. Il est favorisé car il ne possède pas les erreurs ou les limitations de vitesse d'une personne réelle..
Appium est un outil de test automatisé, basé sur le célèbre framework de test Selenium, qui permet de tester automatiquement des applications natives iOS et Android. Sa principale limitation est qu'il est uniquement conçu pour OS X et Linux..
À mon bureau, nous utilisons Appium pour les tests de régression. Le test de régression consiste simplement à tester les fonctionnalités existantes pour s'assurer qu'elles continuent de fonctionner comme prévu à mesure que le produit se développe. Il est très important de savoir quand les fonctionnalités se cassent pour que les progrès puissent continuer de manière linéaire..
Dans ce tutoriel, je vais vous montrer comment configurer Appium, générer des scripts automatisés et créer quelques tests de connexion simples pour une application Android..
Obtenir Appium ne prend pas beaucoup de temps, mais il est facile de gâcher la configuration. La première fois que j'ai installé Appium, j'ai naïvement téléchargé l'application (.dmg) avant de la configurer en ligne de commande. Il se trouve que si vous téléchargez d'abord l'application, l'accès à Appium en ligne de commande peut s'avérer très difficile. Commencez donc par obtenir Appium à partir de la ligne de commande.
Dans les étapes suivantes, je suppose que Homebrew est installé sur votre ordinateur et que vous utilisez OS X. Si vous n’avez pas installé de noeud, exécutez la commande suivante à partir de la ligne de commande:
noeud d'installation $ brasser
Ensuite, installez Appium à l’aide du gestionnaire de package de noeud. Il est important que vous le fassiez ne pas utilisation sudo
pour ces commandes ou Appium ne fonctionnera pas.
$ npm install -g appium $ npm install wd
Si vous ne disposez pas des autorisations nécessaires pour utiliser ces commandes, vous devrez chmod
eux-mêmes plutôt que sudo
. L'emplacement du dossier peut être différent pour vous, selon votre configuration..
$ sudo chmod -R a + w / usr / local
Pour exécuter le serveur Appium et voir si vous l'avez configuré correctement, exécutez la commande suivante à partir de la ligne de commande..
$ appium &
Appium sur la ligne de commande vous permet d'exécuter des tests Selenium non seulement sur des simulateurs Android et iOS, mais également sur des périphériques physiques. L’application dispose d’une belle interface utilisateur qui vous permet d’exécuter une version simulée de votre AUT (Application Under Testing) et générez facilement du code Selenium pour des actions simples sur l'application. Vous utiliserez principalement l’application lors de la phase initiale de création des tests, puis la ligne de commande pour exécuter des tests..
Pourquoi n'utilisons-nous pas l'application pour tout le flux? Si vous prévoyez d'exécuter une suite de tests sur divers périphériques de manière automatisée, éventuellement sur un calendrier, il est essentiel de pouvoir exécuter Appium à partir de la ligne de commande..
L'application Appium peut être téléchargée à partir de Bitbucket. Après avoir téléchargé l’image disque, double-cliquez dessus et faites glisser l’application Appium sur votre ordinateur. Applications dossier.
Ensuite, nous avons besoin d’une application à tester. Pour cette introduction à Appium, nous allons tester une application Android native que j'appelle AUT. C'est une application très simple de connexion et de déconnexion. En cas de connexion réussie, cela nous amène à une page qui nous indique que nous nous sommes connectés avec succès, en affichant un bouton de déconnexion..
De nombreuses applications ont une fonctionnalité de connexion. Nous allons donc créer une suite de tests de connexion de base pour tester les résultats possibles d'un utilisateur interagissant avec le flux de connexion. Ce n'est pas tant que nous voulons nous assurer que la connexion fonctionne, nous voulons tester la réponse de l'application aux différentes façons dont un utilisateur peut ne pas se connecter, par exemple, en entrant des informations d'identification non valides..
Comme il est impossible de posséder tous les appareils Android disponibles, je teste généralement sur des appareils simulés. Cela me permet de changer facilement le périphérique simulé pour les tests de compatibilité. Pour obtenir un simulateur Android, obtenez Gestionnaire AVD et configurez tout appareil Android de votre choix compatible avec l'API de niveau 21.
ANDROID_HOME
, JAVA_HOME
, et CHEMIN
variables d'environnement dans votre .profil ou .bash_profile (ou .zshrc si vous utilisez zsh).ANDROID_HOME
devrait pointer vers l'emplacement du sdk Android tout en JAVA_HOME
devrait indiquer l'emplacement du JDK.
C’est ainsi que vous pouvez ajouter ces chemins à votre .bash_profile. Notez que les chemins peuvent être différents pour vous.
$ vim ~ / .bash_profile $ export ANDROID_HOME = / Utilisateurs / (nom d'utilisateur) / Bibliothèque / Android / sdk $ export PATH = $ PATH: $ ANDROID_HOME / tools: $ ANDROID_HOME / platform-tools $ export JAVA_HOME = / Library / Java / JavaVirtualMachines /jdk1.8.0_40.jdk/Contents/Home
Ensuite, créez un appareil simulé avec AVD Manager. Assurez-vous d'activer Utiliser le GPU hôte et mettre le VM Heap à 64.
$ cd $ ANDROID_HOME / tools $ ./android avd
Pour accélérer le simulateur, installez HAX à partir du site Web d'Intel..
Il est temps d'utiliser le Inspecteur Appium et commencez à écrire des tests. Lancez l'application Appium. Dans réglages généraux, décocher Vérifier les mises à jour, Application de pré-lancement, Ignorer les sessions existantes, et Éliminer les processus en utilisant le port du serveur avant son lancement.
Ensuite, vérifiez la Bouton radio Android et cliquez sur le Icône Android. Vérifier Chemin de l'application et définissez sa valeur sur l'emplacement de test de l'APK de l'application. Vérifier Lancer AVD et sélectionnez le périphérique simulé. Choisir 5.1 Lollipop (API niveau 21) dans le menu déroulant de Version de la plateforme.
Frappé lancement et attendez que l'application se lance sur le périphérique simulé.
Vous pouvez rencontrer un problème où l'application se bloque au déverrouillage depuis l'utilisation de la toute nouvelle API 21. Pour résoudre ce problème, relancez l'application après avoir déverrouillé manuellement l'écran simulé..
Une fois que l'appareil simulé a lancé l'application, appuyez sur le bouton Loupe icône pour lancer l'inspecteur.
Ceci est l'inspecteur Appium. C'est un outil très pratique pour vous aider à vous lancer dans la rédaction de tests pour Appium. En gros, l'inspecteur vous permet d'effectuer des actions sur l'application Android native et d'enregistrer vos actions sous forme de code généré..
Les cases situées à gauche de l'inspecteur constituent la Interface utilisateur et vous permettent de naviguer dans les éléments de l’activité en cours. En bas se trouvent les options permettant d'interagir avec l'élément sélectionné dans les zones d'éléments. Les détails de l'élément sélectionné sont montrés dans Détails. Si vous faites quelque chose manuellement à la simulation, vous devez appuyer sur Rafraîchir pour l'inspecteur de reconnaître ces changements. Si vous voulez commencer à enregistrer vos actions en code, vous devez appuyer sur la touche Record bouton.
Créons le code nécessaire pour une connexion réussie. L'application dispose de deux connexions codées en dur, [email protected]:mot de passe et [email protected]: mot de passe2.
5. Dans le Interface utilisateur, accédez à android.widget.LinearLayout /
android.widget.FrameLayout / android.widget.LinearLayout /
android.widget.ScrollView / android.widget.LinearLayout /
android.widget.EditText [2]
6. Entrez le mot de passe.
7. Cliquez sur Envoyer des clés.
8. Dans le Interface utilisateur, accédez à android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.LinearLayout / android.widget.ScrollView /
android.widget.LinearLayout / android.widget.Button [1]
9. Cliquez sur Toucher en bas, suivi de Robinet. Nous sommes maintenant à une nouvelle activité de sorte que le Interface utilisateur a changé.
10. Hit Rafraîchir puisque l'inspecteur n'a probablement pas réalisé que le simulateur est passé l'écran de chargement maintenant.
11. Dans le navigateur d'interface utilisateur, accédez à android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.RelativeLayout / android.widget.Button [1].
12. Cliquez sur Robinet.
Dans le code ci-dessous, nous avons tout le code pour simuler une connexion réussie. N'hésitez pas à jouer un peu plus avec l'inspecteur. Plus tard dans ce tutoriel, nous allons également écrire des tests pour les connexions infructueuses..
Nous allons maintenant écrire quelques tests en utilisant Appium pour nous assurer que notre page de connexion fonctionne comme il se doit. Si vous n'avez pas Python, vous pouvez le télécharger sur le site officiel.
Pour utiliser le pilote Web Appium avec Python, vous devez également obtenir les bibliothèques Appium pour Python..
$ python setup.py install
Avant de commencer à écrire les tests, nous devrons décider quels scénarios de test nous allons créer. Une bonne suite de tests doit prendre en compte toutes les interactions possibles. Commençons par un simple.
#! / usr / bin / python depuis appium import webdriver import time import import unittest import os
Premièrement, nous devons importer tout ce dont nous avons besoin pour le test. Nous allons utiliser le test unitaire Python intégré pour exécuter nos tests. L'élément Appium est le pilote Web que nous utiliserons pour interagir avec le serveur Appium..
class LoginTests (unittest.TestCase): def setUp (self): désirés_caps = désirés_caps ['appium-version'] = '1.0' désiréscaps ['platformName'] = 'Android' désirés_caps ['platformVersion'] = '5.1' désirés_caps ['app'] = os.path.abspath ('/ Utilisateurs / mkim / Documents / AUT / app / construire / sorties / apk / app-debug-unaligned.apk') self.wd = webdriver.Remote ('http : //0.0.0.0: 4723 / wd / hub ', capsules désirées) self.wd.implicitly_wait (60)
Nous créons une classe LoginTests
définir notre suite de tests. le installer
fonction de notre test unitaire s'exécute au début du test. Dans cette méthode, nous définissons les fonctionnalités souhaitées, telles qu'Android et le chemin de l'application. Nous initialisons ensuite le pilote Web self.wd
en se connectant au serveur Appium.
def tearDown (self): self.wd.quit ()
le abattre
la fonction s'exécute après un test et se déconnecte du serveur Appium.
def test_success (self): basepath = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1¹/fr/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget .LinearLayout [1] / "basepath2 =" //android.widget.LinearLayout[1unset/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1unset/ "self.wd.find_element_by_xpath (" basepath + "et le lien suivant). .widget.EditText [1] "). send_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget.EditText [2] "). send_keys (" mot de passe ") self.wd. find_element_by_xpath (basepath + "android.widget.Button [1]"). clic () essayer: self.wd.find_element_by_xpath (basepath2 + "android.widget.TextView [1]") sauf: self.fail ("Pas à la connexion" Page de réussite. \ N ") self.wd.find_element_by_xpath (basepath2 +" android.widget.Button [1] "). Click ()
Le bloc de code ci-dessus est principalement copié à partir du code de l'inspecteur Appium. Nous effectuons les actions requises sur l'interface utilisateur pour une connexion réussie. dans le essayer
clause, nous essayons de trouver la affichage
élément qui affiche le texte Connexion réussie! Si une exception est levée, le test échoue.
def test_fail (self): basepath = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1¹/fr/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget .LinearLayout [1] / "self.wd.find_element_by_xpath (basepath +" android.widget.EditText [1] "). Send_keys (" [email protected] ") self.wd.find_element_by_xpath (basepath +" android.widget. EditText [2] "). Send_keys (" motdepasse ") self.wd.find_element_by_xpath (basepath +" android.widget.Button [1] "). Clic () essayer: self.wd.find_element_by_xpath (basepath +" et Android.widget .Bouton [1] ") sauf: self.fail (" Pas encore à l'écran de connexion. \ N ")
Pour échouer le test de connexion, nous utilisons délibérément un mot de passe incorrect, mauvais mot de passe, s'attendant à ce que la connexion échoue. Nous vérifions si nous pouvons trouver l'élément de bouton de connexion et échouer le test si nous ne pouvons pas.
if __name__ == '__main__': suite = unittest.TestLoader (). loadTestsFromTestCase (LoginTests) unittest.TextTestRunner (verbosity = 2) .run (suite)
C’est la fonction principale nécessaire pour exécuter nos tests. Il n'y a rien de mal avec notre premier cas de test. Cependant, une connexion infructueuse pourrait signifier beaucoup de choses. Lorsqu'un utilisateur ne parvient pas à se connecter, nous voulons nous assurer que l'interface utilisateur l'aide à comprendre comment résoudre son erreur pour une meilleure expérience utilisateur..
Nous avons étendu notre scénario de test de deux à six scénarios pour la page de connexion. Cela peut sembler beaucoup pour une fonctionnalité aussi simple, mais c'est absolument nécessaire.
La vérification des attentes est la partie la plus difficile des tests d’écriture. Par exemple, le test de connexion ayant échoué vérifie si un élément existe dans l'interface utilisateur. Cela signifie que les tests de connexion reposent entièrement sur l'interface utilisateur pour nous indiquer si les exigences sont remplies..
Cela pourrait être une mauvaise chose car l'interface utilisateur ne nous dit pas tout sur le code sous-jacent. Cependant, l’objectif est de tester l’interface utilisateur afin d’avoir une vérification correcte de l’existence d’un élément de l’interface utilisateur. Nous pourrions approfondir nos attentes en vérifiant que chaque élément attendu est présent sur la page ou même en vérifiant que chaque élément est correctement positionné..
Nous avons appris à:
Il y a encore beaucoup à apprendre sur Appium et les tests. La prochaine étape pourrait être de créer un système de test intégré en continu qui utilise les capacités d’Appium pour vos propres applications..