Das Python-Installationsprogramm fĂŒr Android zum Selbermachen wird von TeamCity erstellt


Das Publikum


QS-Ingenieure, Tester fĂŒr mobile Anwendungen, Automatisierung.


Das Problem


WĂ€hrend des Testens von Anwendungen fĂŒr Android (nicht nur, sondern weiter werden wir nur ĂŒber diese Plattform sprechen) mĂŒssen Sie viele Baugruppen des getesteten Produkts / der getesteten Produkte installieren. Dieser Prozess erfordert Zeit und MĂŒhe, was effizienter ist, um Fehler zu finden.


In diesem Artikel werden wir uns eine vorhandene Lösung ansehen, unsere eigene in Python schreiben und sie vergleichen.


SchlĂŒsselfertige Lösung


Die derzeit vielleicht beliebteste Lösung fĂŒr dieses Problem ist der Crashlytics-Dienst, zu dem auch das Beta-Installationsprogramm gehört.


Betrachten Sie einen typischen Anwendungsinstallationsprozess mit Crashlytics Beta:


  • Wir finden das Beta-Symbol (1) → tippen Sie auf (2) = die Anwendung startet.
  • Wir finden das gewĂŒnschte Projekt (3) → tippen Sie auf (4) = ein Bildschirm mit einer Liste von Baugruppen wird geöffnet.
  • Suchen Sie die gewĂŒnschte Baugruppe (5) → Tippen Sie auf „Herunterladen“ (6) = Die Installationsdatei wird auf das GerĂ€t heruntergeladen.
  • Ein Bildschirm mit einem Vorschlag zur Installation der Anwendung wird angezeigt → Tippen Sie auf „Installieren“ (7) = Der Installationsbildschirm wird angezeigt.
  • Suchen Sie die installierte Anwendung (8) → Tippen Sie auf (9) = Die Anwendung wird gestartet. bereit zum Testen.

Um einen Anwendungsbuild mit Crashlytics Beta zu installieren und auszufĂŒhren, mĂŒssen Sie insgesamt mindestens neun Aktionen ausfĂŒhren. Wir werden uns auf diese Indikatoren konzentrieren und versuchen, ein Installationsprogramm zu erstellen, das weniger Aktionen erfordert, um Ă€hnliche Probleme zu lösen.


Kundenspezifische Lösung


Wir wĂ€hlen Python als Programmiersprache, weil es fĂŒr unsere Aufgabe geeignet und sehr beliebt ist, auch bei QS-Ingenieuren.
FĂŒr die Interaktion mit Android verwenden wir adb, das Teil des Standard-Android-SDK ist.
Dateien herunterladen - Wget.
In unserem Fall werden Baugruppen in TeamCity ausgefĂŒhrt.


Fahren wir nun mit dem Schreiben von Code fort.


ZunĂ€chst importieren wir das Unterprozessmodul in das Projekt. Es ist erforderlich, die Befehle wget und adb auszufĂŒhren.


import subprocess 

FĂŒgen Sie die erforderlichen Einstellungen fĂŒr Wget hinzu.


 settings = {'user': '—user=__teamcity', 'password': '—password=__teamcity', 'way': '____'} 

Wir werden Anwendungen anhand der Build-Nummer installieren und dem Skript beibringen, nach diesem Parameter zu fragen.


 number = input(' № : ') 

Nehmen wir an, wir mĂŒssen zwei Baugruppen gleichzeitig installieren: Test und Kampf. Wir werden sie von TeamCity herunterladen. Dazu lernen wir den vollstĂ€ndigen Pfad zu den Dateien, indem wir die Serviceseite öffnen und die Baugruppe in den Artefakten finden. Die URL vor der Montage sieht ungefĂ€hr so ​​aus:


 https://teamcity.mysite.com/repository/app/_/_/myapp-_-_.apk 

In der Adresse sehen Sie anstelle der Baugruppennummer die ID, z. B. / 1234: id /. Hier geben wir nicht die ID, sondern die Baugruppennummer an.


Wir werden eine Funktion zum Herunterladen der angegebenen Baugruppen schreiben.


 def download(type_b): url = 'http://teamcity.mysite.com/repository/app/{0}/{1}/myapp-{0}-{1}.apk'.format(number, type_b) #    — ,  ,    —   , #     —  subprocess.check_output(['wget', '-N', '--cache=off', '--progress=bar', settings['user'], settings['password'], '-P', settings['way'], url]) 

Wir werden eine Funktion zum Installieren und AusfĂŒhren von Anwendungen schreiben. Entfernen Sie zuerst zuvor installierte Baugruppen. Vergessen Sie nicht, dass das Skript mit einem Fehler endet, wenn sich mindestens eine Anwendung nicht auf dem GerĂ€t befindet. Um dies zu vermeiden, werden wir Fehler ignorieren.


In diesem imaginÀren Beispiel zwei Pakete:


  • com.myapp.prod
  • com.myapp.test

StartaktivitÀten:


  • com.myapp.prod/com.myapp.StartActivity
  • com.myapp.test / com.myapp.StartActivity

Ihre Paket- und AktivitÀtsnamen sind unterschiedlich.


 def install(type_b): try: #   ,  package name subprocess.check_output(['adb', 'uninstall', 'com.myapp.{0}'.format(type_b)]) except: #     —  . pass finally: #    subprocess.check_output(['adb', 'install', '{0}/myapp-{1}-{2}.apk'.format(settings['way'], number, type_b)]) #   ,  activity name subprocess.check_output(['adb', 'shell', 'am', 'start', 'com.myapp.{0}/com.myapp.StartActivity'.format(type_b)]) print('(^_^)  ({0}-{1})   .'.format(number, type_b)) 

Alle notwendigen Funktionen sind geschrieben. Jetzt können sie angewendet werden.
DarĂŒber hinaus fĂŒgen wir einen Handler fĂŒr den Fall hinzu, dass sich die angegebene Assembly nicht in TeamCity befindet.


 while True: try: #  ,     download('prod') #  ,     download('test') except Exception: #    —     number = input('¯\_(ツ)_/¯   .\n  №: ') else: print(' 
') #      install('prod') #      install('test') #    —       print('! (_8(|)\n') break 

Das Skript ist fertig. Wir speichern es zum Beispiel unter dem Namen installer.py
FĂŒgen Sie einen Alias ​​hinzu, z. B. den Alias ​​inst = 'python ~ / scripts / installer.py'.


ÜberprĂŒfen Sie


Um eine Assembly mit Crashlytics Beta zu installieren, mĂŒssen Sie 9 Aktionen ausfĂŒhren. Zum Vergleich messen wir diesen Indikator im Skript.


  • Wir starten das Skript mit dem Befehl inst (1) = Es wird ein Vorschlag zum Festlegen der Build-Nummer angezeigt.
  • Stellen Sie die Baugruppennummer (2) ein = alte Baugruppen werden gelöscht; Laden Sie neue herunter, installieren Sie sie und starten Sie sie. Die Anwendung ist zum Testen bereit.

Ergebnis


Beta (1 Build) - 9 Aktionen (ohne Löschen alter Builds).
Ihr eigenes Skript (so viele Assemblys wie Sie möchten) - 2 Aktionen.


Ein zusĂ€tzlicher Vorteil der benutzerdefinierten Lösung besteht darin, dass sie skalierbar ist (HinzufĂŒgen der Installation mehrerer Produkte zu einer Reihe von GerĂ€ten usw.) und sich auch problemlos an die Aufgaben des automatischen Testens anpassen lĂ€sst.


Quellen


Source: https://habr.com/ru/post/de426149/


All Articles