Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Mäin Numm ass Dmitry, ech schaffen als Tester an der Firma MEL Wëssenschaft. Ganz kuerzem fäerdeg ech mat enger relativ rezent Fonktioun vun Firebase Test Lab - nämlech mat instrumentellen Testen vun iOS Uwendungen mat dem gebiertege Testkader XCUITest.

Virun dësem hunn ech de Firebase Test Lab fir Android scho probéiert a wierklech alles gefall, also hunn ech decidéiert d'iOS Testinfrastruktur vum Projet op de selwechte Fouss ze setzen. Ech hu vill misse Google an net alles huet déi éischte Kéier geklappt, also hunn ech beschloss en Tutorialsartikel ze schreiwen fir déi déi nach ëmmer kämpfen.

Also, wann Dir UI Tester op engem iOS Projet hutt, kënnt Dir scho probéieren se haut op realen Apparater ze lafen, frëndlech vun Good Corporation geliwwert. Fir déi interesséiert, wëllkomm op der Kaz.

An der Geschicht hunn ech beschloss op e puer initial Donnéeën ze bauen - e private Repository op GitHub an dem CircleCI Build System. Den Numm vun der Applikatioun ass AmazingApp, bundleID ass com.company.amazingapp. Ech presentéieren dës Donnéeën direkt fir spéider Duercherneen ze reduzéieren.

Wann Dir verschidde Léisungen an Ärem Projet anescht implementéiert hutt, deelt Är Erfahrung an de Kommentaren.

1. D'Tester selwer

Erstellt eng nei Projetszweig fir UI Tester:

$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”

Loosst eis de Projet an XCode opmaachen an en neit Zil mat UI Tester erstellen [XCode -> Datei -> Neit -> Target -> iOS Testing Bundle], ginn et de selbstverständlechen Numm AmazingAppUITests.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Gitt an d'Build Phasen Sektioun vum erstallten Target a kontrolléiert d'Präsenz vun Target Dependencies - AmazingApp, a Compile Sources - AmazingAppUITests.swift.

Eng gutt Praxis ass verschidde Bauoptiounen an getrennte Schemaen ze trennen. Mir kreéieren e Schema fir eis UI Tester [XCode -> Produkt -> Schema -> Neie Schema] a ginn et deeselwechten Numm: AmazingAppUITests.

Bau vum erstallte Schema muss d'Zil vun der Haaptapplikatioun enthalen - AmazingApp an Target UI Tester - AmazingAppUITests - kuckt Screenshot

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Als nächst erstelle mir eng nei Konfiguratioun fir UI Tester. An XCode, klickt op de Projet Fichier a gitt op d'Info Sektioun. Klickt op "+" a erstellt eng nei Konfiguratioun, zum Beispill XCtest. Mir wäerten dat an Zukunft brauchen fir ze vermeiden mat enger Tambourin ze danzen wann et ëm d'Code-Ënnerschreiwe geet.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Et ginn op d'mannst dräi Ziler an Ärem Projet: d'Haaptapplikatioun, Eenheetstester (schliisslech existéieren se, richteg?) An d'Target UI Tester déi mir erstallt hunn.

Gitt op Target AmazingApp, Build Settings Tab, Code Signing Identity Sektioun. Fir d'XCtest Konfiguratioun, wielt iOS Entwéckler. An der Code Signing Style Sektioun, wielt Manuell. Mir hunn nach keen Dispositiounsprofil generéiert, awer mir kommen definitiv e bësse méi spéit drop zréck.

Fir Target AmazingAppUITests maache mir datselwecht, awer an der Produkt Bundle Identifier Kolonn gitt mir com.company.amazingappuitests.

2. E Projet am Apple Developer Programm opzestellen

Gitt op d'Apple Entwéckler Programm Säit, gitt op d'Zertifikater, Identifizéierer & Profiler Sektioun an dann an d'App IDs Kolonn vum Element Identifizéierer. Erstellt eng nei App ID genannt AmazingAppUITests an bundleID com.company.amazingappuitests.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Elo hu mir d'Méiglechkeet eis Tester mat engem getrennten Zertifika z'ënnerschreiwen, awer ... D'Prozedur fir e Build fir d'Test ze montéieren beinhalt d'Assemblée vun der Applikatioun selwer an d'Montage vum Testrunner. Deementspriechend si mir mam Problem konfrontéiert zwee Bündel-IDs mat engem Bestëmmungsprofil z'ënnerschreiwen. Glécklecherweis gëtt et eng einfach an elegant Léisung - Wildcard App ID. Mir widderhuelen d'Prozedur fir eng nei App ID ze kreéieren, awer amplaz vun explizit App ID, wielt Wildcard App ID wéi am Screenshot.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Zu dësem Zäitpunkt si mir fäerdeg mat developer.apple.com ze schaffen, awer mir wäerten d'Browserfenster net minimiséieren. Loosst eis goen Fastlane Dokumentatioun Site a liest iwwer de Match Utility vu Cover zu Cover.

En opmierksam Lieser huet gemierkt datt fir dëst Utility ze benotzen, brauche mir e private Repository an e Kont mat Zougang zum Apple Developer Program a Github. Mir kreéieren (wann op eemol net esou eppes ass) e Kont vun der Form [Email geschützt], kommt mat engem staarke Passwuert, registréiert et bei developer.apple.com, a ernennt et als Projetsadministrator. Als nächst gi mir de Kont Zougang zum Github Repository vun Ärer Firma an erstellen en neie private Repository mat engem Numm wéi AmazingAppMatch.

3. Astelle Fastlane an de Match Utility

Öffnen en Terminal, gitt an den Dossier mam Projet an initialiséiert Fastlane wéi uginn an offiziell Handbuch. Nodeems Dir de Kommando aginn hutt

$ fastlane init

Dir wäert opgefuerdert sinn verfügbare Benotzungskonfiguratiounen ze wielen. Wielt déi véiert Optioun - manuell Projet Setup.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

De Projet huet en neie Verzeechnes Fastlane, deen zwee Dateien enthält - Appfile a Fastfile. An enger Nossschuel späichere mir Servicedaten an Appfile, a schreiwen Aarbechtsplazen an Fastfile, genannt Bunnen an der Fastlane Terminologie. Ech recommandéieren déi offiziell Dokumentatioun ze liesen: Zäiten, два.

Öffnen d'Appfile an Ärem Liiblingstexteditor a bréngt et op déi folgend Form:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # Созданный инфраструктурный аккаунт, имеющий право на редактирование iOS проекта в Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

Mir zréck op den Terminal an no der offizieller Handbuch fänken mir Match ze konfiguréieren.

$ fastlane match init
$ fastlane match development

Als nächst gitt déi ugefrote Donnéeën - Repository, Kont, Passwuert, asw.

Et ass wichteg fir: Wann Dir de Match Utility fir d'éischt lancéiert, gitt Dir gefrot e Passwuert anzeginn fir de Repository ze entschlësselen. Et ass ganz wichteg dëst Passwuert ze späicheren; mir wäerten et brauchen wann Dir den CI Server opstellt!

Eng nei Datei ass am Fastlane Dossier erschéngt - Matchfile. Öffnen et an Ärem Liiblings Texteditor a weist et esou:

git_url("https://github.com/YourCompany/AmazingAppMatch") #Созданный приватный репозиторий для хранения сертификатов и профайлов.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

Mir fëllen et genau esou aus wa mir Match an Zukunft benotze wëllen fir Builds z'ënnerschreiwen fir ze weisen an Crashlytics an/oder AppStore, dat heescht fir d'Bundle ID vun Ärer Applikatioun z'ënnerschreiwen.

Awer, wéi mir eis erënneren, hu mir eng speziell Wildcard ID erstallt fir den Testbau z'ënnerschreiwen. Dofir, öffnen Fastfile a gitt eng nei Spur:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
    )

end

Späichert a gitt an den Terminal

fastlane testing_build_for_firebase

a mir gesinn wéi Fastlane en neien Zertifika erstallt huet an et an de Repository gesat huet. Super!

Open XCode. Elo hu mir den néidege Bestëmmungsprofil vun der Form Match Development com.company.*, déi muss an der Bestëmmungsprofil Sektioun fir d'AmazingApp an AmazingAppUITests Ziler spezifizéiert ginn.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Et bleift d'Spuer ze addéieren fir Tester ze montéieren. Loosst eis goen repository e Plugin-Projet fir Fastlane, deen et méi einfach mécht den Export op Firebase Test Lab opzestellen an d'Instruktioune befollegen.

Loosst eis aus dem ursprénglechen Beispill kopéieren-paste sou datt eise Lane testing_build_for_firebase esou ausgesäit:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (к этой строчке вернемся позже)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

Fir komplett Informatiounen iwwert Ariichten fastlane zu CircleCI, Ech recommandéieren déi offiziell Dokumentatioun liesen Zäiten, два.

Vergiesst net eng nei Aufgab op eis config.yml ze addéieren:

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # обновляем зависимости
     - run:
         name: install gcloud-sdk   # на mac машину необходимо установить gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # запускаем lane сборки и отправки в firebase

4. Wat iwwer eis Testbänk? Firebase opsetzen.

Loosst eis erofgoen fir wat den Artikel geschriwwen ass.

Vläicht benotzt Är App Firebase op engem gratis Plang, oder vläicht guer net. Et gëtt absolut kee fundamentalen Ënnerscheed, well fir Testbedürfnisser kënne mir e separate Projet mat engem Joer gratis benotzen (cool, richteg?)

Mir aloggen op eisen Infrastruktur Kont (oder all aner, et ass egal), a gitt op Firebase Konsol Säit. Erstellt en neie Projet mam Numm AmazingAppUITests.

Et ass wichteg fir: Am virege Schrëtt an der Fastfile an der Lane firebase_test_lab_ios_xctest soll de gcp_project Parameter dem Projet Numm passen.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

D'Standardastellunge passen eis ganz gutt.

Maacht den Tab net zou, registréiert Iech ënner dem selwechte Kont an Gcloud - dëst ass eng noutwendeg Moossnam, well Kommunikatioun mat Firebase geschitt mat der gcloud Konsol Interface.

Google gëtt $300 fir e Joer, wat am Kontext vun der Ausféierung vun Autotester entsprécht engem Joer gratis Gebrauch vum Service. Mir gitt Är Bezuelinformatioun, waart op eng Testdebit vun $1 a kréien $300 op Äre Kont. No engem Joer gëtt de Projet automatesch op e gratis Tarifplang transferéiert, sou datt et keng Suergen iwwer méigleche Verloscht vu Suen ass.

Loosst eis zréck op d'Tab mam Firebase-Projet an iwwerdroen et op de Blaze Tarifplang - elo hu mir eppes ze bezuelen wann d'Limit iwwerschratt gëtt.

An der gcloud Interface, wielt eise Firebase Projet, wielt den Haaptmenü "Directory" a füügt d'Cloud Testing API a Cloud Tools Result API derbäi.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Da gitt op d'Menüpunkt "IAM an Administratioun" -> Servicekonten -> Erstellt Servicekonto. Mir ginn d'Rechter fir de Projet z'änneren.

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Erstellt en API Schlëssel am JSON Format

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet

Mir brauche den erofgeluede JSON e bësse méi spéit, awer fir de Moment wäerte mir den Test Lab Setup komplett betruechten.

5. Ariichten CircleCI

Eng raisonnabel Fro stellt sech - wat mat Passwierder ze maachen? Den Ëmweltverännerleche Mechanismus vun eiser Baumaschinn hëlleft eis eis Passwierder an aner sensibel Donnéeën sécher ze späicheren. An de CircleCI Projet Astellungen, wielt Ëmfeld Variablen

Mir lafen instrumentell Tester am Firebase Test Lab. Deel 1: iOS Projet
A set déi folgend Variabelen op:

  • Schlëssel: GOOGLE_APPLICATION_CREDENTIALS
    Wäert: Inhalt vun der json Datei vum gcloud Service Kont Schlëssel
  • Schlëssel: MATCH_PASSWORD
    Wäert: Passwuert fir d'Entschlësselung vum Github Repository mat Certificaten
  • Schlëssel: FASTLANE_PASSWORD
    Wäert: Apple Entwéckler Portal Infrastruktur Kont Passwuert

Mir späicheren d'Ännerungen, kreéieren e PR a schécken et un eis Teamleader fir iwwerpréift.

Resultater

Als Resultat vun dësen einfache Manipulatioune krute mir e gudden, stabilen Aarbechtsstand mat der Fäegkeet fir Video um Apparatbildschierm op der Zäit vum Test opzehuelen. Am Test Beispill uginn ech den iPhone X Apparat Modell, mä de Bauerenhaff stellt eng räich Auswiel vun enger Kombinatioun vu verschiddene Modeller an iOS Versiounen.

Den zweeten Deel gëtt fir Schrëtt-fir-Schrëtt Setup vum Firebase Test Lab fir en Android Projet gewidmet.

Source: will.com

Setzt e Commentaire