Le Framework Medium Mobile IOS est un framework d'automation de test mobile basé sur Appium, Cucumber et TestNG, contenant Allure Report et qui s'exécute sur les devices et simulateurs IOS.
Si vous souhaitez tester une application mobile de préférence sur IOS
et Mac
.
🌟Si vous êtes TESTEUR AUTOMATICIEN
et que vous voulez apprendre à automatiser des tests fonctionnels.
🌟Si vous êtes un RECRUTEUR
pour évaluer les compétences de nos testeurs automaticiens talentueux.
🌟 Ou encore si vous êtes un PARTICULIER
ou une ENTREPRISE
à la recherche de solution répondant à vos besoins d'automatisation en test alors ce framework est fait pour vous!
🎁 Ce framework permet d'exécuter vos tests (scénarios) en Séquentiel
sur le périphérique IOS de votre choix, que ce soit un device physique ou un simulateur IOS et également sur la plateforme Mac.
🎁Il contient plusieurs modèles et bonnes pratiques comme le Page Object Model
, le Page Factory
qui vous permettent d'avoir un framework assez Robuste, Réutisable, Maintenable et Rapide.
🎁Il offre également des Logs
qui vous fournissent une traçabilité, des informations pertinentes sur l'exécution de vos tests et aident à déboguer le framework en cas d'échec des tests.
🎁Il contient aussi du reporting avec Allure report
pour vous permettre d'avoir une visibilité de la couverture des tests effectués avec succès et ceux qui ont échoués.
🏷️Architecture et Présentation du framework
🏷️Technologies et outils utilisés
🏷️Fonctionnalités
🏷️Installation du framework
🏷️Pré-requis
🏷️Mise a jour du fichier testng.xml
🏷️Exécution du framework
🏷️Reporting
🏷️Mise à jour et adaptation du Framework
🏷️Déboggage et Maintenance
📦framework-medium-mobile-ios
┣ 📂src
┃ ┣ 📂main
┃ ┃ ┣ 📂java
┃ ┃ ┃ ┣📂FrameworkMediumIos.utils
┃ ┃ ┃ ┃ ┗ 📜CapabilitiesManager.java
┃ ┃ ┃ ┃ ┗ 📜DriverManager.java
┃ ┃ ┃ ┃ ┗ 📜GlobalParams.java
┃ ┃ ┃ ┃ ┗ 📜PropertyManager.java
┃ ┃ ┃ ┃ ┗ 📜ServerManager.java
┃ ┃ ┃ ┃ ┗ 📜TestUtils.java
┃ ┃ ┣ 📂resources
┃ ┃ ┃ ┗ 📜config.properties
┃ ┃ ┃ ┗ 📑log4j2.xml
┃ ┣ 📂test
┃ ┃ ┣ 📂java
┃ ┃ ┃ ┣📂FrameworkkMediumIos
┃ ┃ ┃ ┃ ┣ 📂pages
┃ ┃ ┃ ┃ ┃ ┗ 📜BasePage.java
┃ ┃ ┃ ┃ ┃ ┗ 📜LoginPage.java
┃ ┃ ┃ ┃ ┃ ┗ 📜MenuPage.java
┃ ┃ ┃ ┃ ┃ ┗ 📜ProductDetailsPage.java
┃ ┃ ┃ ┃ ┃ ┗ 📜ProductPage.java
┃ ┃ ┃ ┃ ┃ ┗ 📜SettingsPage.java
┃ ┃ ┃ ┃ ┃ ┣ 📂runners
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜MytestngRunnerTest.java
┃ ┃ ┃ ┃ ┃ ┣ 📂stepdef
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Hooks.java
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LoginStepDef.java
┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductStepDef.java
┃ ┃ ┃ ┃ ┃ ┗ 📜Main.java
┃ ┃ ┣ 📂resources
┃ ┃ ┃ ┃ ┣ 📂apps
┃ ┃ ┃ ┃ ┃ ┣ 📂SwagLabsMobileApp.app
┃ ┃ ┃ ┃ ┃ ┗ 📑Android.SauceLabs.Mobile.Sample.app.2.7.1.apk
┃ ┃ ┃ ┃ ┗ 📑allure.properties
┃ ┃ ┃ ┃ ┗ 📑Login.feature
┃ ┃ ┃ ┃ ┗ 📑Products.feature
┃ ┃ ┣ 📂Test-output
┃ ┃ ┃ ┣ 📂YYYY-MM-DD
┃ ┃ ┃ ┃ ┣ 📂Device_Name
┃ ┃ ┃ ┃ ┃ ┣ 📂Logs
┃ ┃ ┃ ┃ ┃ ┗ 📑Application.log
┃ ┃ ┃ ┃ ┃ ┗ 📑Server.log
┃ ┃ ┃ ┣ 📂allure-report
┃ ┃ ┃ ┣ 📂allure-results
┃ ┃ ┃ ┣ 📂reports
┃ ┃ ┃ ┃ ┣ 📂cucumber
┃ ┃ ┃ ┃ ┃ ┗ 📑report.html
┃ ┃ ┃ ┃ ┃ ┗ 📑report.json
┃ ┃ ┃ ┃ ┃ ┗ 📑report.xml
┣ 📑pom.xml
┣ 📑README.md
┣ 📑testng.xml
➡️ IntelliJ - IDE
➡️ XCode - iOS manipulations
➡️ Appium - Mobile Automation library
➡️ Maven - Build automation tool
➡️ Java - Programming language
➡️ Cucumber - BDD
➡️ Gherkin
➡️ TestNG - Unit testing framework
➡️ Log4J - Logging framework
➡️ Allure Reports - Reporting framework
✅ Abstraction layer pour les intérations UI (click, sendkeys, ...)
✅ Paramétrisation par les fichier TestNG XML et config.properties
✅ Abstraction layerpour les jeux de données
✅ Abstraction layer pour les textes statiques
✅ Exécution sur devices physiques (ou Simulateurs ) iOS
✅ Démarrage automatique programmé du serveur Appium
✅ Cucumber-HTML-Reporter plugin
✅ Gestion des logs avec Log4J2 Logging framework
Logiciel | version | Description |
---|---|---|
Java JDK | JAVA 11 | Dowloadable here |
Android SDK via Android studio | current available | Dowloadable here |
Node.js | 18.15.0 | Dowloadable here |
npm | 9.5.0 | Downloaded with node.js |
appium | 2.0.0-beta.59 | terminal: npm install -g appium@next |
appium client (wd) | current available | terminal: npm install wd |
Carthage | - | terminal: brew install carthage |
libimobiledevice | current available | terminal : brew install libimobiledevice |
Xcode | - | Downloadable via App Store |
Authorize-ios | current available | terminal : npm install authorize-ios |
ios-deploy | current available | terminal : npm install ios-deploy |
ideviceinstaller | current available | terminal : npm install ideviceinstaller |
maven | 3.8.6 | terminal : brew install maven |
Allure | current available | Downloadable here |
🟥 NB: POUR EXÉCUTER CE FRAMEWORK, VOUS DEVEZ AVOIR UNE BONNE CONNEXION INTERNET !
-
Devices
- 📌Device physique
Pré-requis - Device iOS Device* Mode développeur activé sur le device x Débogage usb activé x Connexion internet activée x Device déverouillé x Device connecté au poste via usb x -
📌Simulateur :
- Le simulateur doit être lancé et en bon état de marche
-
Remplir les informations concernant le device utilisé pour les tests automatisés
Les informations concernant les caractéristiques du device sont a modifier dans le fichier testng.xml (path_du_repertoire_du_framework/testng.xml)- Mettre a jour le paramètre udid:
Il est récupérable depuis le terminal (Le device doit etre connecté a l'ordinateur(device physique) ou démarré (device virtuel))
# Terminal xcrun simctl list
- Mettre à jour le paramètre deviceName
- Mettre à jour le paramètre virtualDevice Il prendra pour valeur true or "false"
- true = simulator
- false = real device
- Mettre a jour le paramètre udid:
Il est récupérable depuis le terminal (Le device doit etre connecté a l'ordinateur(device physique) ou démarré (device virtuel))
-
📌exemple
<parameter name="platformName" value="iOS"/>
<parameter name="udid" value="virtual_device_udid"/>
<parameter name="deviceName" value="virtual_device_name"/>
<parameter name="virtualDevice" value="true_or false"/>
- 📌Paramètres obligatoires :
- udid
- deviceName
- virtualDevice
- wdaLocalPort
- webkitDebugProxyPort
- 📌Important : la valeur choisie pour chacun des paramètres suivants doit être unique et différente des autres valeurs
- wdaLocalPort
- webkitDebugProxyPort
- Depuis l'IDE:
- Option 1:
Depuis un éditeur de code, lancer l'exécution du fichier main.java
(chemin d'accès : src/test/java/FrameworkMediumAndroid/Main.java) - Option 2 :
Depuis un éditeur de code, lancer l'exécution du fichier testng.xml
- Option 1:
- Depuis la CLI (Command Line Interface = invite de commandes):
Commandes a exécuter depuis un terminal:
cd project_repository
mvn clean test
Les différents rapports et artefacts resultants de l'exécution des tests seront disponibles dans le dossier:
- Test-output
- reports/cucumber-report/_cucumber.html
- allure-report/_index.html
-
Ajouter la(les) nouvelle(s) application(s) dans le dossier apps (chemin d'accès: src/test/resources/apps)
-
Mettre a jour les informations de l'application dans le fichier config.properties(chemin d'accès: src/main/resources/config.properties)
Variable value iOSAppLocation app_or_ipa_path iOSBundleId app_or_ipa_BundleID
- Ajouter le nouveau feature file dans le dossier src/test/resources suivant le template suivant:
@test
Feature: write here your feature title
Scenario: write here scenario title
Given I do first step
When I do second step next
Then thrid step should be expected result
@test
Feature: Login scenarios
Scenario Outline: write here scenario title (scenario with datas)
Given this first step
When I use this data: "<username>"
And this data: "<password>"
Then I should get this data: "<err>"
Examples:
| username | password | err |
| invalidUsername | secret_sauce | Username and password do not match any user in this service. |
- Définir les methodes de "steps definition" dans le dossier stepdef (chemin d'accès : src/test/java/FrameworkMediumIos/stepdef)
- En utilisant le Page Object Model design, créer les pages contentant les object spécifiques dans le dossier pages (Chemin d'accès: src/test/java/FrameworkMediumIos/pages)
- Utiliser les "objets" créés pour la redaction des methodes de step definition
- Erreur suite à une tentative de Build module : Vérifier que l'environnement de travail et l'IDE sont bien paramétrés pour Java 11
- Erreur suite à une tentative de maven compile : Vérifier que l'environnement de travail et l'IDE sont bien paramétrés pour Java 11
- Dépendances: Régulièrement vérifier le fichier pom.xml pour s'assurer que les dependances sont a jour, si non les mettre a jour. Site de téléchargement des dépendances maven : https://mvnrepository.com