Android / Espresso : introduction aux tests automatisés d’interfaces

De Lionel Dangelo dans Technique

31 Mar 2019

Lorsqu’on parle de la mise en place tests pendant la phase de développement, il est souvent question de tests unitaires. Ceux-ci ont pour but de valider une partie bien précise du code d’un programme.
Pourtant, il est aussi possible de tester le comportement de l’interface graphique, ce qui permet de tester l’application de bout en bout, de l’écran visible par un utilisateur jusqu’aux appels serveurs.

Aujourd’hui, nous allons voir avec un exemple simple comment mettre en place ce type de tests sur une application Android native avec le framework Espresso.

Espresso, c’est quoi ?

L’API Espresso fait partie du « Android Testing Support Library » et permet de mettre en place des tests fonctionnels en simulant les interactions possibles des utilisateurs avec l’application. Elle est légère et facile à prendre en main.
Le développeur va pouvoir simuler un certain nombre d’actions comme la saisie de champs, le clic sur des composants, des défilements de liste, etc, dans le but de vérifier certains affichages et comportements.

Ces tests nécessitent d’être exécutés sur un device Android physique ou via un émulateur. Il est bien entendu possible d’exécuter localement ces tests, ou de les déporter sur un serveur d’intégration continue (à condition que celui-ci puisse exécuter un émulateur Android), ou bien encore sur une plateforme Cloud (Firebase Test Lab, Amazon, Azure,…) qui permet d’exécuter les tests sur une grande variété de périphériques physiques et virtuels simultanément.

 

Les composants de base d’Espresso sont les suivants :

ViewMatchers : qui permet de récupérer une vue/un widget
ViewActions : qui permet de pouvoir effectuer des actions sur une vue (clic, scroll,…)
ViewAssertions : Qui permet de vérifier l’état d’une vue, vérifier des chaines de caractères, etc

Exemple de projet

A minima, il faudra inclure les librairies suivantes dans la configuration Gradle.

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Pour notre test, nous allons mettre en place une application avec une page d’accueil qui comprendra deux champs de texte (un login et un mot de passe), un bouton de connexion, et un libellé qui affichera OK en cas de bon couple login/password et KO dans le cas contraire.

La vue contient le code suivant :

La classe principale contient le code suivant :

Notre classe de test

Nous allons écrire un test d’interface qui effectuera les actions suivantes :

1/ Ecriture du login dans le champs dédié
2/ Ecriture d’un mauvais mot de passe dans le champs dédié
3/ Clic sur le bouton de connexion
4/ Vérification du champs de texte de résultat qui doit contenir la valeur KO

5/ Ecriture du bon mot de passe dans le champs dédié
6/ Clic sur le bouton de connexion
7/ Vérification du champs de texte de résultat qui doit contenir la valeur OK

 

La classe de test contient le code suivant :

Un peu verbeux non ? Heureusement, en utilisant les bons « import », on peut réduire grandement ce code :

 

Et voila ! L’exécution de ce test va nous permettre de valider la bonne authentification. Dans un cas réel, on peut imaginer qu’un test plus pertinent serait de vérifier :

  • Qu’en cas de mauvais mot de passe, un message d’erreur s’affiche bien
  • Qu’en cas de bonne connexion, l’utilisateur est bien redirigé vers une autre page de l’application
  • Qu’en cas de non disponibilité de connexion Internet, un message d’erreur s’affiche

 

Et si je ne veux pas saisir tout ce code à la main ?

Il existe une fonctionnalité dans Android Studio qui permet d’enregistrer les actions utilisateurs et d’écrire automatiquement la classe de test.
Pour cela il suffit de faire un « Record Espresso Test »

Chaque action sera mémorisée par l’outil

Il suffira ensuite de créer une « Assertion » afin de vérifier des états de l’écran, puis de sauver le test

Résultat, le code du test est automatique généré.  En revanche, ce code est extrêmement plus verbeux que lorsqu’on l’écrit nous même :

 

La suite ?

Il ne vous reste plus qu’à imaginer et développer les tests les plus pertinents pour votre application. Il faut garder en tête que cette partie peut devenir très chronophage, il convient donc de viser, à minima, une couverture de test des points clés de votre application (l’authentification, la création de compte, des fonctionnalités de base), et si possible de les éxécuter sur des environnements variés (formats de téléphones, version de l’OS, etc) ! A vous de jouer !

iMDEO recrute !

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

REJOIGNEZ-NOUS

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

Voir les annonces