Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Mitt namn Ă€r Dmitrij, jag arbetar som tester inom företaget MEL Science. Jag har precis blivit klar med att utforska en relativt ny funktion frĂ„n Firebase Test Lab — nĂ€mligen, med instrumentellt testande av iOS-appar med hjĂ€lp av det inbyggda testningsramverket XCUITest.

Tidigare har jag redan provat Firebase Test Lab för Android och jag gillade det mycket, sÄ jag bestÀmde mig för att försöka sÀtta upp testinfrastrukturen för mitt iOS-projekt pÄ samma sÀtt. Jag var tvungen att googla mycket och allt gick inte bra första gÄngen, dÀrför bestÀmde jag mig för att skriva en artikel/tutorial för dem som fortfarande har detta framför sig.

SĂ„ om ni har UI-tester i ert iOS-projekt, kan ni redan idag prova att köra dem pĂ„ verkliga enheter, vĂ€nligt tillhandahĂ„llna av VĂ€lfĂ€rdsbolaget. De som Ă€r intresserade — vĂ€lkomna nedan.

I berĂ€ttelsen har jag valt att utgĂ„ frĂ„n viss grunddata — ett privat repository pĂ„ GitHub och byggsystemet CircleCI. Appens namn — AmazingApp, bundleID — com.company.amazingapp. Jag ger dessa uppgifter direkt för att minska eventuell förvirring senare.

Om ni har implementerat vissa lösningar i ert projekt pĂ„ ett annat sĂ€tt — dela gĂ€rna med er av erfarenheter i kommentarerna.

1. Tester

Skapa en ny gren av projektet för UI-tester:

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

Öppna projektet i XCode och skapa ett nytt mĂ„l (Target) för UI-tester [XCode -> File -> New -> Target -> iOS Testing Bundle], ge det ett talande namn AmazingAppUITests.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

GÄ till sektionen Build Phases för det skapade mÄlet och kontrollera att Target Dependencies inkluderar AmazingApp, i Compile Sources bör AmazingAppUITests.swift finnas.

En bra praxis Àr att sÀrskilja olika varianter av byggen i separata Scheman. Skapa ett schema för vÄra UI-tester [XCode -> Product -> Scheme -> New Scheme] och ge det samma namn: AmazingAppUITests.

Bygget av det skapade schemat ska inkludera Target för huvudapplikationen — AmazingApp och Target för UI-tester — AmazingAppUITests — se skĂ€rmdump.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

DÀrefter skapar vi en ny byggkonfiguration för UI-tester. I XCode klickar vi pÄ projektfilen, gÄr till sektionen Info. Klicka pÄ '+' och skapa en ny konfiguration, exempelvis XCtest. Detta kommer att behövas senare för att undvika problem nÀr det kommer till code signing.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

I ert projekt finns det minst tre Targets: huvudapplikationen, enhetstester (för de finns vÀl, eller hur?) och det mÄl för UI-tester som vi har skapat.

GÄ in i Target AmazingApp, fliken BygginstÀllningar, avsnittet Code Signing Identity. För konfigurationen XCtest vÀljer vi iOS Developer. I avsnittet Code Signing Style vÀljer vi Manual. Provisioning profile har vi Ànnu inte genererat, men vi kommer att Äterkomma till det snart.

För Target AmazingAppUITests gör vi likadant, men i fÀltet Product Bundle Identifier skriver vi com.company.amazingappuitests.

2. Konfigurera projektet i Apple Developer Program

GÄ till sidan Apple Developer Program, gÄ till avsnittet Certifikat, Identifierare & profiler och sedan till fÀltet App IDs i punkten Identifierare. Skapa en ny App ID med namnet AmazingAppUITests och bundleID com.company.amazingappuitests.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Nu har vi möjlighet att signera vĂ„ra tester med ett separat certifikat, men
 Byggproceduren för att testa innebĂ€r att vi mĂ„ste bygga sjĂ€lva applikationen och bygga test Runner. DĂ€rmed stöter vi pĂ„ problemet att signera tvĂ„ bundle ID med en provisioneringsprofil. Lyckligtvis finns det en enkel och elegant lösning — Wildcard App ID. Upprepa proceduren för att skapa en ny App ID, men istĂ€llet för Explicit App ID vĂ€ljer vi Wildcard App ID som pĂ„ skĂ€rmdumpen.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

I detta skede Àr vÄrt arbete med developer.apple.com slut, men vi stÀnger inte webblÀsarfönstret. Vi gÄr till dokumentationssidan för Fastlane och lÀser om verktyget Match frÄn början till slut.

Den uppmÀrksamma lÀsaren har noterat att för att anvÀnda det hÀr verktyget behöver vi ett privat repo och ett konto med Ätkomst till bÄde Apple Developer Program och Github. Vi skapar (om ett sÄdant inte finns) ett konto som InfrastructureAccount@your.company.domain, hittar pÄ ett starkt lösenord, registrerar det pÄ developer.apple.com, och utser det till projektadministratör. DÀrefter ger vi kontot tillgÄng till GitHub-repot för ditt företag och skapar ett nytt privat repository med ett namn som AmazingAppMatch.

3. Konfigurera Fastlane och verktyget match

Öppna terminalen, gĂ„ till mappen med projektet och initiera fastlane som angivet i den officiella manualen. Efter att ha angett kommandot

$ fastlane init

kommer du att bli ombedd att vĂ€lja tillgĂ€ngliga konfigurationsalternativ. VĂ€lj den fjĂ€rde punkten — manuell konfiguration av projektet.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Ett nytt bibliotek, fastlane, har dykt upp i projektet, dĂ€r tvĂ„ filer — Appfile och Fastfile — finns. I korthet lagrar vi tjĂ€nstedata i Appfile, och i Fastfile skriver vi in jobb, i Fastlane-terminologin kallade lanes. Jag rekommenderar att lĂ€sa den officiella dokumentationen: ett, tvĂ„.

Öppna Appfile i din favorit textredigerare och Ă€ndra den till följande:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "infrastructureaccount@your.company.domain"  # Skapat infrastrukturkonto med rÀttigheter att redigera iOS-projekt i Apple Developer Program.
team_id "LSDY3IFJAY9" # Ditt Developer Portal Team ID

Vi ÄtervÀnder till terminalen och börjar konfigurera match enligt den officiella manualen.

$ fastlane match init
$ fastlane match development

DÀrefter anger vi de begÀrda uppgifterna - repository, konto, lösenord osv.

Viktigt: vid första körningen kommer verktyget match att be om lösenord för att dekryptera repositoryt. Det Àr mycket viktigt att spara detta lösenord, dÄ vi kommer att behöva det vid CI-serverkonfigurationen!

I fastlane-mappen har en ny fil skapats - Matchfile. Öppna den i din favorittextredigerare och justera den till följande:

git_url("https://github.com/YourCompany/AmazingAppMatch") # Skapat privat repository för att lagra certifikat och profiler.
type("development") # Standardtyp, kan vara: appstore, adhoc, enterprise eller development
app_identifier("com.company.amazingapp")
username("infrastructureaccount@your.company.domain") # Ditt Infrastrukturkonto Apple Developer Portal anvÀndarnamn

Fyller i pÄ detta sÀtt om vi vill anvÀnda match för att signera byggen för distribution till Crashlytics och/eller AppStore, det vill sÀga för att signera bundle ID för din applikation.

Men, som vi minns, för att signera testbygget skapade vi ett speciellt Wildcard ID. SÄ, vi öppnar Fastfile och lÀgger till en ny lane:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # Skapar en separat branch för development certifikatet för signering av testbygget.
    )

end

Spara, skriv in i terminalen

fastlane testing_build_for_firebase

och vi ser hur fastlane har skapat ett nytt certifikat och lagt det i repositoryt. UtmÀrkt!

Öppna XCode. Nu har vi rĂ€tt provisioning profile av typen Match Development com.company.*, som ska anges i avsnittet Provisioning profile för mĂ„len AmazingApp och AmazingAppUITests.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Det ÄterstÄr att skriva lane för att bygga tester. Vi gÄr till arkiv projektet med plugin för fastlane, som underlÀttar konfigurationen för export till Firebase Test Lab och följer instruktionerna.

Kopiera och klistra in frÄn det ursprungliga exemplet, sÄ att vÄr lane testing_build_for_firebase till slut ser ut sÄ hÀr:


 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 (we'll get back to this line later)
      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

För att fÄ fullstÀndig information om hur man konfigurerar fastlane i CircleCI rekommenderar jag att lÀsa den officiella dokumentationen en gÄng, tvÄ.

Vi fÄr inte glömma att komplettera vÄr config.yml med en ny uppgift:

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     # uppdatera beroenden
     - run:
         name: install gcloud-sdk   # gcloud mÄste installeras pÄ Mac-datorn
         command: |
           ruby -e "$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/master\/install)"  \/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  # starta lane för byggande och överföring till firebase

4. Vad hÀnder med vÄr testmiljö? Vi stÀller in Firebase.

LÄt oss faktiskt gÄ till det Àmne denna artikel handlar om.

Kanske anvÀnder din app Firebase pÄ en gratisplan, kanske anvÀnder den inte alls. Det spelar ingen roll, för testningsbehov kan vi skapa ett separat projekt med ett Ärs gratistjÀnst (bra, eller hur?)

Logga in pÄ vÄrt infrastrukturella konto (eller nÄgot annat, spelar ingen roll), och gÄ till Firebase-konsolens sida. Skapa ett nytt projekt med namnet AmazingAppUITests.

Viktigt: I föregÄende steg i Fastfile ska parametern gcp_project i lane firebase_test_lab_ios_xctest motsvara projektets namn.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

De förvalda instÀllningarna passar oss bra.

StĂ€ng inte fliken, registrera dig med samma konto i Gcloud — det Ă€r en tvingad Ă„tgĂ€rd, eftersom kommunikationen med Firebase sker via gcloud-konsolens grĂ€nssnitt.

Google erbjuder 300 $ per Är, vilket i sammanhanget av automatisk testning motsvarar ett Är gratis anvÀndning av tjÀnsten. Vi anger betalningsuppgifter, vÀntar pÄ en testdebitering pÄ 1 $ och fÄr 300 $ pÄ kontot. Efter ett Är kommer projektet automatiskt att övergÄ till en gratis prissÀttningsplan, sÄ vi behöver inte oroa oss för eventuell förlust av pengar.

Vi Ă„tervĂ€nder till fliken med Firebase-projektet och uppgraderar det till prissĂ€ttningsplanen Blaze — nu har vi nĂ„got att betala med om vi överskrider grĂ€nsen.

I gcloud-grÀnssnittet vÀljer vi vÄrt Firebase-projekt, klickar pÄ huvudmenyn "Katalog" och lÀgger till Cloud Testing API och Cloud Tools Result API.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Vi gÄr sedan till menyn "IAM och administration" -> Servicekonton -> Skapa servicekonto. Vi ger redigeringsrÀttigheter för projektet.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Vi skapar en API-nyckel i JSON-format.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt

Den nedladdade JSON-filen kommer vi att behöva senare, sÄ vi anser att instÀllningen av Test Lab Àr avslutad för nu.

5. Konfigurering av CircleCI

En rimlig frĂ„ga uppstĂ„r — vad gör vi med lösenorden? För att sĂ€kert lagra vĂ„ra lösenord och annan kĂ€nslig information kan vi anvĂ€nda mekanismen för miljövariabler pĂ„ vĂ„r byggmaskin. I instĂ€llningarna för projektet i CircleCI vĂ€ljer vi Miljövariabler.

Kör verktygstester i Firebase Test Lab. Del 1: iOS-projekt
Och vi skapar följande variabler:

  • nyckel: GOOGLE_APPLICATION_CREDENTIALS
    vÀrde: innehÄllet i JSON-filen för servicekontots nyckel frÄn gcloud
  • nyckel: MATCH_PASSWORD
    vÀrde: lösenordet för att dekryptera GitHub-repositoriet med certifikaten
  • nyckel: FASTLANE_PASSWORD
    vÀrde: lösenordet för infrastrukturkontot pÄ Apple Developer Portal

Vi sparar Àndringarna, skapar en PR och skickar den pÄ granskning till vÄr teamledare.

Sammanfattning

Som ett resultat av dessa enkla ÄtgÀrder har vi fÄtt en bra, stabil miljö med möjlighet att spela in video frÄn enhetens skÀrm under testet. I det testexemplet angav jag enhetens modell iPhone X, men farmen erbjuder ett rikt urval av kombinationer av olika modeller och versioner av iOS.

Den andra delen kommer att handla om steg-för-steg-instÀllning av Firebase Test Lab för Android-projekt.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster