Comment effectuer des tests de bout en bout (E2E) pour React Native Android sur de vrais périphériques utilisant Python, Appium et AWS Device Farm

Ce tutoriel est un guide étape par étape destiné aux personnes qui souhaitent exécuter des tests E2E sur une large gamme de périphériques physiques pour leur application React Native Android.

Pour ce faire, nous utiliserons AWS Device Farm.

Dans mon article précédent sur le test E2E pour React Native Android:

J'ai mentionné que:

Si vous souhaitez exécuter Appium sur AWS Device Farm pour tester votre application sur de vrais périphériques, vous devez utiliser Appium Python. Ils ne supportent pas Appium JS.

Si vous ne connaissez pas Python, voici un bref tutoriel: https://learnxinyminutes.com/docs/python3/

Installer

Suivez le guide officiel Facebook pour démarrer un projet React Native. Assurez-vous de sélectionner Building Projects with Native Code.

Installer appium, appium-docteur

fil ajouter --dev appium appium-docteur

Ajouter des scripts associés à package.json

Run appium-docteur

filé appium-docteur

Vous aurez besoin de corriger les erreurs jetées par un médecin. Cependant, pour tester Android, vous pouvez ignorer tout ce qui est lié à iOS (xCode, Carthage).

Démarrer le serveur appium

filé appium

Notez le port, vous en aurez besoin plus tard (le port par défaut est 4723).

Installer des trucs en python

Installez virtualenv

Il y a deux façons d'installer virtualenv.

  1. Pas d'anaconda installé: pip install --user virtualenv
  2. Si vous avez installé anaconda: conda install virtualenv

Configurer virtualenv

virtualenv venv
source venv / bin / activate # Entrée de l'environnement virtuel

Installer des dépendances

Comme nous sommes entrés dans l’environnement virtuel à partir des étapes précédentes, tous les packages Python que nous installons seront localisés dans virtualenv de ce projet.

Paquets à installer:

  • Appium-Python-Client: Notre client Appium
  • sélénium: notre webdriver
  • pytest: notre coureur de test
  • toolz: Quelques fonctions d'assistance
pip installer pytest sélénium Appium-Python-Client

Stockons ces dépendances dans un fichier nommé exigences.txt afin de pouvoir toujours les réinstaller et les réinstaller.

pip gel> exigences.txt

Test de base

Maintenant que nous sommes tous configurés, écrivons notre premier test.

Ce premier fichier doit être enregistré dans: ./__tests__/conftest.py. Il installe une initialisation de base de notre WebDriver Appium. Notez que la fonction est marquée avec un pytest.fixture de décorateur. Cela lui permet d’être utilisé ultérieurement par les fonctions de test.

Ce deuxième fichier doit être enregistré dans: ./__tests__/test_main.py. Ce fichier utilise le pilote que nous avons créé dans conftest.py. Il utilise l'objet pilote qui a été généré par le fixture.

Nous utilisons driver.implicitly_wait car nous ne savons pas combien de temps il faudra pour qu'un élément apparaisse à l'écran. Nous attendrons un maximum de 10 secondes avant de considérer que le test a échoué. Notre test essaiera à plusieurs reprises pendant la période d'attente de trouver l'élément.

Ce test de base vérifie simplement qu’une vue avec accessibilityLabel = "testview" existe.

Quelques points à surveiller:

  • Le chemin de l'application dans la configuration est relatif à la racine de votre projet. Pas relatif au fichier de test.

Vous vous demandez peut-être pourquoi l’accessibilité LabelLabel? C’est ainsi que nous recherchons des éléments lors des tests avec Appium et React Native. Ceci est également compatible avec les tests iOS sur Appium. Soi-disant, il y aura un support testID dans le futur, mais pour le moment c'est la méthode recommandée.

Ajoutons le accessibilityLabel = "testview" à la racine de la vue de notre application dans ./index.android.js.

Lancer le test

  1. Démarrer l'émulateur
  2. Démarrer le serveur de développement natif de React: react-native start
  3. test de fil
  4. Votre test devrait être réussi!

Test du bouton

Ajoutez le code suivant à ./__tests__/test_main.py.

Ajoutons un bouton qui incrémente un compteur à l’écran. Votre fichier ./index.android.js devrait ressembler à ceci:

Exécutez le test. Vous devriez voir l'application en cliquant sur le bouton lui-même et le compteur devrait incrémenter. Vos tests devraient tous passer.

Maintenant que nous avons écrit quelques tests et que nous les avons exécutés avec succès sur un émulateur sur nos machines locales, essayons de les exécuter sur AWS Device Farm.

AWS Device Farm

Mettre à jour le code de test pour AWS

Lorsque nous exécutons nos tests sur AWS, les fonctionnalités souhaitées doivent être vides. Mettons à jour le code afin que nous puissions exécuter sur nos machines locales et AWS.

Build App APK

Nous devrons construire un apk de production qui sera chargé sur AWS:

  1. cd android && ./gradlew assembleRelease
  2. Le fichier se trouve sous: ./android/app/build/outputs/apk/app-release-unsigned.apk

Emballez vos tests

Suivez le guide officiel d’Amazon pour emballer vos tests pour AWS Device Farm.

Exécution de tests sur AWS

  1. Inscription pour AWS Device Farm
  2. Créer un nouveau projet
  3. Créer une nouvelle course> Télécharger la production apk
  4. Configurer test> Appium Python> Télécharger le fichier zip du package de test
  5. Sélectionner des appareils
  6. Spécifier l'état du périphérique
  7. Passer en revue et démarrer exécuter> Définir le temps maximum par appareil
  8. Attendez que les tests soient exécutés

Vous avez terminé! Merci de votre lecture et j'espère que ce tutoriel vous aura été utile!

Le code d'accompagnement de cet article est disponible sur ce dépôt:

Choses à noter sur AWS

  • Vous devrez peut-être surveiller la structure de dossiers du fichier zip. Parfois, par le passé, je rencontrais des problèmes avec un fichier zip contenant un dossier de niveau supérieur. Je n’ai pas rencontré ces problèmes lors de la rédaction de ce tutoriel.
  • Assurez-vous qu'Appium-Python-Client est à la bonne version pour AWS. Vous devrez peut-être rétrograder vers Appium-Python-Client == 0.20.
  • Vous pourriez obtenir cette erreur pour la commande driver.send_keys: https://github.com/appium/python-client/issues/162. Dans ce cas, vous devrez rétrograder au sélénium == 3.3.1.
  • AWS arrêtera le serveur Appium à chaque test. Par conséquent, les appareils Pytest dotés de la portée du module ne fonctionneront pas. Tous les appareils sont effectivement conçus pour fonctionner maintenant.