Aujourd'hui, lorsque chaque rĂ©sident d'une mĂ©galopole a dans sa poche un ordinateur qui peut faire bien plus que voler vers la lune , nous utilisons quotidiennement des applications mobiles. ActualitĂ©s, mĂ©tĂ©o, promotions, shopping - toutes ces fonctions sont implĂ©mentĂ©es dans des centaines de milliers d'applications. Mais si votre application prĂ©fĂ©rĂ©e se bloque ou se bloque, elle cesse rapidement d'ĂȘtre votre prĂ©fĂ©rĂ©e.

Cet article a été écrit par les gars de
WaveAccess.Nous développons des applications mobiles depuis plus de 10 ans et nous ne pouvons pas nous permettre de lancer un produit entre les mains des utilisateurs. C'est pourquoi «pomper» l'équipe de test et l'infrastructure n'est pas moins important pour nous que dans d'autres domaines.
Des centaines d'appareils Android, des iPhones avec diffĂ©rentes versions du systĂšme d'exploitation et une diagonale diffĂ©rente d'appareils posent le dĂ©fi aux ingĂ©nieurs QA de «dĂ©tecter» les dĂ©fauts sur de vrais appareils mobiles et sur diffĂ©rentes versions de systĂšmes d'exploitation. Mais peu de gens peuvent exĂ©cuter le mĂȘme script manuel sur 10, 20, 50 appareils. GrĂące Ă ces tĂąches, nous avons amĂ©liorĂ© notre compĂ©tence de test automatique, en particulier sur les appareils mobiles. Mais soyons honnĂȘtes: crĂ©er et maintenir l'infrastructure mĂȘme avec 20 vrais appareils pour exĂ©cuter des autotests est un casse-tĂȘte.
Dans cet article, nous voulons dire comment nous avons essayé le nouveau service Microsoft App Center pour vérifier la qualité de l'application que nous développons au zoo des vrais appareils.
Pourquoi se pose la question de l'utilisation du service
Nous développons maintenant une application pour soutenir les achats. Le projet dure depuis longtemps: le client propose constamment de nouvelles fonctionnalités, il ne fait que développer pour le développement. Il existe déjà des dizaines d'écrans dans l'application, des fonctions «acheter» aux diverses options de message, push, «récupérer votre arc». Et pendant tout ce temps, des présentations du projet aux investisseurs, des lancements dans de nouveaux centres commerciaux ont lieu, donc plus la vitesse de sortie est élevée (sans baisse de la qualité du produit) - mieux c'est.
Jusqu'à présent, nous avons effectué des autotests sur un nombre limité d'appareils qui étaient à notre disposition (pour ce projet - environ 30 appareils Android et «pommes»). Maintenant, l'application atteint un nouveau niveau, le public a augmenté et la qualité est devenue encore plus critique. La question s'est posée de l'utilisation d'un service cloud pour exécuter des autotests sur des appareils plus différents.
Au cours des versions, je voulais utiliser toutes les pratiques de développement de logiciels modernes et éprouvées: revue croisée, intégration continue, tests fonctionnels et unitaires automatisés sur une grande liste d'appareils sur iOS + Android, collection d'analyses et de crashlytics.
Nous avons appliquĂ© chacune de ces pratiques plus tĂŽt, Ă la fois individuellement et en combinaison. Mais vu l'ampleur du projet et la taille importante de l'Ă©quipe, je souhaitais obtenir une solution universelle. Laisser l'outil ĂȘtre capable de faire tout ce qui prĂ©cĂšde et en un seul endroit peut fournir une opportunitĂ© de gĂ©rer l'Ă©tat de dĂ©veloppement et de livraison d'applications mobiles pour diffĂ©rentes plates-formes et de le surveiller.
Chacun des rĂŽles dans l'Ă©quipe avait ses propres conditions: les dĂ©veloppeurs ne voulaient pas changer le processus de dĂ©veloppement dĂ©jĂ Ă©tabli (rĂ©fĂ©rentiel, outil de construction, etc.), ainsi que passer Ă des outils trop nouveaux et non vĂ©rifiĂ©s dans le prod. Les ingĂ©nieurs de test rĂȘvaient de rĂ©duire la charge de contrĂŽle des appareils au zoo, les gestionnaires et le client souhaitaient une interface pratique pour surveiller l'ensemble de l'Ă©tat avec un flux transparent.
L'étude des analogues est une étape assez importante dans le choix d'un outil. Nous avons examiné divers services fournissant de telles capacités (pour les tests Appium, par exemple, BrowserStack). Dans le cas du Microsoft App Center, nous avons eu une période d'essai, nous avons donc eu l'occasion d'essayer de comprendre ce qui va arriver au projet si nous consacrons un peu plus de ressources à la qualité et automatisons l'ensemble du processus de publication de l'application mobile pour toute plateforme avec un service. Nous disons comment c'était.
Comment configurer l'application iOS
Ainsi, en utilisant la période d'essai, qui n'impose aucune restriction sur la fonctionnalité, nous créons notre application iOS dans le Microsoft App Center:

Choisissez une plateforme:

Ajoutez le SDK App Center au projet:
pod 'AppCenter'
AprÚs avoir installé les foyers, ouvrez le fichier AppDelegate.swift et ajoutez les lignes suivantes sous votre propre commande d'importation:
import AppCenter import AppCenterAnalytics import AppCenterCrashes
Dans le mĂȘme fichier, ajoutez les lignes suivantes Ă la mĂ©thode didFinishLaunchingWithOptions:
MSAppCenter.start("{Your App Secret}", withServices:[ MSAnalytics.self, MSCrashes.self ])
Un processus similaire est pour l'objectif C, la version complĂšte de l'instruction est ici .
Buildim!
Allez dans l'onglet Build, sélectionnez notre service svc.


Configurez la construction. N'oubliez pas de signer, car cela nous gĂ©nĂšre un fichier d'application au format d'application qui peut ĂȘtre exĂ©cutĂ© sur de vrais appareils:


C'est fait! Cliquez sur le bouton Générer maintenant et attendez la génération.


Une histoire similaire pour les applications Android, l'instruction est ici .
Nous lançons les premiers tests pour iOS
Des tests unitaires et natifs pour chaque plate-forme peuvent ĂȘtre inclus dans l'assemblage (il y a une coche). Nous expliquons ci-dessous les fonctionnalitĂ©s d'AT sur diffĂ©rents appareils.
Configurer un ensemble d'appareils iOS, Android, envoyer des tests Ă un ensemble
Accédez à l'onglet Test, Ensembles de périphériques. Nous créons un ensemble d'appareils sur lesquels nous allons conduire nos tests. Il y a plus de 250 appareils Android au choix et plus de 200 appareils iOS différents (version génération + version iOS). Une liste détaillée des appareils est ici .
Ici, il était un peu décevant que la réponse officielle à la question, à savoir combien de temps aprÚs la sortie des nouveaux appareils Apple, sonne comme "1-2 mois aprÚs la vente".
Nous préparons les tests pour le lancement dans l'App Center (un exemple pour XCUITest) et les envoyons pour le lancement. L'App Center a la capacité de créer uniquement des applications, vous devez donc toujours créer le projet de test localement sur votre machine ou dans votre CI.
Shell: # Generate an XCUITest bundle and your iOS application as described above. $ rm -rf DerivedData $ xcrun xcodebuild build-for-testing -derivedDataPath DerivedData -scheme YOUR_APP_SCHEME # Upload your test to App Center $ appcenter test run xcuitest \ --app "<app center username/<app name>" \ --devices DEVICE_SET \ --test-series "master" \ --locale "en_US" \ --build-dir DerivedData/Build/Products/Debug-iphoneos
Appium- tests
Il convient de s'assurer que les cadres de test utilisĂ©s sont cohĂ©rents avec ceux pris en charge. De plus, vous devez utiliser le pilote fourni par l'App Center, ce qui impose ses limites Ă l'utilisation des frameworks (par exemple, Google Giuce ne peut pas ĂȘtre utilisĂ©).
Création de projet pour les utilisateurs Maven
Ătape 1. Ajouter un rĂ©fĂ©rentiel et des dĂ©pendances
Vous devrez ajouter le référentiel JCenter au fichier pom.xml.
XML <repositories> <repository> <id>jcenter</id> <url>https://jcenter.bintray.com/</url> </repository> </repositories>
Ajoutez ensuite une dépendance pour les extensions des tests Appium
XML <dependency> <groupId>com.microsoft.appcenter</groupId> <artifactId>appium-test-extension</artifactId> <version>1.3</version> </dependency>
Ainsi, lors de la compilation, les pilotes étendus Android et iOS seront disponibles (qui sont nécessaires, tout d'abord, pour implémenter la fonction «étiquette»; plus à ce sujet à l'étape 4).
Ătape 2. Ajoutez un profil de dĂ©marrage
Copiez l' extrait dans votre pom.xml dans <profiles>. Si la section <profiles> est manquante dans le fichier pom, vous devez la crĂ©er. AprĂšs l'activation, le profil regroupe nos classes de test et toutes les dĂ©pendances dans le dossier cible / tĂ©lĂ©chargement, prĂȘt Ă ĂȘtre tĂ©lĂ©chargĂ© sur TestCloud.
Construire pour les utilisateurs Gradle
Ătape 1. RĂ©fĂ©rentiel et dĂ©pendances
Nous nous assurons que dans le build.gradle dans le dossier racine du projet, le référentiel JCenter est activé:
gradle allprojects { repositories { jcenter() } }
Ajoutez l'extrait de code suivant Ă build.gradle dans le dossier de l'application:
gradle androidTestCompile('com.microsoft.appcenter:appium-test-extension:1.0')
à partir de Gradle 3.0, androidTestCompile est déconseillé . Au lieu de cela, vous avez besoin de androidTestImplementation.
Ătape 2. Automatisez la gĂ©nĂ©ration du fichier pom
Pour que l'uploader fonctionne, le fichier pom.xml est requis. Ajoutez l'extrait de code suivant dans build.gradle dans le dossier de l'application afin que le fichier pom soit automatiquement collecté:
gradle apply plugin: 'maven' task createPom { pom { withXml { def dependenciesNode = asNode().appendNode('dependencies') //Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each configurations.testCompile.allDependencies.each { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) } def profilesNode = asNode().appendNode('profiles') profilesNode.append(new XmlParser().parse('https://raw.githubusercontent.com/Microsoft/AppCenter-Test-Appium-Java-Extensions/master/gradleuploadprofilesnippet.xml')) } }.writeTo("pom.xml")
Modifications des tests
Ătape 1. Ajouter des importations
Importez des packages dans vos classes de test:
Java import com.microsoft.appcenter.appium.Factory; import com.microsoft.appcenter.appium.EnhancedAndroidDriver; import org.junit.rules.TestWatcher; import org.junit.Rule;
Ătape 2. CrĂ©ez une instance de TestWatcher
Ajoutez Ă chaque classe de test de rĂšgle JUnit (ou Ă la classe de test de base):
Java @Rule public TestWatcher watcher = Factory.createWatcher();
Ătape 3. Modifiez le type de pilote
Modifiez le type de pilote lorsqu'il est déclaré, soit d'AndroidDriver <MobileElement> à EnhancedAndroidDriver <MobileElement>, soit d'IOSDriver <MobileElement> à EnhancedIOSDriver <MobileElement>
Java private static EnhancedAndroidDriver<MobileElement> driver;
Ătape 4. Mise Ă jour des instances de pilote
Nous modifions les instances du pilote pour que les lignes du formulaire:
Java driver = new AndroidDriver<MobileElement>(url, capabilities);
... changé d'aspect:
Java driver = Factory.createAndroidDriver(url, capabilities);
L'utilisation de ces pilotes vous permettra toujours d'exécuter des tests localement sans modifications supplémentaires, mais vous permettra en outre d'ajouter une «étiquette» aux étapes d'un test exécutable en utilisant driver.label («votre texte»). Le texte et la capture d'écran de l'appareil seront disponibles dans le rapport de test dans Test Cloud. Il est fortement recommandé d'accéder à l'étiquette via la méthode After , car cela ajoutera une capture d'écran du dernier état de l'application au rapport de test.
Une capture d'Ă©cran sera prise mĂȘme si le test Ă©choue. En rĂšgle gĂ©nĂ©rale, il contient suffisamment d'informations pour comprendre pourquoi cela s'est produit. Un exemple d'implĂ©mentation dans la mĂ©thode After :
Java: @After public void TearDown(){ driver.label("Stopping App"); driver.quit(); }
Télécharger dans le test App Center
Le processus de chargement est le suivant:
- Générez la commande de téléchargement de test App Center. Documentation (EN) - démarrage d'un test .
- Nous emballons les classes de test et toutes les dépendances dans le dossier target / upload
coquille:
- mvn -DskipTests -P package de préparation au téléchargement
- Le téléchargement et l'exécution des tests ont commencé
Une fois terminé, nous pouvons afficher les résultats sur chaque appareil à partir de la liste:

Ăcrans avec rĂ©sultats, journaux, rapport
Sur chacun des appareils iOS ou Android, vous pouvez afficher un journal détaillé et une capture d'écran pour diagnostiquer un crash de test:



Ainsi que des statistiques de tous les lancements sur un intervalle de temps:

Certes, l'accÚs au «périphérique» pour le débogage et l'inspection n'est pas fourni. Si quelque chose ne va pas avec les tests et les journaux ne suffisent pas - tout est décidé uniquement par le biais du support. Dans l'un des services populaires pour lancer AT sur des appareils - BrowserStack - il existe une telle opportunité, et il est intégré à Appium. On pourrait donner l'URL et le port pour créer une connexion au serveur de périphérique.
Conclusions
Ătonnamment, l'ensemble du processus de publication, de l'intĂ©gration continue Ă la livraison continue de l'application, est fourni en un seul endroit: Microsoft App Center propose la crĂ©ation, le test, le dĂ©ploiement de CI pour le stockage, l'analyse, le crashlytics.
Ayant essayé moins de la moitié des fonctionnalités proposées, l'équipe a fait bonne impression. Des avantages évidents: vous n'avez pas besoin d'écrire la prise en charge de chaque appareil sous forme de code. Eh bien, d'autres goodies s'il vous plaßt:
- Pas besoin d'élever le serveur pour une foule d'appareils.
- Pas besoin de connecter 100500 appareils Ă ce serveur.
- Pas besoin de vivre avec les pépins Android lorsqu'il est activé 24 \ 7.
- Pas besoin d'assembler un conteneur pour l'appareil, pas besoin de gérer ces conteneurs.
- Pas besoin de supporter des émulateurs limités.
Le Microsoft App Center nous a organisé selon les paramÚtres initiaux: il n'est pas trÚs exigeant en termes d'intégration, mais il fournit toutes les fonctions demandées, éliminant le support difficile. Nous prévoyons d'utiliser le service sur le projet, car il résout les tùches des outils tout en garantissant la qualité.