Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Mi chjamu Dmitry, aghju travagliatu cum'è tester in una cumpagnia Scienza MEL. Ultimamente, aghju finitu di trattà cù una funzione relativamente fresca da laboratoriu di prova firebase - vale à dì, cù teste strumentali di l'applicazioni iOS chì utilizanu u quadru di teste nativu XCUITest.

Prima di quessa, aghju digià pruvatu Firebase Test Lab per Android è mi piaceva assai tuttu, cusì aghju decisu di pruvà à mette l'infrastruttura di prova iOS di u prughjettu nantu à i stessi rails. Aviu avutu à google assai è micca tuttu hà travagliatu a prima volta, cusì aghju decisu di scrive un articulu tutoriale per quelli chì anu da fà.

Allora, sè vo avete teste UI nantu à un prughjettu iOS, pudete digià pruvà à eseguisce oghje nantu à i dispositi veri, furnitu da a Good Corporation. Interessatu - benvenutu sottu cat.

In a storia, aghju decisu di custruisce nantu à qualchi dati fonte - un repository privatu in GitHub è u sistema di creazione CircleCI. U nome di l'applicazione hè AmazingApp, bundleID hè com.company.amazingapp. Citu questi dati immediatamente, per riduce a cunfusione sussegwente.

Sè avete implementatu certe suluzione in u vostru prughjettu di manera diversa, sparte a vostra sperienza in i cumenti.

1. I testi stessi

Crea un novu ramu di prughjettu per i testi UI:

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

Apertemu u prugettu in XCode è creanu un novu Target cù teste UI [XCode -> File -> New -> Target -> iOS Testing Bundle], dà u nome dicendu AmazingAppUITests.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Andà à a sezione di Fasi di Custruzzione di u Target creatu è verificate per Target Dependencies - AmazingApp, in Compile Sources - AmazingAppUITests.swift.

Hè una bona pratica per separà e diverse opzioni di creazione in Schemi separati. Creemu un schema per i nostri testi UI [XCode -> Product -> Scheme -> New Scheme] è dà u listessu nome: AmazingAppUITests.

A creazione di u schema creatu deve include u Target di l'applicazione principale - AmazingApp è Test Target UI - AmazingAppUITests - vede screenshot

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

In seguitu, creemu una nova cunfigurazione di custruzzione per i testi UI. In Xcode, cliccate nantu à u schedariu di prughjettu, andate à a sezione Info. Cliccate nant'à u "+" è crea una nova cunfigurazione, per esempiu XCtest. Avemu bisognu di questu in u futuru per evità di ballà cù un tamburinu quandu si tratta di a firma di codice.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Ci hè almenu trè Targets in u vostru prughjettu: l'applicazione principale, i testi di unità (ci sò alcuni, nò?) è l'UI Target di teste chì avemu creatu.

Andà à Target AmazingApp, Build Settings tab, Code Signing Identity sezione. Per a cunfigurazione XCtest, selezziunate Sviluppatore iOS. In a sezione Style Signing Code, selezziunate Manuale. Ùn avemu micca ancu generatu un prufilu di pruvisione, ma ci torneremu di sicuru un pocu dopu.

Per Target AmazingAppUITests, facemu u listessu, ma entre com.company.amazingappuitests in a colonna Product Bundle Identifier.

2. Stallà un prughjettu in u prugramma Apple Developer

Andemu à a pagina di u prugramma Apple Developer, andemu à a sezione Certificati, Identificatori è Profili è dopu à a colonna App ID di l'elementu Identificatori. Crea un novu ID App chjamatu AmazingAppUITests è bundleID com.company.amazingappuitests.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Avà avemu l'uppurtunità di firmà e nostre teste cù un certificatu separatu, ma ... A prucedura di custruzzione per a prova implica a custruzzione di l'applicazione stessa è a custruzzione di u test runner. In cunsiquenza, avemu affruntatu u prublema di firmà dui ID di bundle cù un prufilu di pruvisione. Fortunatamente, ci hè una suluzione simplice è elegante - Wildcard App ID. Ripitemu a prucedura per creà una nova App ID, ma invece di l'App ID esplicitu, selezziunate l'ID App Wildcard cum'è in a screenshot.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

À questu puntu, avemu finitu cù developer.apple.com, ma ùn minimizeremu micca a finestra di u navigatore. Andemu à situ cù documentazione nantu à Fastlane è leghje nantu à l'utilità Match da coperta à coperta.

Un lettore attentu hà nutatu chì per utilizà sta utilità, avemu bisognu di un repository privatu è un contu chì hà accessu à u prugramma Apple Developer è à Github. Creemu (se di colpu ùn ci hè micca cusì) un contu di a forma [email prutettu], vene cun una password forte, arregistrallu in developer.apple.com, è numinallu cum'è amministratore di prughjettu. In seguitu, dà u vostru contu accessu à u repositoriu github di a vostra cumpagnia è crea un novu repositoriu privatu cù un nome cum'è AmazingAppMatch.

3. Stabbilimentu di Fastlane è l'utilità match

Aprite u terminal, andate à u cartulare cù u prugettu è inizializza Fastlane cum'è indicatu in manuale ufficiale. Dopu avè intrutu in u cumandamentu

$ fastlane init

vi sarà dumandatu à selezziunà i cunfigurazioni usu disponibile. Selezziunà u quartu articulu - cunfigurazione manuale di u prugettu.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Un novu cartulare fastlane hè apparsu in u prughjettu, in quale ci sò dui schedari - Appfile è Fastfile. In poche parole - in Appfile guardemu dati di serviziu, è in Fastfile scrivimu i travaglii, in a terminologia di Fastlane chjamata lanes. Vi cunsigliu di leghje a documentazione ufficiale: i tempi, два.

Apertura l'Appfile in u vostru editore di testu preferitu è ​​purtate à a forma seguente:

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

Riturnemu à u terminal è, secondu u manuale ufficiale, cuminciamu à stallà partita.

$ fastlane match init
$ fastlane match development

Dopu, entre in i dati dumandati - repository, account, password, etc.

Hè impurtante di: a prima volta chì eseguite l'utilità di partita, vi dumandarà di inserisce una password per decrypt u repository. Hè assai impurtante per salvà sta password, avemu bisognu à u stadiu di a stallazione di u servitore CI!

Un novu schedariu hè apparsu in u cartulare fastlane - Matchfile. Apri lu in u vostru editore di testu preferitu è ​​porta à a forma:

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

Cumpigliemu in questu modu se vulemu aduprà match in u futuru per firmà e custruzzioni per a carica in Crashlytics è / o AppStore, vale à dì per firmà l'ID di bundle di a vostra applicazione.

Ma, cum'è ricurdamu, avemu creatu un ID Wildcard speciale per firmà a prova di custruzzione. Dunque, apre Fastfile è entre in una nova corsia:

lane :testing_build_for_firebase do

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

end

Salvà, entre in u terminal

fastlane testing_build_for_firebase

è vede cumu fastlane hà creatu un novu certificatu è mette in u repository. Perfettu!

Aprite XCode. Avà avemu u prufilu di pruvisione necessariu di u tipu Match Development com.company.*, chì deve esse specificatu in a sezione di prufilu di Provisioning per i miri AmazingApp è AmazingAppUITests.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Resta à aghjunghje una corsia per custruisce e teste. Andemu à repository Prughjettu di plugin fastlane chì facilita l'installazione di l'esportazione à Firebase Test Lab è seguitate l'istruzzioni.

Copia-incolla da l'esempiu originale in modu chì a nostra lane testing_build_for_firebase finisce cusì cusì:


 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

Per infurmazione cumpleta nantu à a creazione di fastlane in CircleCI, vi cunsigliu di leghje a documentazione ufficiale una volta, два.

Ùn vi scurdate di aghjunghje un novu compitu à u nostru config.yml:

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. Chì ci hè u nostru bancu di prova ? Configurazione di Firebase.

Andemu, in fattu, per ciò chì l'articulu hè statu scrittu.

A vostra app pò esse aduprendu Firebase in un pianu gratuitu, o ùn pò esse micca aduprà Firebase in tuttu. Ùn ci hè assolutamente nisuna differenza fundamentale, perchè per i bisogni di teste pudemu creà un prughjettu separatu cù un annu di usu liberu (cool, huh?)

Entramu in u nostru contu infrastruttura (o qualsiasi altru, ùn importa micca), è andemu à pagina di cunsola firebase. Crea un novu prughjettu chjamatu AmazingAppUITests.

Hè impurtante di: In u passu precedente, in u Fastfile in lane firebase_test_lab_ios_xctest, u paràmetru gcp_project deve currisponde à u nome di u prugettu.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

I paràmetri predeterminati ci cunvene bè.

Ùn chjudemu micca a tabulazione, avemu registratu sottu u stessu contu in gcloud hè una misura necessaria, postu chì a cumunicazione cù Firebase si faci cù l'interfaccia di cunsola gcloud.

Google dà $ 300 per un annu, chì in u cuntestu di eseguisce autotests equivale à un annu di usu gratuitu di u serviziu. Insememu i dati di pagamentu, aspittemu a scrittura di prova di $ 1 è uttene $ 300 à u contu. Dopu à un annu, u prugettu serà automaticamente trasferitu à un pianu di tariffu gratuitu, perchè ùn deve micca preoccupatu di a pussibuli pèrdita di soldi.

Riturnemu à a tabulazione cù u prughjettu Firebase è trasfiriu à u pianu di tariffu Blaze - avà avemu qualcosa da pagà se u limitu hè superatu.

In l'interfaccia gcloud, selezziunate u nostru prughjettu Firebase, selezziunate l'elementu di menu principale "Catalogue" è aghjunghje l'API Cloud Testing è Cloud Tools Result API.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Allora andate à l'elementu di menu "IAM è amministrazione" -> Conti di serviziu -> Crea un contu di serviziu. Concede permessu per edità u prugettu.

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Crea una chjave API in formatu JSON

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS

Avemu bisognu di u JSON scaricatu un pocu più tardi, ma per avà cunsideremu a stallazione di Test Lab cumpleta.

5. Setting CircleCI

Una quistione raghjone hè in preparazione - chì fà cù e password? Per mantene e nostre password è altre dati sensittivi in ​​modu sicuru, u mecanismu di variabili ambientali di a nostra macchina di custruzzione ci aiuterà. In i paràmetri di u prughjettu CircleCI, selezziunate Variabili d'ambiente

Eseguite teste strumentali in Firebase Test Lab. Parte 1: prughjettu iOS
È stabilisce e seguenti variabili:

  • chjave: GOOGLE_APPLICATION_CREDENTIALS
    valore: cuntenutu di u schedariu json di chjave di u contu di serviziu di gcloud
  • chjave: MATCH_PASSWORD
    valore: password per decrypt u repository github cù certificati
  • chjave: FASTLANE_PASSWORD
    valore: password di u contu di l'infrastruttura Apple Developer Portal

Salvemu i cambiamenti, creemu un PR è u mandemu à u nostru capu di squadra per rivisione.

Risultati

In u risultatu di queste manipulazioni simplici, avemu avutu un bonu stand di travagliu stabile cù a capacità di registrà video nantu à u screnu di u dispusitivu à u mumentu di a prova. In u casu di teste, aghju specificatu u mudellu di u dispositivu iPhone X, ma a splutazioni furnisce una scelta ricca da una cumminazione di mudelli diffirenti è versioni iOS.

A seconda parte serà dedicata à a creazione di Firebase Test Lab per un prughjettu Android passu à passu.

Source: www.habr.com

Add a comment