Wenn heute jeder Einwohner einer GroĂstadt einen Computer in der Tasche hat, der viel mehr kann als nur zum Mond zu fliegen , verwenden wir jeden Tag mobile Anwendungen. Nachrichten, Wetter, Werbeaktionen, Shopping - all diese Funktionen sind in Hunderttausenden von Anwendungen implementiert. Wenn eine Lieblingsanwendung jedoch einfriert oder abstĂŒrzt, ist sie schnell kein Favorit mehr.

Dieser Artikel wurde von den Jungs von
WaveAccess geschrieben.Wir entwickeln seit mehr als 10 Jahren mobile Anwendungen und können es uns nicht leisten, ein Produkt herauszubringen, das in den HĂ€nden der Benutzer liegt. Deshalb ist es fĂŒr uns nicht weniger wichtig, das Testteam und die Infrastruktur zu âpumpenâ als in anderen Bereichen.
Hunderte von Android-GerĂ€ten, iPhones mit unterschiedlichen Betriebssystemversionen und eine unterschiedliche Diagonale von GerĂ€ten stellen QS-Ingenieure vor die Aufgabe, Fehler auf realen MobilgerĂ€ten und auf verschiedenen Versionen von Betriebssystemen zu âerkennenâ. Nur wenige können dasselbe manuelle Skript auf 10, 20, 50 GerĂ€ten verarbeiten. Dank dieser Aufgaben haben wir unsere FĂ€higkeit zum automatischen Testen, insbesondere auf MobilgerĂ€ten, verbessert. Aber seien wir ehrlich: Das Erstellen und Verwalten der Infrastruktur selbst mit 20 realen GerĂ€ten zum AusfĂŒhren von Autotests bereitet Kopfschmerzen.
In diesem Artikel möchten wir Ihnen zeigen, wie wir den neuen Microsoft App Center-Dienst ausprobiert haben, um die QualitĂ€t der Anwendung zu ĂŒberprĂŒfen, die wir im Zoo realer GerĂ€te entwickeln.
Warum stellte sich die Frage nach der Nutzung des Dienstes?
Jetzt entwickeln wir eine Anwendung zur UnterstĂŒtzung des Einkaufs. Das Projekt lĂ€uft schon lange: Der Kunde bietet stĂ€ndig neue Funktionen an, die er nur fĂŒr uns entwickeln wird. Es gibt bereits Dutzende von Bildschirmen in der Anwendung, von "Kaufen" bis zu verschiedenen Nachrichtenoptionen, DrĂŒcken, "Sammeln Sie Ihren Bogen" -Funktionen. Und wĂ€hrend dieser ganzen Zeit finden PrĂ€sentationen des Projekts fĂŒr Investoren und Starts in neuen Einkaufszentren statt. Je höher die Veröffentlichungsgeschwindigkeit (ohne Abnahme der ProduktqualitĂ€t), desto besser.
Bisher haben wir Autotests auf einer begrenzten Anzahl von GerĂ€ten durchgefĂŒhrt, die uns zur VerfĂŒgung standen (fĂŒr dieses Projekt - etwa 30 Android-GerĂ€te und âĂpfelâ). Jetzt erreicht die Anwendung ein neues Niveau, das Publikum ist gewachsen und die QualitĂ€t ist noch kritischer geworden. Es stellte sich die Frage, ob ein Cloud-Dienst zum AusfĂŒhren von Autotests auf verschiedenen GerĂ€ten verwendet werden soll.
Bei der Veröffentlichung wollte ich alle modernen und bewĂ€hrten Softwareentwicklungsmethoden anwenden: Cross-Review, kontinuierliche Integration, automatisierte Funktions- und Komponententests auf einer groĂen Liste von GerĂ€ten unter iOS + Android, Sammlung von Analysen und Crashlytics.
Wir haben jede dieser Praktiken frĂŒher angewendet, sowohl einzeln als auch in Kombination. Angesichts des Umfangs des Projekts und der GröĂe des Teams wollte ich jedoch eine universelle Lösung. Lassen Sie das Tool in der Lage sein, all das zu tun, und bieten Sie an einem Ort die Möglichkeit, den Entwicklungs- und Bereitstellungsstatus mobiler Anwendungen fĂŒr verschiedene Plattformen zu verwalten und zu ĂŒberwachen.
Jede der Rollen im Team hatte ihre eigenen Bedingungen: Die Entwickler wollten den bereits eingerichteten Entwicklungsprozess (Repository, Build-Tool usw.) nicht Ă€ndern und zu zu neuen, nicht verifizierten Tools im Produkt wechseln. Testingenieure trĂ€umten davon, die Belastung der KontrollgerĂ€te im Zoo zu verringern. Manager und Kunden wollten eine bequeme Schnittstelle zur Ăberwachung des gesamten Zustands mit transparentem Fluss.
Das Studium von Analoga ist eine ziemlich wichtige Phase bei der Auswahl eines Werkzeugs. Wir haben uns verschiedene Dienste angesehen, die solche Funktionen bereitstellen (fĂŒr Appium-Tests, z. B. BrowserStack). Im Fall des Microsoft App Centers erhielten wir eine Testphase, sodass wir versuchen konnten, zu verstehen, was mit dem Projekt passieren wĂŒrde, wenn wir etwas mehr Ressourcen fĂŒr die QualitĂ€t verwenden und den gesamten Freigabeprozess der mobilen Anwendung fĂŒr jede Plattform mit einem Dienst automatisieren. Wir erzĂ€hlen, wie es war.
So richten Sie die iOS-App ein
Unter Verwendung des Testzeitraums, der die FunktionalitÀt nicht einschrÀnkt, erstellen wir unsere iOS-Anwendung im Microsoft App Center:

WĂ€hlen Sie eine Plattform:

FĂŒgen Sie dem Projekt das App Center SDK hinzu:
pod 'AppCenter'
Ăffnen Sie nach der Installation der Herde die Datei AppDelegate.swift und fĂŒgen Sie die folgenden Zeilen unter Ihrem eigenen Importbefehl hinzu:
import AppCenter import AppCenterAnalytics import AppCenterCrashes
FĂŒgen Sie der didFinishLaunchingWithOptions-Methode in derselben Datei die folgenden Zeilen hinzu:
MSAppCenter.start("{Your App Secret}", withServices:[ MSAnalytics.self, MSCrashes.self ])
Ein Ă€hnlicher Prozess ist fĂŒr Ziel C, die Vollversion der Anweisung ist hier .
Buildim!
Gehen Sie zur Registerkarte Erstellen und wÀhlen Sie unseren SVC-Dienst aus.


Konfigurieren Sie den Build. Vergessen Sie nicht zu unterschreiben, da dies eine Anwendungsdatei im App-Format generiert, die auf realen GerĂ€ten ausgefĂŒhrt werden kann:


Fertig! Klicken Sie auf die SchaltflÀche Jetzt erstellen und warten Sie auf den Build.


Eine Ă€hnliche Geschichte fĂŒr Android-Anwendungen finden Sie hier .
Wir starten die ersten Tests fĂŒr iOS
Unit- und native Tests fĂŒr jede Plattform können in die Assembly aufgenommen werden (es gibt ein HĂ€kchen). Im Folgenden wird die FunktionalitĂ€t von AT auf verschiedenen GerĂ€ten beschrieben.
Richten Sie eine Reihe von iOS- und Android-GerÀten ein und senden Sie Tests an eine Reihe
Wechseln Sie zur Registerkarte Test, GerĂ€tesĂ€tze. Wir erstellen eine Reihe von GerĂ€ten, auf denen wir unsere Tests durchfĂŒhren werden. Es stehen mehr als 250 Android-GerĂ€te zur Auswahl und mehr als 200 verschiedene iOS-GerĂ€te (Generationsversion + iOS-Version). Eine detaillierte Liste der GerĂ€te finden Sie hier .
Hier war es ein wenig enttĂ€uschend, dass die offizielle Antwort auf die Frage, wie bald nach der Veröffentlichung die neuen Apple-GerĂ€te erscheinen, wie â1-2 Monate nach dem Verkaufâ klingt.
Wir bereiten die Tests fĂŒr den Start im App Center vor (ein Beispiel fĂŒr XCUITest) und senden sie zum Start. Das App Center kann nur Anwendungen erstellen, sodass Sie das Testprojekt weiterhin lokal auf Ihrem Computer oder in Ihrem CI erstellen mĂŒssen.
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
Es lohnt sich sicherzustellen, dass die verwendeten Test-Frameworks mit den unterstĂŒtzten ĂŒbereinstimmen. DarĂŒber hinaus mĂŒssen Sie den vom App Center bereitgestellten Treiber verwenden. Dies schrĂ€nkt die Verwendung von Frameworks ein (z. B. kann Google Giuce nicht verwendet werden).
Projekterstellung fĂŒr Maven-Benutzer
Schritt 1. FĂŒgen Sie ein Repository und AbhĂ€ngigkeiten hinzu
Sie mĂŒssen das JCenter-Repository zur Datei pom.xml hinzufĂŒgen.
XML <repositories> <repository> <id>jcenter</id> <url>https://jcenter.bintray.com/</url> </repository> </repositories>
FĂŒgen Sie dann eine AbhĂ€ngigkeit fĂŒr Erweiterungen von Appium-Tests hinzu
XML <dependency> <groupId>com.microsoft.appcenter</groupId> <artifactId>appium-test-extension</artifactId> <version>1.3</version> </dependency>
WĂ€hrend der Kompilierung stehen daher die erweiterten Android- und iOS-Treiber zur VerfĂŒgung (die zunĂ€chst zur Implementierung der Label-Funktion benötigt werden; mehr dazu in Schritt 4).
Schritt 2. FĂŒgen Sie ein Startprofil hinzu
Kopieren Sie das Snippet in Ihre pom.xml in <Profile>. Wenn der Abschnitt <Profile> in der POM-Datei fehlt, mĂŒssen Sie ihn erstellen. Nach der Aktivierung packt das Profil unsere Testklassen und alle AbhĂ€ngigkeiten in den Ziel- / Upload-Ordner, der zum Hochladen in TestCloud bereit ist.
Build fĂŒr Gradle-Benutzer
Schritt 1. Repository und AbhÀngigkeiten
Wir stellen sicher, dass in der Datei build.gradle im Projektstammordner das JCenter-Repository aktiviert ist:
gradle allprojects { repositories { jcenter() } }
FĂŒgen Sie build.gradle im Anwendungsordner das folgende Snippet hinzu:
gradle androidTestCompile('com.microsoft.appcenter:appium-test-extension:1.0')
Ab Gradle 3.0 ist androidTestCompile veraltet . Stattdessen benötigen Sie androidTestImplementation.
Schritt 2. Automatisieren Sie die Generierung der POM- Datei
Damit der Uploader funktioniert, ist die Datei pom.xml erforderlich. FĂŒgen Sie das folgende Snippet in build.gradle im Anwendungsordner hinzu, damit die POM-Datei automatisch erfasst wird:
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")
TestÀnderungen
Schritt 1. Importe hinzufĂŒgen
Importieren Sie Pakete in Ihre Testklassen:
Java import com.microsoft.appcenter.appium.Factory; import com.microsoft.appcenter.appium.EnhancedAndroidDriver; import org.junit.rules.TestWatcher; import org.junit.Rule;
Schritt 2. Erstellen Sie eine Instanz von TestWatcher
Zu jeder JUnit Rule-Testklasse (oder der Basistestklasse) hinzufĂŒgen:
Java @Rule public TestWatcher watcher = Factory.createWatcher();
Schritt 3. Ăndern Sie den Fahrertyp
Ăndern Sie den Treibertyp, wenn er deklariert wird, entweder von AndroidDriver <MobileElement> in EnhancedAndroidDriver <MobileElement> oder von IOSDriver <MobileElement> in EnhancedIOSDriver <MobileElement>
Java private static EnhancedAndroidDriver<MobileElement> driver;
Schritt 4. Aktualisieren der Treiberinstanzen
Wir Àndern die Treiberinstanzen so, dass die Zeilen des Formulars:
Java driver = new AndroidDriver<MobileElement>(url, capabilities);
... im Aussehen verÀndert:
Java driver = Factory.createAndroidDriver(url, capabilities);
Mit diesen Treibern können Sie weiterhin Tests ohne zusĂ€tzliche Ănderungen lokal ausfĂŒhren. DarĂŒber hinaus können Sie den Schritten in einem ausfĂŒhrbaren Test mithilfe von driver.label ("Ihr Text") eine "Bezeichnung" hinzufĂŒgen. Der Text und der Screenshot vom GerĂ€t sind im Testbericht in Test Cloud verfĂŒgbar. Es wird dringend empfohlen, dass Sie ĂŒber die After- Methode auf das Etikett zugreifen, da dies dem Testbericht einen Screenshot des letzten Status der Anwendung hinzufĂŒgt.
Ein Screenshot wird auch dann erstellt, wenn der Test fehlschlĂ€gt. In der Regel sind genĂŒgend Informationen enthalten, um zu verstehen, warum dies passiert ist. Eine Beispielimplementierung in der After- Methode:
Java: @After public void TearDown(){ driver.label("Stopping App"); driver.quit(); }
In den App Center- Test herunterladen
Der Ladevorgang ist wie folgt:
- Generieren Sie den App Center Test-Upload-Befehl. Dokumentation (DE) - Starten eines Testlaufs .
- Wir packen Testklassen und alle AbhÀngigkeiten in den Ziel- / Upload-Ordner
Shell:
- mvn -DskipTests -P Paket zum Vorbereiten des Uploads
- Das Herunterladen und AusfĂŒhren von Tests wurde gestartet
Nach Abschluss können wir die Ergebnisse auf jedem GerÀt aus der Liste anzeigen:

Bildschirme mit Ergebnissen, Protokollen, Bericht
Auf jedem iOS- oder Android-GerÀt können Sie ein detailliertes Protokoll und einen Screenshot zur Diagnose eines Testabsturzes anzeigen:



Sowie Statistiken aller Starts ĂŒber ein Zeitintervall:

Richtig, der Zugriff auf das "GerĂ€t" zum Debuggen und ĂberprĂŒfen wird nicht bereitgestellt. Wenn bei den Tests etwas schief geht und die Protokolle nicht ausreichen, wird alles nur durch Support entschieden. In einem der beliebten Dienste zum Starten von AT auf GerĂ€ten - BrowserStack - gibt es eine solche Möglichkeit, und sie ist in Appium integriert. Man könnte die URL und den Port angeben, um eine Verbindung zum GerĂ€teserver herzustellen.
Schlussfolgerungen
Ăberraschenderweise wird der gesamte Release-Prozess von der kontinuierlichen Integration bis zur kontinuierlichen Bereitstellung der Anwendung an einem Ort bereitgestellt: Microsoft App Center bietet CI-Erstellung, Test, Bereitstellung zum Speichern, Analyse und Crashlytics.
Nachdem das Team weniger als die HĂ€lfte der vorgeschlagenen FunktionalitĂ€t ausprobiert hatte, machte es einen guten Eindruck. Aus den offensichtlichen Pluspunkten: Sie mĂŒssen nicht fĂŒr jedes GerĂ€t UnterstĂŒtzung in Form von Code schreiben. Nun, andere Leckereien bitte:
- Sie mĂŒssen den Server nicht fĂŒr eine Vielzahl von GerĂ€ten erhöhen.
- Es ist nicht erforderlich, 100500 GerĂ€te an diesen Server anzuschlieĂen.
- Keine Notwendigkeit, mit Android-Störungen zu leben, wenn es 24 \ 7 eingeschaltet ist.
- Sie mĂŒssen keinen Container fĂŒr das GerĂ€t zusammenstellen, diese Container mĂŒssen nicht verwaltet werden.
- Keine Notwendigkeit, begrenzte Emulatoren zu ertragen.
Das Microsoft App Center hat uns nach den anfĂ€nglichen Parametern geordnet: Es ist nicht sehr anspruchsvoll in Bezug auf die Integration, bietet jedoch alle erforderlichen Funktionen, wodurch die schwierige UnterstĂŒtzung entfĂ€llt. Wir planen, den Service fĂŒr das Projekt zu nutzen, da er die Aufgaben der Tools löst und gleichzeitig die QualitĂ€t sicherstellt.