Mäin Numm ass Dmitry, ech schaffen als Tester an der Firma
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.
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
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.
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.
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.
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
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
$ fastlane init
Dir wäert opgefuerdert sinn verfügbare Benotzungskonfiguratiounen ze wielen. Wielt déi véiert Optioun - manuell Projet Setup.
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:
Ö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.
Et bleift d'Spuer ze addéieren fir Tester ze montéieren. Loosst eis goen
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
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
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.
D'Standardastellunge passen eis ganz gutt.
Maacht den Tab net zou, registréiert Iech ënner dem selwechte Kont an
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.
Da gitt op d'Menüpunkt "IAM an Administratioun" -> Servicekonten -> Erstellt Servicekonto. Mir ginn d'Rechter fir de Projet z'änneren.
Erstellt en API Schlëssel am JSON Format
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
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