Maestro : l’outil de tests mobiles qui dépasse Appium en simplicité (14 400 étoiles GitHub)
Tests mobiles natifs × syntaxe YAML = fini les configurations Appium de 300 lignes
Tu veux automatiser tes tests iOS et Android sans passer une semaine à configurer Appium. Maestro te donne une syntaxe YAML déclarative, zéro dépendance complexe, et un support natif de React Native et Flutter dès l’installation. Aujourd’hui tu vas apprendre à :
- Installer Maestro localement sur macOS ou Linux en quelques minutes
- Écrire ton premier flow YAML pour tester une app iOS ou Android
- Comprendre où Maestro bat Appium, et où il est encore limite
- Connecter Maestro à ton pipeline CI/CD via GitHub Actions
- Évaluer si Maestro Cloud vaut le coût additionnel pour ton projet
Ce dont t’as besoin avant de commencer
1. JDK installé sur ta machine
Maestro tourne sur la JVM. Tu as besoin d’un JDK (version 11 ou plus récente recommandée). Si tu n’en as pas, brew install openjdk sur macOS règle ça rapidement. Sans ça, le CLI refuse de démarrer.
2. Android SDK ou Xcode selon ta cible
Pour les tests Android, tu as besoin d’Android SDK avec adb accessible dans ton PATH. Pour iOS, Xcode doit être installé sur macOS. Maestro communique directement avec le simulateur ou l’appareil via ces outils natifs.
3. Un émulateur ou appareil connecté
Lance ton émulateur Android via Android Studio, ou démarre un simulateur iOS via Xcode. Maestro détecte automatiquement le premier appareil disponible. Si tu as plusieurs appareils, tu précises lequel avec --device.
4. Le CLI Maestro installé
Une seule commande :
curl -Ls "https://get.maestro.mobile.dev" | bash
C’est tout. Pas de npm install, pas de pip install, pas de dépendances à gérer manuellement.
5. Ton APK ou IPA à tester
Tu as besoin de l’app installée sur l’émulateur. Pour Android, adb install monapp.apk. Pour iOS sur simulateur, tu peux drag-and-drop le .app directement dans le simulateur.
| Critère | Configuration Appium | Configuration Maestro |
|---|---|---|
| Dépendances requises | Appium Server, WebDriver, drivers spécifiques, Node.js | CLI unique, JDK |
| Fichier de config initial | Fichier JSON + classe Java/JS | Fichier YAML de quelques lignes |
| Compatibilité React Native | Via WebDriver (setup fragile) | Support natif |
| Compatibilité Flutter | Via plugin tiers | Support natif |
| Exécution CI/CD | Scripts complexes | Commande unique |
Le workflow, étape par étape
Installer Maestro CLI
2-5 min
L’installation via curl place le binaire dans ~/.maestro/bin. Tu dois ajouter ce chemin à ton PATH pour appeler maestro depuis n’importe quel répertoire. Sur macOS avec zsh, c’est une ligne dans ton ~/.zshrc. Sur Linux, ~/.bashrc ou ~/.profile selon ta config.
Important
Sur macOS Ventura et plus récent, Gatekeeper peut bloquer le binaire au premier lancement. Un simplexattr -d com.apple.quarantine ~/.maestro/bin/maestro règle ça. Sinon tu peux passer par Homebrew si Maestro y est disponible à la date de lecture. Démarrer ton émulateur et vérifier la connexion
3-5 min
maestro studio ouvre une interface locale dans le navigateur. Cette interface te permet d’inspecter les éléments de ton app en temps réel, d’identifier les IDs accessibles, et de construire tes flows de manière interactive. C’est l’équivalent de l’inspecteur Appium, mais sans la lourdeur du setup serveur.
Écrire ton premier flow YAML
10-15 min
Voici la structure d’un flow de connexion typique :
▸ Exemple de flow YAML Maestro pour un écran de connexion iOS/Android
appId: com.tonapp.mobile
---
- launchApp
- tapOn: "Email"
- inputText: "test@exemple.com"
- tapOn: "Mot de passe"
- inputText: "MonMotDePasse"
- tapOn: "Se connecter"
- assertVisible: "Tableau de bord"
- takeScreenshot: login_success Ce que tu vois ici : chaque action est un item YAML. tapOn accepte un texte visible à l’écran ou un sélecteur d’accessibilité. assertVisible vérifie qu’un élément est présent. takeScreenshot génère une capture à ce moment du test. Aucune ligne de code Java, Kotlin, Swift ou JavaScript requise.
Exécuter le flow et analyser les résultats
2-3 min
La commande maestro test exécute le flow sur l’appareil connecté. Le terminal affiche chaque action avec un statut (réussi/échoué). En cas d’échec, Maestro génère automatiquement une capture d’écran du moment de l’erreur. Ça élimine le temps passé à comprendre pourquoi un test a planté.
Important
Maestro utilise les identifiants d’accessibilité pour trouver les éléments. Si ton app n’a pas de labels d’accessibilité configurés (accessibilityLabel sur React Native, Semantics sur Flutter), plusieurstapOn vont échouer. C’est une bonne raison d’améliorer l’accessibilité de ton app au passage. Organiser plusieurs flows et les chaîner
15-20 min
Quand ton projet grossit, tu organises tes flows en fichiers séparés. Un flow setup.yaml pour l’état initial, un login_flow.yaml, un checkout_flow.yaml. Tu les chaînes avec runFlow: ./setup.yaml au début de chaque test qui en a besoin. C’est l’équivalent des beforeEach en Jest, mais déclaratif.
Intégrer dans GitHub Actions
10 min
Voici l’essentiel d’un workflow GitHub Actions pour Maestro :
▸ Configuration GitHub Actions pour exécuter Maestro sur un émulateur Android en CI/CD
name: Maestro Mobile Tests
on: [push, pull_request]
jobs:
mobile-tests:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Installer Maestro CLI
run: curl -Ls "https://get.maestro.mobile.dev" | bash
- name: Ajouter Maestro au PATH
run: echo "$HOME/.maestro/bin" >> $GITHUB_PATH
- name: Démarrer émulateur Android
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 33
script: maestro test flows/ GitHub Actions inclut 2 000 minutes d’exécution gratuites par mois sur le plan Free. Pour des tests mobiles, les runners macOS consomment plus de minutes que Linux. À planifier dans ton quota selon la fréquence de tes pushes.
Complexité de setup relative
Le hic
Soyons clairs. Maestro a des angles morts réels, et les ignorer te coûtera du temps. La gestion des scénarios complexes est encore jeune. Dès que tu as besoin de logique conditionnelle avancée (si X alors Y, boucles sur des listes dynamiques, gestion d’états imprévisibles), le YAML déclaratif de Maestro devient vite limité. Appium, avec ses bindings Java ou Python, te donne un langage de programmation complet. Maestro te donne du YAML, et c’est sa force autant que sa limite. L’écosystème de plugins est moins mature. Appium a plus de 21 600 étoiles GitHub et plusieurs années d’écosystème derrière lui. Des plugins pour la gestion des réseaux, la simulation de conditions réseau dégradées, l’intégration avec des outils de performance spécifiques : Appium a souvent un plugin communautaire, Maestro pas encore. Si ton workflow de tests dépend de cas limites spécialisés, tu vas chercher des solutions qui n’t existent peut-être pas. Maestro Cloud représente un coût additionnel à évaluer sérieusement. Exécuter tes tests sur de vrais appareils physiques (pas des émulateurs) nécessite Maestro Cloud, leur service payant. Pour la CI/CD sur émulateurs seulement, tu t’en tires avec GitHub Actions gratuit. Mais si tu veux des garanties sur des appareils réels variés, l’addition monte. Vérifie leur pricing actuel avant de commit ton architecture. Le debugging d’un flow qui échoue de manière intermittente peut être frustrant. Les tests flaky (qui passent parfois, échouent d’autres fois) existent dans tous les frameworks de tests UI. Avec Maestro, les outils de debugging restent plus limités qu’avec des frameworks matures. Les captures d’écran automatiques aident, mais tu n’as pas encore l’équivalent d’un mode trace complet comme Playwright. Playwright ne remplace pas Maestro pour le mobile natif. L’inverse est aussi vrai : Maestro ne remplace pas Playwright pour le web. Playwright a plus de 88 000 étoiles GitHub et domine les tests web avec raison. Mais pour les apps React Native et Flutter avec du code natif, Playwright s’arrête aux WebViews. Maestro va plus loin.
| Critère | Maestro | Appium | Playwright |
|---|---|---|---|
| Mobile natif iOS | Oui | Oui | Non |
| Mobile natif Android | Oui | Oui | Non |
| React Native (natif) | Support natif | Via WebDriver | WebView seulement |
| Flutter (natif) | Support natif | Plugin tiers | Non |
| Web / WebView | Limité | Oui | Excellent |
| Logique conditionnelle | YAML limité | Langage complet | Langage complet |
| Maturité écosystème | Jeune | Mature | Très mature |
| Étoiles GitHub | 14 400 | 21 600 | 88 000+ |
Quelques trucs bons à savoir
- Maestro identifie les éléments par texte visible, par identifiant d’accessibilité, ou par index. Le texte visible est le plus fragile si ton app change de copie souvent.
- Le flag
--format junitsurmaestro testgénère un rapport XML compatible avec les systèmes CI comme Jenkins ou GitHub Actions sans configuration supplémentaire. - Pour React Native, tu peux assigner des
testIDsur tes composants et les cibler directement dans Maestro avecid: "monTestId". C’est plus que cibler par texte. - Pour Flutter, Maestro utilise le framework Semantics natif. Assure-toi que tes widgets critiques ont des
Semanticsdéfinis. - Maestro supporte les flows paramétrés via des variables d’environnement. Tu peux passer
MAESTRO_APP_ID=com.autreapp maestro test flow.yamlpour réutiliser le même flow sur différentes apps. - Le dossier
.maestro/à la racine de ton projet peut contenir ta config globale. Utile pour définir l’appIdpar défaut et éviter de le répéter dans chaque fichier. - Sur iOS physique, Maestro nécessite une configuration supplémentaire liée aux certificats de développement Apple. Sur simulateur, ça marche sans friction.
Check-list finale
✓ Avant de lancer
Verdict + prochaines étapes
Maestro vaut la peine pour toute équipe qui développe une app React Native ou Flutter et qui veut des tests d’intégration UI sans la surcharge de configuration d’Appium. Tu réduis le volume de code de setup de manière significative, et tu démarres à tester en quelques dizaines de minutes plutôt qu’en quelques jours. Évite Maestro si ton projet requiert une logique de test conditionnelle très avancée, si tu dépends d’un écosystème de plugins spécialisés qui n’existe que dans Appium, ou si tu travailles exclusivement sur du web (Playwright reste imbattable dans ce registre). La prochaine étape concrète : installe le CLI, connecte ton émulateur, et écris un flow de cinq actions sur ton écran de connexion. Trente minutes suffisent pour avoir quelque chose qui tourne.
Check tes courriels.
Lien à cliquer pour confirmer ton abonnement.
Texte par David Cyr
