Orukọ mi ni Dmitry, Mo ṣiṣẹ bi idanwo ni ile-iṣẹ naa
Ṣaaju eyi, Mo ti gbiyanju Lab Idanwo Firebase fun Android ati pe o fẹran ohun gbogbo, nitorinaa Mo pinnu lati gbiyanju lati fi awọn amayederun idanwo iOS ti iṣẹ akanṣe naa si ẹsẹ kanna. Mo ni lati Google pupọ ati pe kii ṣe ohun gbogbo ṣiṣẹ ni igba akọkọ, nitorinaa Mo pinnu lati kọ nkan ikẹkọ fun awọn ti o tun n tiraka.
Nitorinaa, ti o ba ni awọn idanwo UI lori iṣẹ akanṣe iOS kan, o le gbiyanju tẹlẹ ni ṣiṣe wọn lori awọn ẹrọ gidi loni, ti a fi inurere pese nipasẹ Ile-iṣẹ Dara. Fun awon ti o nife, kaabo si ologbo.
Ninu itan naa, Mo pinnu lati kọ lori diẹ ninu data akọkọ - ibi ipamọ ikọkọ lori GitHub ati CircleCI kọ eto. Orukọ ohun elo naa jẹ AmazingApp, bundleID jẹ com.company.amazingapp. Mo ṣafihan data yii lẹsẹkẹsẹ lati dinku iporuru ti o tẹle.
Ti o ba ṣe imuse awọn ojutu kan ninu iṣẹ akanṣe rẹ yatọ, pin iriri rẹ ninu awọn asọye.
1. Awọn igbeyewo ara wọn
Ṣẹda ẹka iṣẹ akanṣe tuntun fun awọn idanwo UI:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Jẹ ki a ṣii iṣẹ akanṣe ni XCode ki o ṣẹda Ibi-afẹde tuntun pẹlu awọn idanwo UI [XCode -> Faili -> Tuntun -> Àkọlé -> Ipilẹ Idanwo iOS], fifun ni orukọ alaye ti ara ẹni AmazingAppUITests.
Lọ si apakan Awọn ipele Kọ ti Ibi-afẹde ti o ṣẹda ati ṣayẹwo fun wiwa awọn igbẹkẹle ibi-afẹde - AmazingApp, ni Awọn orisun Iṣakojọ - AmazingAppUITests.swift.
Iwa ti o dara ni lati ya awọn aṣayan kikọ oriṣiriṣi si awọn eto lọtọ. A ṣẹda ero kan fun awọn idanwo UI wa [XCode -> Ọja -> Eto -> Eto Tuntun] ati fun ni orukọ kanna: AmazingAppUITests.
Kọ ti ero ti a ṣẹda gbọdọ pẹlu Àkọlé ti ohun elo akọkọ - AmazingApp ati Awọn idanwo UI Target - AmazingAppUITests - wo sikirinifoto
Nigbamii ti, a ṣẹda iṣeto ile tuntun fun awọn idanwo UI. Ni XCode, tẹ lori faili ise agbese ki o lọ si apakan Alaye. Tẹ lori “+” ki o ṣẹda iṣeto tuntun, fun apẹẹrẹ XCtest. A yoo nilo eyi ni ọjọ iwaju lati yago fun jijo pẹlu tambourin nigbati o ba de iforukọsilẹ koodu.
O kere ju Awọn ibi-afẹde mẹta wa ninu iṣẹ akanṣe rẹ: ohun elo akọkọ, awọn idanwo ẹyọkan (lẹhinna gbogbo wọn wa, otun?) Ati awọn idanwo UI Target ti a ṣẹda.
Lọ si Àkọlé AmazingApp, Kọ Eto taabu, koodu Ibuwọlu Idanimọ apakan. Fun iṣeto XCtest, yan Olùgbéejáde iOS. Ni apakan Aṣa Ibuwọlu koodu, yan Afowoyi. A ko ti ṣe ipilẹṣẹ profaili ipese sibẹsibẹ, ṣugbọn dajudaju a yoo pada si ọdọ diẹ diẹ nigbamii.
Fun Àkọlé AmazingAppUITests a ṣe kanna, ṣugbọn ninu iwe idanimọ lapapo ọja a tẹ com.company.amazingappuitests.
2. Eto soke ise agbese kan ni Apple Developer Program
Lọ si oju-iwe Eto Olùgbéejáde Apple, lọ si Awọn iwe-ẹri, Awọn idanimọ & Awọn profaili apakan ati lẹhinna si oju-iwe ID Awọn ohun elo ti ohun Idanimọ. Ṣẹda ID App tuntun ti a pe ni AmazingAppUITests ati bundleID com.company.amazingappuitests.
Ni bayi a ni aye lati fowo si awọn idanwo wa pẹlu iwe-ẹri lọtọ, ṣugbọn… Ilana fun iṣakojọpọ kọ fun idanwo jẹ apejọ ohun elo funrararẹ ati apejọ olusare idanwo naa. Nitorinaa, a dojuko pẹlu iṣoro ti wíwọlé awọn ID lapapo meji pẹlu profaili ipese kan. Da, nibẹ ni a rọrun ati ki o yangan ojutu - Wildcard App ID. A tun ilana fun ṣiṣẹda titun App ID, sugbon dipo ti fojuhan App ID, yan Wildcard App ID bi ninu awọn sikirinifoto.
Ni aaye yii, a ti pari ṣiṣẹ pẹlu developer.apple.com, ṣugbọn a kii yoo dinku window ẹrọ aṣawakiri naa. Jẹ ki a lọ si
Oluka ti o tẹtisi ṣe akiyesi pe lati lo ohun elo yii a yoo nilo ibi ipamọ ikọkọ ati akọọlẹ kan pẹlu iraye si mejeeji Eto Olumulo Apple ati Github. A ṣẹda (ti o ba lojiji ko si iru nkan bẹẹ) akọọlẹ ti fọọmu naa [imeeli ni idaabobo], Wa pẹlu ọrọ igbaniwọle to lagbara, forukọsilẹ pẹlu developer.apple.com, ki o si yan rẹ gẹgẹbi oluṣakoso iṣẹ akanṣe. Nigbamii, a fun akọọlẹ ni iraye si ibi ipamọ github ti ile-iṣẹ rẹ ati ṣẹda ibi ipamọ ikọkọ tuntun pẹlu orukọ kan bii AmazingAppMatch.
3. Eto soke Fastlane ati baramu IwUlO
Ṣii ebute kan, lọ si folda pẹlu iṣẹ akanṣe naa ki o bẹrẹ fastlane bi a ti tọka si
$ fastlane init
Iwọ yoo ti ọ lati yan awọn atunto lilo to wa. Yan awọn kẹrin aṣayan - Afowoyi ise agbese setup.
Ise agbese na ni fastlane itọsọna tuntun, eyiti o ni awọn faili meji - Appfile ati Fastfile. Ni kukuru, a tọju data iṣẹ ni Appfile, ati kọ awọn iṣẹ ni Fastfile, ti a pe ni awọn ọna ni awọn ọrọ-ọrọ Fastlane. Mo ṣeduro kika iwe aṣẹ naa:
Ṣii Appfile ninu olootu ọrọ ayanfẹ rẹ ki o mu wa si fọọmu atẹle:
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
A pada si ebute naa ati ni ibamu si itọnisọna osise a bẹrẹ lati tunto baramu.
$ fastlane match init
$ fastlane match development
Nigbamii, tẹ data ti o beere sii - ibi ipamọ, akọọlẹ, ọrọ igbaniwọle, ati bẹbẹ lọ.
Pataki: Nigbati o ba kọkọ ṣe ifilọlẹ IwUlO baramu, ao beere lọwọ rẹ lati tẹ ọrọ igbaniwọle sii lati yo ibi ipamọ naa. O ṣe pataki pupọ lati ṣafipamọ ọrọ igbaniwọle yii; a yoo nilo rẹ nigbati o ba ṣeto olupin CI!
Faili tuntun ti han ninu folda fastlane - Matchfile. Ṣi i ni olootu ọrọ ayanfẹ rẹ ki o ṣe afihan bi eleyi:
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
A fọwọsi ni deede ni ọna yii ti a ba fẹ lati lo baramu ni ọjọ iwaju lati forukọsilẹ fun ifihan ni Crashlytics ati/tabi AppStore, iyẹn ni, lati fowo si ID lapapo ti ohun elo rẹ.
Ṣugbọn, bi a ṣe ranti, a ṣẹda ID Wildcard pataki kan lati fowo si kikọ idanwo naa. Nitorinaa, ṣii Fastfile ki o tẹ ọna tuntun sii:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Fipamọ ati tẹ sinu ebute naa
fastlane testing_build_for_firebase
ati pe a rii bii fastlane ṣe ṣẹda iwe-ẹri tuntun kan ati fi sii sinu ibi ipamọ naa. Nla!
Ṣii XCode. Bayi a ni profaili ipese pataki ti fọọmu Match Development com.company.*, eyiti o gbọdọ wa ni pato ni apakan profaili Ipese fun awọn ibi-afẹde AmazingApp ati AmazingAppUITests.
O wa lati ṣafikun ọna fun apejọ awọn idanwo. Jẹ ki a lọ si
Jẹ ki a daakọ-lẹẹmọ lati apẹẹrẹ atilẹba ki ọna test_build_for_firebase wa pari ni wiwo bi eleyi:
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
Fun alaye pipe nipa siseto fastlane ni CircleCI, Mo ṣeduro kika iwe aṣẹ osise
Maṣe gbagbe lati ṣafikun iṣẹ-ṣiṣe tuntun si config.yml wa:
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. Kini nipa ibujoko idanwo wa? Ṣiṣeto Firebase.
Jẹ ki a sọkalẹ lọ si ohun ti a kọ nkan naa fun.
Boya ohun elo rẹ nlo Firebase lori ero ọfẹ, tabi boya kii ṣe rara. Ko si iyatọ pataki rara, nitori fun awọn iwulo idanwo a le ṣẹda iṣẹ akanṣe lọtọ pẹlu ọdun kan ti lilo ọfẹ (itura, otun?)
A wọle si akọọlẹ amayederun wa (tabi eyikeyi miiran, ko ṣe pataki), ati lọ si
Pataki: Ni igbesẹ ti tẹlẹ ninu Fastfile ni ọna firebase_test_lab_ios_xctest paramita gcp_project yẹ ki o baamu orukọ iṣẹ akanṣe naa.
Awọn eto aiyipada ba wa ni ibamu daradara.
Maṣe pa taabu naa, forukọsilẹ labẹ akọọlẹ kanna ni
Google n fun $ 300 fun ọdun kan, eyiti o wa ni ipo ti ṣiṣe awọn adaṣe adaṣe jẹ deede si ọdun kan ti lilo ọfẹ ti iṣẹ naa. A tẹ alaye isanwo rẹ sii, duro fun debiti idanwo ti $1 ati gba $300 si akọọlẹ rẹ. Lẹhin ọdun kan, iṣẹ naa yoo gbe lọ laifọwọyi si ero idiyele ọfẹ, nitorinaa ko si ye lati ṣe aniyan nipa pipadanu owo ti o ṣeeṣe.
Jẹ ki a pada si taabu pẹlu iṣẹ akanṣe Firebase ki o gbe lọ si ero idiyele Blaze - ni bayi a ni nkan lati sanwo ti opin naa ba kọja.
Ni wiwo gcloud, yan iṣẹ akanṣe Firebase wa, yan ohun akojọ aṣayan akọkọ “Itọsọna” ki o ṣafikun API Idanwo Awọsanma ati Abajade API Awọn irinṣẹ Awọsanma.
Lẹhinna lọ si ohun akojọ aṣayan “IAM ati iṣakoso” -> Awọn iroyin iṣẹ -> Ṣẹda akọọlẹ iṣẹ. A fun awọn ẹtọ lati satunkọ ise agbese na.
Ṣẹda bọtini API ni ọna kika JSON
A yoo nilo JSON ti a ṣe igbasilẹ ni diẹ diẹ, ṣugbọn fun bayi a yoo gbero iṣeto Lab Idanwo ti pari.
5. Eto CircleCI
Ibeere ti o ni oye waye - kini lati ṣe pẹlu awọn ọrọ igbaniwọle? Ẹrọ oniyipada ayika ti ẹrọ kikọ wa yoo ṣe iranlọwọ fun wa ni aabo awọn ọrọ igbaniwọle wa ati data ifura miiran. Ninu awọn eto iṣẹ akanṣe CircleCI, yan Awọn oniyipada Ayika
Ati ṣeto awọn oniyipada wọnyi:
- bọtini: GOOGLE_APPLICATION_CREDENTIALS
iye: awọn akoonu inu faili json ti bọtini akọọlẹ iṣẹ gcloud - bọtini: MATCH_PASSWORD
iye: ọrọ igbaniwọle fun sisọ ibi ipamọ github pẹlu awọn iwe-ẹri - bọtini: FASTLANE_PASSWORD
iye: Apple Developer Portal amayederun iroyin ọrọigbaniwọle
A fipamọ awọn ayipada, ṣẹda PR ati firanṣẹ si itọsọna ẹgbẹ wa fun atunyẹwo.
Awọn esi
Bi abajade ti awọn ifọwọyi ti o rọrun wọnyi, a gba iduro iṣẹ ti o dara, iduroṣinṣin pẹlu agbara lati ṣe igbasilẹ fidio lori iboju ẹrọ ni akoko idanwo. Ninu apẹẹrẹ idanwo, Mo ṣalaye awoṣe ẹrọ iPhone X, ṣugbọn oko pese yiyan ọlọrọ lati apapo awọn awoṣe oriṣiriṣi ati awọn ẹya iOS.
Apa keji yoo jẹ iyasọtọ si iṣeto-igbesẹ-igbesẹ ti Lab Idanwo Firebase fun iṣẹ akanṣe Android kan.
orisun: www.habr.com