Ang akong ngalan mao si Dmitry, nagtrabaho ko isip usa ka tester sa kompanya
Sa wala pa kini, gisulayan na nako ang Firebase Test Lab para sa Android ug ganahan kaayo sa tanan, mao nga nakahukom ko nga sulayan nga ibutang ang imprastraktura sa pagsulay sa iOS sa proyekto sa samang footing. Kinahanglan ko nga mag-Google og daghan ug dili ang tanan nagtrabaho sa unang higayon, mao nga nakahukom ko sa pagsulat og usa ka artikulo sa pagtudlo alang niadtong kinsa naglisud gihapon.
Mao nga, kung adunay ka mga pagsulay sa UI sa usa ka proyekto sa iOS, mahimo nimong sulayan ang pagpadagan niini sa tinuud nga mga aparato karon, malulotong gihatag sa Good Corporation. Sa mga interesado, welcome sa iring.
Sa istorya, nakahukom ko nga magtukod sa pipila ka inisyal nga datos - usa ka pribadong repositoryo sa GitHub ug ang CircleCI build system. Ang ngalan sa aplikasyon kay AmazingApp, ang bundleID kay com.company.amazingapp. Gipresentar ko dayon kini nga datos aron makunhuran ang sunod nga kalibog.
Kung lahi ang imong gipatuman nga mga solusyon sa imong proyekto, ipaambit ang imong kasinatian sa mga komento.
1. Ang mga pagsulay sa ilang kaugalingon
Paghimo og bag-ong sanga sa proyekto alang sa mga pagsulay sa UI:
$ git checkout develop
$ git pull
$ git checkout -b βfeature/add-ui-testsβ
Atong ablihan ang proyekto sa XCode ug maghimo usa ka bag-ong Target nga adunay mga pagsulay sa UI [XCode -> File -> Bag-ong -> Target -> iOS Testing Bundle], nga gihatagan kini nga nagpatin-aw sa kaugalingon nga ngalan nga AmazingAppUITests.
Adto sa Build Phases nga seksyon sa gibuhat nga Target ug susiha ang presensya sa Target Dependencies - AmazingApp, sa Compile Sources - AmazingAppUITests.swift.
Ang usa ka maayong praktis mao ang pagbulag sa lain-laing mga kapilian sa pagtukod ngadto sa lain nga mga Scheme. Naghimo kami usa ka laraw alang sa among mga pagsulay sa UI [XCode -> Product -> Scheme -> Bag-ong Scheme] ug hatagan kini parehas nga ngalan: AmazingAppUITests.
Ang paghimo sa gihimo nga laraw kinahanglan nga maglakip sa Target sa panguna nga aplikasyon - Mga pagsulay sa AmazingApp ug Target UI - AmazingAppUITests - tan-awa ang screenshot
Sunod, maghimo kami usa ka bag-ong configuration sa pagtukod alang sa mga pagsulay sa UI. Sa XCode, i-klik ang project file ug adto sa Info section. Pag-klik sa "+" ug paghimo og bag-ong configuration, pananglitan XCtest. Kinahanglan naton kini sa umaabot aron malikayan ang pagsayaw gamit ang tamburin kung bahin sa pagpirma sa code.
Adunay labing menos tulo ka mga Target sa imong proyekto: ang nag-unang aplikasyon, mga pagsulay sa yunit (pagkahuman, naglungtad sila, di ba?) Ug ang mga pagsulay sa Target UI nga among gihimo.
Adto sa Target AmazingApp, Build Settings tab, Code Signing Identity section. Para sa XCtest configuration, pilia ang iOS Developer. Sa seksyon sa Code Signing Style, pilia ang Manwal. Wala pa kami nakamugna og provisioning profile, apan siguradong mobalik kami niini sa ulahi.
Para sa Target AmazingAppUITests among gibuhat ang parehas, pero sa Product Bundle Identifier column among gisulod ang com.company.amazingappuitests.
2. Pag-set up og proyekto sa Apple Developer Program
Adto sa Apple Developer Program page, adto sa Sertipiko, Identifiers & Profiles nga seksyon ug dayon sa App IDs column sa Identifiers item. Paghimo ug bag-ong App ID nga gitawag ug AmazingAppUITests ug bundleID com.company.amazingappuitests.
Karon kami adunay oportunidad nga pirmahan ang among mga pagsulay gamit ang usa ka lahi nga sertipiko, apan ... Ang pamaagi sa pag-assemble sa usa ka pagtukod alang sa pagsulay naglakip sa pag-assemble sa aplikasyon mismo ug pag-assemble sa test runner. Tungod niini, nag-atubang kami sa problema sa pagpirma sa duha ka bundle ID nga adunay usa ka provisioning profile. Maayo na lang, adunay usa ka yano ug elegante nga solusyon - Wildcard App ID. Gisubli namo ang pamaagi sa paghimo og bag-ong App ID, apan imbes nga Explicit App ID, pilia ang Wildcard App ID sama sa screenshot.
Niini nga punto, nahuman na kami sa pagtrabaho uban sa developer.apple.com, apan dili namo maminusan ang bintana sa browser. Adto ta sa
Namatikdan sa usa ka matinagdanon nga magbabasa nga aron magamit kini nga utility magkinahanglan kami usa ka pribado nga repositoryo ug usa ka account nga adunay access sa Apple Developer Program ug Github. Naghimo kami (kung kalit nga wala) usa ka asoy sa porma [protektado sa email], paghimo ug lig-on nga password, irehistro kini sa developer.apple.com, ug itudlo kini isip administrador sa proyekto. Sunod, gihatagan namon ang account access sa github repository sa imong kompanya ug paghimo usa ka bag-ong pribadong repository nga adunay ngalan sama sa AmazingAppMatch.
3. Pag-set up sa Fastlane ug sa match utility
Ablihi ang usa ka terminal, adto sa folder nga adunay proyekto ug pagsugod sa fastlane ingon sa gipakita sa
$ fastlane init
Maaghat ka sa pagpili sa magamit nga mga pag-configure sa paggamit. Pilia ang ikaupat nga kapilian - manwal nga pag-setup sa proyekto.
Ang proyekto adunay bag-ong direktoryo nga fastlane, nga adunay duha ka mga file - Appfile ug Fastfile. Sa laktod nga pagkasulti, gitipigan namo ang datos sa serbisyo sa Appfile, ug nagsulat og mga trabaho sa Fastfile, nga gitawag ug mga lane sa terminolohiya sa Fastlane. Girekomenda nako ang pagbasa sa opisyal nga dokumentasyon:
Ablihi ang Appfile sa imong paborito nga text editor ug dad-a kini sa mosunod nga porma:
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
Mibalik kami sa terminal ug sumala sa opisyal nga manwal nagsugod kami sa pag-configure sa posporo.
$ fastlane match init
$ fastlane match development
Sunod, isulud ang gihangyo nga datos - repository, account, password, ug uban pa.
Kini mao ang importante sa: Sa una nimo nga paglansad sa match utility, hangyoon ka nga mosulod sa usa ka password aron ma-decrypt ang repository. Importante kaayo nga i-save kini nga password; kinahanglan namon kini kung mag-set up sa CI server!
Usa ka bag-ong file ang nagpakita sa fastlane folder - Matchfile. Ablihi kini sa imong paborito nga text editor ug ipakita kini sama niini:
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
Among pun-an kini sa eksakto niining paagiha kon gusto namong gamiton ang posporo sa umaabot aron mapirmahan ang mga build para ipakita sa Crashlytics ug/o AppStore, nga mao, aron mapirmahan ang bundle ID sa imong aplikasyon.
Apan, sama sa among nahinumduman, naghimo kami usa ka espesyal nga Wildcard ID aron pirmahan ang pagsulay nga pagtukod. Busa, ablihi ang Fastfile ug pagsulod og bag-ong lane:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π±ΡΠ°Π½Ρ Π΄Π»Ρ development ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ.
)
end
Pag-save ug pagsulod sa terminal
fastlane testing_build_for_firebase
ug nakita namo kung giunsa paghimo sa fastlane ang usa ka bag-ong sertipiko ug gibutang kini sa repository. Nindot!
Ablihi ang XCode. Karon naa na miy gikinahanglan nga provisioning profile sa porma nga Match Development com.company.*, nga kinahanglang ipiho sa Provisioning profile section para sa AmazingApp ug AmazingAppUITests nga mga target.
Nagpabilin kini aron idugang ang lane alang sa mga pagsulay sa pag-assemble. Adto ta sa
Atong kopyahon-i-paste gikan sa orihinal nga pananglitan aron ang atong lane testing_build_for_firebase mahuman nga ingon niini:
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
Alang sa kompleto nga kasayuran bahin sa pag-set up sa fastlane sa CircleCI, girekomenda nako ang pagbasa sa opisyal nga dokumentasyon
Ayaw kalimot sa pagdugang og bag-ong buluhaton sa among 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. Komosta ang atong test bench? Pag-set up sa Firebase.
Atong hisgotan kung para sa unsa ang artikulo gisulat.
Tingali ang imong app naggamit sa Firebase sa usa ka libre nga plano, o tingali dili gyud. Wala'y hingpit nga sukaranan nga kalainan, tungod kay alang sa mga panginahanglanon sa pagsulay makahimo kami og usa ka bulag nga proyekto nga adunay usa ka tuig nga libre nga paggamit (cool, di ba?)
Nag-log in kami sa among account sa imprastraktura (o bisan unsa pa, dili igsapayan), ug moadto sa
Kini mao ang importante sa: Sa miaging lakang sa Fastfile sa lane firebase_test_lab_ios_xctest ang gcp_project parameter kinahanglang motakdo sa ngalan sa proyekto.
Ang mga default nga setting angayan kaayo kanamo.
Ayaw isira ang tab, magparehistro sa ilawom sa parehas nga account sa
Naghatag ang Google og $300 sa usa ka tuig, nga sa konteksto sa pagpahigayon sa mga autotest katumbas sa usa ka tuig nga libre nga paggamit sa serbisyo. Gisulod namo ang imong impormasyon sa pagbayad, maghulat sa test debit nga $1 ug makadawat og $300 sa imong account. Pagkahuman sa usa ka tuig, ang proyekto awtomatiko nga ibalhin sa usa ka libre nga plano sa taripa, busa dili kinahanglan nga mabalaka bahin sa posible nga pagkawala sa salapi.
Balikan nato ang tab nga adunay proyekto sa Firebase ug ibalhin kini sa plano sa taripa sa Blaze - karon aduna na kitay bayronon kon molapas na ang limitasyon.
Sa interface sa gcloud, pilia ang among proyekto sa Firebase, pilia ang βDirectoryβ main menu item ug idugang ang Cloud Testing API ug Cloud Tools Result API.
Dayon adto sa menu item "IAM ug administrasyon" -> Mga account sa serbisyo -> Paghimo account sa serbisyo. Naghatag kami og mga katungod sa pag-edit sa proyekto.
Paghimo og API key sa JSON format
Kinahanglan namon ang na-download nga JSON sa ulahi, apan sa pagkakaron among ikonsiderar ang pag-setup sa Test Lab nga kompleto.
5. Pag-set up sa CircleCI
Ang usa ka makatarunganon nga pangutana mitungha - unsa ang buhaton sa mga password? Ang environment variable mechanism sa atong build machine makatabang nato nga luwas nga tipigan ang atong mga password ug uban pang sensitibong data. Sa mga setting sa proyekto sa CircleCI, pilia ang Environment Variables
Ug i-set up ang mosunod nga mga variable:
- yawe: GOOGLE_APPLICATION_CREDENTIALS
bili: sulod sa json file sa gcloud service account key - yawe: MATCH_PASSWORD
bili: password alang sa pag-decrypting sa github repository nga adunay mga sertipiko - yawe: FASTLANE_PASSWORD
bili: Apple Developer Portal infrastructure account password
Gitipigan namo ang mga pagbag-o, paghimo og PR ug ipadala kini sa among team lead alang sa pagsusi.
Mga resulta
Ingon usa ka sangputanan niining yano nga mga pagmaniobra, nakadawat kami usa ka maayo, lig-on nga baroganan sa pagtrabaho nga adunay katakus sa pagrekord sa video sa screen sa aparato sa panahon sa pagsulay. Sa pananglitan sa pagsulay, akong gipiho ang modelo sa iPhone X device, apan ang umahan naghatag og daghang pagpili gikan sa kombinasyon sa lain-laing mga modelo ug mga bersyon sa iOS.
Ang ikaduhang bahin igahin sa sunod-sunod nga pag-setup sa Firebase Test Lab alang sa usa ka proyekto sa Android.
Source: www.habr.com