Skip to content

Le Framework Medium Mobile IOS est 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.

License

Notifications You must be signed in to change notification settings

yakanamani/framework-medium-mobile-ios

Repository files navigation

Cucumber BDD Framework with Appium, TestNG and Java 11 for iOS

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.

🎯Sommaire:

🏷️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

🎯Architecture et Présentation du framework

📦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

🎯Technologies et outils utilisés

➡️ 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

🎯Fonctionnalités

✅ 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

🎯Environnement de développement

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

🎯Installation du framework

Prérequis

🟥 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

🎯Mise à jour du fichier testng.xml

  • 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)

    1. 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
    2. Mettre à jour le paramètre deviceName
    3. Mettre à jour le paramètre virtualDevice Il prendra pour valeur true or "false"
    • true = simulator
    • false = real device
  • 📌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

🎯Exécution du framework

  • 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
  • Depuis la CLI (Command Line Interface = invite de commandes):
    Commandes a exécuter depuis un terminal:
  cd project_repository
  mvn clean test

🎯Reporting

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

🎯Mise à jour et adaptation du Framework

🪙Ajouter une nouvelle application

  1. Ajouter la(les) nouvelle(s) application(s) dans le dossier apps (chemin d'accès: src/test/resources/apps)

  2. 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

🪙Ajout de nouveaux scénarios

  1. 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. |
  1. Définir les methodes de "steps definition" dans le dossier stepdef (chemin d'accès : src/test/java/FrameworkMediumIos/stepdef)
  2. 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)
  3. Utiliser les "objets" créés pour la redaction des methodes de step definition

🎯Déboggage et Maintenance

🔴Débogage

  • 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

🔴Maintenance

  • 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

About

Le Framework Medium Mobile IOS est 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.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published