Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Minu nimi on Dmitri, töötan testijana ettevĂ”ttes MEL Science. Alles hiljuti lĂ”petasin ma tutvumise suhteliselt uue funktsiooniga Firebase Test Lab — nimelt, iOS-rakenduste instrumentaalsete testide lĂ€biviimine natiivse testimisraamistiku XCUITest abil.

Enne seda proovisin Firebase Test Labi Androidi jaoks ja mulle meeldis see vÀga, nii et otsustasin proovida iOS projekti testimisstruktuuri sarnastele radadele seada. Olin sunnitud palju Google'isse minema ja mitte kÔik ei Ônnestunud esimesel katsel, seetÔttu otsustasin kirjutada artikli-tutvustuse neile, kellel see veel ees.

Nii et kui teil on iOS projektis UI testid, saate juba tÀna proovida neid kÀivitada reaalsetel seadmetel, mille on lahkelt pakkunud Heategevuskorporatsioon. Huvi korral - tulge edasi.

Otsustasin jutustamise aluseks vĂ”tta mĂ”ned algandmed - privaatne hoidla GitHubis ja CircleCI ehitussĂŒsteem. Rakenduse nimi on AmazingApp, bundleID — com.company.amazingapp. Too andmed vĂ€lja kohe, et vĂ€hendada hilisemaid segadusi.

Kui te olete oma projektis teatud lahendusi erinevalt rakendanud, jagage kogemusi kommentaarides.

1. Testid ise

Loome projekti uue haru UI testide jaoks:

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

Avame projekti XCode'is ja loome uue EesmÀrgi (Target) UI testide jaoks [XCode -> File -> New -> Target -> iOS Testing Bundle], anname sellele arusaadava nime AmazingAppUITests.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Liigume loodud EesmĂ€rgi Build Phase'i sektsiooni ja kontrollime, kas olemas on Target Dependencies — AmazingApp, Compile Sources — AmazingAppUITests.swift.

Hea praktika on erinevate kogumiste eraldamine eraldi Skeemidesse (Schemes). Loome skeemi meie UI testide jaoks [XCode -> Product -> Scheme -> New Scheme] ja anname sellele sama nime: AmazingAppUITests.

Loodud skeemi kogumine peaks sisaldama pĂ”hiraamatulu Targetit — AmazingApp ja Targetit UI testide — AmazingAppUITests — vt. ekraanipilt.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Edasi, loome UI testide jaoks uue kogumise konfiguratsiooni. XCode'is klĂ”psame projekti failil, liigume sektsiooni Info. KlĂ”psame “+” ja loome uue konfiguratsiooni, nĂ€iteks XCtest. See tuleb meil hiljem kasuks, et vĂ€ltida keerulisi olukordi, kui jĂ”uame koodiallkirjastamiseni.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Teie projektis on vĂ€hemalt kolm Targetit: pĂ”hiraamat, ĂŒhiku testid (need on ju olemas, eks?) ja meie loodud Target UI testide jaoks.

Sisenege Target AmazingApp, vahekaart Build Settings, jaotises Code Signing Identity. XCtest konfiguratsiooni jaoks valige iOS Developer. Jaotises Code Signing Style valige Manual. Provisioning profile'i me veel ei ole genereerinud, kuid natuke hiljem tagasime sellele kindlasti.

Target AmazingAppUITests jaoks teeme sama, kuid toote paketitunnuse vÀljale kirjutame com.company.amazingappuitests.

2. Projekti seadistamine Apple Developer Program'is

Siseneme Apple Developer Program'i lehele, liigume jaotisse Certificates, Identifiers & Profiles ja seejÀrel punktis Identifiers vÀljale App IDs. Loome uue App ID nimega AmazingAppUITests ja bundleID-ga com.company.amazingappuitests.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

NĂŒĂŒd on meil vĂ”imalus allkirjastada meie testid eraldi sertifikaadiga, kuid... Testimise jaoks mĂ”eldud build-protsess eeldab rakenduse enda ja testide kĂ€ivitaja build'i loomist. Seega seisame silmitsi probleemiga allkirjastada kahte bundle ID-d ĂŒhe provisioning profile'iga. Õnneks on olemas lihtne ja elegantne lahendus — Wildcard App ID. Kordame uue App ID loomise protsessi, kuid Explicit App ID asemel valime Wildcard App ID nagu ekraanipildil.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Selle etapi jooksul on töö developer.apple.com-is lÔpetatud, kuid sulgege brauseri aken me ei kavatse. Liigume Fastlane dokumentatsiooni lehele ja loeme Match utiliidist alates lÔpuni.

Hoolsad lugejad on mÀrganud, et selle utiliidi kasutamiseks on vaja privaatset repot ning kontot, mis omab juurdepÀÀsu nii Apple Developer Program'ile kui ka Github'ile. Loome (kui seda veel ei ole) konto vormis InfrastructureAccount@your.company.domain, mÔtleme vÀlja tugeva parooli, registreerime selle developer.apple.com-is ning mÀÀrame projekti halduriks. SeejÀrel anname kontole juurdepÀÀsu teie ettevÔtte github repole ja loome uue privaatse repoga nimega AmazingAppMatch.

3. Fastlane'i ja match utiliidi seadistamine

Avame terminali, liikume projekti kausta ja initsialiseerime fastlane'i nagu on kirjeldatud ametlikus juhendis. PÀrast kÀsu sisestamist

$ fastlane init

pakutakse valida saadavalolevaid kasutuskonfiguratsioone. Valime neljanda punkti — projekti kĂ€sitsi seadistamine.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Projektis on tekkinud uus kaust fastlane, milles asuvad kaks faili — Appfile ja Fastfile. LĂŒhidalt öeldes — Appfile'is hoiame teenuseandmeid ja Fastfile'is kirjutame ĂŒlesandeid, Fastlane'i terminoloogias lanes. Soovitan lugeda ametlikku dokumentatsiooni: ĂŒks, kaks.

Avame Appfile oma lemmikteksti redigeerijas ja viime selle jÀrgmisse vormingusse:

app_identifier "com.company.amazingapp"       # Bundli ID
apple_dev_portal_id "infrastructureaccount@your.company.domain"  # Loodud infrastruktuuri konto, millel on Ôigus redigeerida iOS projekti Apple Developer Program'is.
team_id "LSDY3IFJAY9" # Teie arendaja portaali meeskonna ID

Tagasi terminali ja hakkame ametliku juhendi jÀrgi seadistama match.

$ fastlane match init
$ fastlane match development

Sisestame kĂŒsitud andmed — repositoorium, konto, parool jne.

Oluline: esmakordsel kĂ€ivitamisel kĂŒsib utiliit match parooli repositooriumi dekrĂŒpteerimiseks. On vĂ€ga oluline see parool salvestada, see on vajalik CI serveri seadistamisetapis!

Fastlane kaustas on tekkinud uus fail — Matchfile. Avame selle oma lemmik tekstiredaktoris ja viime selle jĂ€rgmisesse vormi:

git_url("https://github.com/YourCompany/AmazingAppMatch") # Loodud privaatne repositoorium, et salvestada sertifikaate ja profiile.
type("development") # Vaikimisi tĂŒĂŒp, vĂ”ib olla: appstore, adhoc, enterprise vĂ”i development
app_identifier("com.company.amazingapp")
username("infrastructureaccount@your.company.domain") # Teie infrastruktuuri konto Apple Developer Portaali kasutajanimi

TÀidame selle just nii, kui soovime hiljem kasutada match'i rakenduste allkirjastamiseks Crashlytics'isse ja/vÔi AppStore'i, st teie rakenduse bundli ID allkirjastamiseks.

Kuid, nagu me mÀletame, lÔime testversiooni allkirjastamiseks spetsiaalse Wildcard ID. Seega avame Fastfile'i ja kirjutame uue lane'i:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # loome eraldi haru development sertifikaadi jaoks testversiooni allkirjastamiseks.
    )

end

Salvestame, sisestame terminali

fastlane testing_build_for_firebase

ja nÀeme, kuidas fastlane lÔi uue sertifikaadi ja salvestas selle repositooriumisse. SuurepÀrane!

Avame XCode'i. NĂŒĂŒd on meil vajalik provisions profiil Match Development com.company.*, mida tuleb mÀÀrata AmazingApp ja AmazingAppUITests sihtkohtades Provisions profiili sektsioonis.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

JÀÀb veel kirjutada lane testide koostamiseks. Liigume hoidla fastlane'i pistikprogrammi projekti, mis lihtsustab eksporti seadistamist Firebase Test Lab'isse ja jÀrgime instruktsioonide.

Kopeerime algses nÀites, et meie lane testing_build_for_firebase vÀlja nÀeks selline:


 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

Kogu teabe saamiseks fastlane'i seadistamise kohta CircleCI-s soovitan tutvuda ametliku dokumentatsiooniga. ĂŒks, kaks.

Ärge unustage tĂ€iendada meie config.yml uut ĂŒlesande:

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     # uuendame sÔltuvusi
     - run:
         name: install gcloud-sdk   # mac masin vajab gcloudi installimist
         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  # kÀivitame lane'i ehitamise ja saatmise firebase'i

4. Aga mis meie testimisstandiga? Seadistame Firebase'i.

Asume tegelikult selle juurde, miks artikkel kirjutati.

VĂ”imalik, et teie rakendus kasutab Firebase'i tasuta plaanil, vĂ”i vĂ”ib-olla ei kasuta see ĂŒldse. PĂ”himĂ”tteliselt ei ole seal suurt vahet, sest testimise vajadustele saame luua eraldi projekti aasta tasuta kasutamiseks (Ă€ge, eks? )

Logime sisse oma infrastruktuuri kontole (vÔi mÔnele muule, pole vahet) ja suundume Firebase'i konsooli lehele.. Loome uue projekti nimega AmazingAppUITests.

Oluline: Eelmises sammus Fastfile'is lane firebase_test_lab_ios_xctest parameeter gcp_project peab vastama projekti nimele.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Vaikeseaded sobivad meile ideaalselt.

Ärge sulgege vahekaart, samade kontoandmetega registreeruge Gcloud — see on hĂ€davajalik, kuna suhtleme Firebase'iga gcloudi konsooli liidese kaudu.

Google kingib 300$ aastas, mis on autotehnika testimise kontekstis vÔrreldav aasta tasuta teenuse kasutamisega. Sisestame makseandmed, ootame 1$ testimist ja saame kontole 300$. Aasta möödudes kantakse projekt automaatselt tasuta plaanile, seega ei pea raha kaotamise pÀrast muretsema.

Naaseme Firebase projekti vahelehele ja vahetame selle Blaze plaani peale — nĂŒĂŒd on meil, millega tasuda, juhul kui piirangud ĂŒletatakse.

gcloud liideses valime oma Firebase projekti, menĂŒĂŒs valime punkti "Kataloog" ja lisame Cloud Testing API ning Cloud Tools Result API.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

SeejĂ€rel liigume menĂŒĂŒsse "IAM ja haldamine" -> Teenusekontod -> Loo teenusekonto. Anname Ă”igused projekti redigeerimiseks.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Loome API vÔtme JSON formaadis

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt

Laaditud JSON-i vajame hiljem, kuid hetkel loeme Test Labi seadistuse lÔpetatuks.

5. CircleCI seadistamine

KĂŒsimus tekib — mis teha paroolidega? Meie paroolide ja teiste tundlike andmete usaldusvÀÀrseks salvestamiseks aitab ehitusmasina keskkonnamuutujad. CircleCI projekti seadetes valime Keskkonnamuutujad.

Kasutame instrumentaalteste Firebase Test Labis. Osa 1: iOS projekt
Ja loome jÀrgmised muutujad:

  • key: GOOGLE_APPLICATION_CREDENTIALS
    value: gcloud teenusekonto vÔtme JSON faili sisu
  • key: MATCH_PASSWORD
    value: parool githubi sertifikaatide hoidmise deĆĄifreerimiseks
  • key: FASTLANE_PASSWORD
    value: Apple Developer Portali infrastruktuuri konto parool

Salvestame muudatused, loome PR ja saadame review'le oma tiimijuhile.

Summary

Tulemuseks on see, et nende lihtsate toimingute kaudu saime head, stabiilselt töötavat seadet, millega on vÔimalik ekraanil olevat videovÔtet salvestada testimise ajal. TestnÀites mÀÀrasin seadme mudeliks iPhone X, kuid farm pakub rikkalikku valikut erinevate mudelite ja iOS versioonide kombinatsioone.

Teine osa keskendub samm-sammult Firebase Test Labi seadistamisele Android projekti jaoks.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster