నా పేరు డిమిత్రి, నేను కంపెనీలో టెస్టర్గా పని చేస్తున్నాను
దీనికి ముందు, నేను ఇప్పటికే Android కోసం Firebase టెస్ట్ ల్యాబ్ని ప్రయత్నించాను మరియు ప్రతిదీ నిజంగా ఇష్టపడ్డాను, కాబట్టి ప్రాజెక్ట్ యొక్క iOS టెస్ట్ ఇన్ఫ్రాస్ట్రక్చర్ను అదే స్థాయిలో ఉంచాలని నిర్ణయించుకున్నాను. నేను చాలా గూగుల్ చేయాల్సి వచ్చింది మరియు మొదటి సారి ప్రతిదీ పని చేయలేదు, కాబట్టి నేను ఇప్పటికీ కష్టపడుతున్న వారి కోసం ట్యుటోరియల్ కథనాన్ని వ్రాయాలని నిర్ణయించుకున్నాను.
కాబట్టి, మీరు iOS ప్రాజెక్ట్లో UI పరీక్షలను కలిగి ఉన్నట్లయితే, మీరు వాటిని గుడ్ కార్పొరేషన్ అందించిన నిజమైన పరికరాల్లో ఇప్పటికే అమలు చేయడానికి ప్రయత్నించవచ్చు. ఆసక్తి ఉన్నవారికి, పిల్లికి స్వాగతం.
కథలో, నేను కొన్ని ప్రారంభ డేటాను రూపొందించాలని నిర్ణయించుకున్నాను - GitHubపై ప్రైవేట్ రిపోజిటరీ మరియు CircleCI బిల్డ్ సిస్టమ్. అప్లికేషన్ పేరు AmazingApp, bundleID com.company.amazingapp. తదుపరి గందరగోళాన్ని తగ్గించడానికి నేను ఈ డేటాను వెంటనే అందిస్తున్నాను.
మీరు మీ ప్రాజెక్ట్లో కొన్ని పరిష్కారాలను భిన్నంగా అమలు చేసినట్లయితే, మీ అనుభవాన్ని వ్యాఖ్యలలో పంచుకోండి.
1. పరీక్షలు స్వయంగా
UI పరీక్షల కోసం కొత్త ప్రాజెక్ట్ శాఖను సృష్టించండి:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
ప్రాజెక్ట్ను XCodeలో తెరిచి, UI పరీక్షలతో కొత్త లక్ష్యాన్ని సృష్టించండి [XCode -> File -> New -> Target -> iOS టెస్టింగ్ బండిల్], దీనికి స్వీయ వివరణాత్మక పేరు AmazingAppUITests.
సృష్టించిన టార్గెట్ యొక్క బిల్డ్ ఫేసెస్ విభాగానికి వెళ్లి, టార్గెట్ డిపెండెన్సీల ఉనికిని తనిఖీ చేయండి - AmazingApp, కంపైల్ సోర్సెస్లో - AmazingAppUITests.swift.
విభిన్న నిర్మాణ ఎంపికలను ప్రత్యేక పథకాలుగా విభజించడం మంచి అభ్యాసం. మేము మా UI పరీక్షల కోసం ఒక స్కీమ్ను రూపొందించాము [XCode -> ఉత్పత్తి -> పథకం -> కొత్త పథకం] మరియు దానికి అదే పేరుని ఇస్తాము: AmazingAppUITests.
సృష్టించబడిన పథకం యొక్క బిల్డ్ తప్పనిసరిగా ప్రధాన అప్లికేషన్ యొక్క లక్ష్యాన్ని కలిగి ఉండాలి - AmazingApp మరియు Target UI పరీక్షలు - AmazingAppUITests - స్క్రీన్షాట్ చూడండి
తర్వాత, మేము UI పరీక్షల కోసం కొత్త బిల్డ్ కాన్ఫిగరేషన్ని సృష్టిస్తాము. XCodeలో, ప్రాజెక్ట్ ఫైల్పై క్లిక్ చేసి, సమాచార విభాగానికి వెళ్లండి. “+”పై క్లిక్ చేసి, కొత్త కాన్ఫిగరేషన్ను సృష్టించండి, ఉదాహరణకు XCtest. కోడ్ సంతకం విషయానికి వస్తే టాంబురైన్తో నృత్యం చేయకుండా ఉండటానికి భవిష్యత్తులో మాకు ఇది అవసరం అవుతుంది.
మీ ప్రాజెక్ట్లో కనీసం మూడు టార్గెట్లు ఉన్నాయి: ప్రధాన అప్లికేషన్, యూనిట్ పరీక్షలు (అవి ఉన్నాయా?) మరియు మేము సృష్టించిన టార్గెట్ UI పరీక్షలు.
టార్గెట్ అమేజింగ్ యాప్, బిల్డ్ సెట్టింగ్ల ట్యాబ్, కోడ్ సైనింగ్ ఐడెంటిటీ విభాగానికి వెళ్లండి. XCtest కాన్ఫిగరేషన్ కోసం, iOS డెవలపర్ని ఎంచుకోండి. కోడ్ సైనింగ్ స్టైల్ విభాగంలో, మాన్యువల్ని ఎంచుకోండి. మేము ఇంకా ప్రొవిజనింగ్ ప్రొఫైల్ను రూపొందించలేదు, కానీ మేము ఖచ్చితంగా కొంచెం తర్వాత దానికి తిరిగి వస్తాము.
Target AmazingAppUITests కోసం మేము అదే చేస్తాము, కానీ ఉత్పత్తి బండిల్ ఐడెంటిఫైయర్ కాలమ్లో మేము com.company.amazingappuitestsని నమోదు చేస్తాము.
2. Apple డెవలపర్ ప్రోగ్రామ్లో ప్రాజెక్ట్ను సెటప్ చేయడం
Apple డెవలపర్ ప్రోగ్రామ్ పేజీకి వెళ్లి, సర్టిఫికెట్లు, ఐడెంటిఫైయర్లు & ప్రొఫైల్ల విభాగానికి వెళ్లి, ఆపై ఐడెంటిఫైయర్ల అంశం యొక్క యాప్ IDల కాలమ్కి వెళ్లండి. AmazingAppUITests మరియు bundleID com.company.amazingappuitests అనే కొత్త యాప్ IDని సృష్టించండి.
ఇప్పుడు మేము మా పరీక్షలను ప్రత్యేక సర్టిఫికేట్తో సంతకం చేసే అవకాశాన్ని కలిగి ఉన్నాము, కానీ... టెస్టింగ్ కోసం బిల్డ్ను అసెంబ్లింగ్ చేసే విధానం అప్లికేషన్ను స్వయంగా సమీకరించడం మరియు టెస్ట్ రన్నర్ను సమీకరించడం. దీని ప్రకారం, ఒక ప్రొవిజనింగ్ ప్రొఫైల్తో రెండు బండిల్ IDలపై సంతకం చేయడంలో మేము సమస్యను ఎదుర్కొంటున్నాము. అదృష్టవశాత్తూ, సరళమైన మరియు సొగసైన పరిష్కారం ఉంది - వైల్డ్కార్డ్ యాప్ ID. మేము కొత్త యాప్ IDని సృష్టించే విధానాన్ని పునరావృతం చేస్తాము, కానీ స్పష్టమైన యాప్ IDకి బదులుగా, స్క్రీన్షాట్లో వలె వైల్డ్కార్డ్ యాప్ IDని ఎంచుకోండి.
ఈ సమయంలో, మేము developer.apple.comతో పని చేయడం పూర్తి చేసాము, కానీ మేము బ్రౌజర్ విండోను కనిష్టీకరించము. పద వెళదాం
ఈ యుటిలిటీని ఉపయోగించడానికి మనకు ప్రైవేట్ రిపోజిటరీ మరియు Apple డెవలపర్ ప్రోగ్రామ్ మరియు Github రెండింటికీ యాక్సెస్ ఉన్న ఖాతా అవసరమని శ్రద్ధగల రీడర్ గమనించారు. మేము ఫారమ్ యొక్క ఖాతాను (అకస్మాత్తుగా అలాంటిదేమీ లేనట్లయితే) సృష్టిస్తాము [ఇమెయిల్ రక్షించబడింది], బలమైన పాస్వర్డ్తో ముందుకు రండి, developer.apple.comతో రిజిస్టర్ చేసి, ప్రాజెక్ట్ అడ్మినిస్ట్రేటర్గా నియమించుకోండి. తర్వాత, మేము మీ కంపెనీ గితుబ్ రిపోజిటరీకి ఖాతా యాక్సెస్ని అందిస్తాము మరియు AmazingAppMatch వంటి పేరుతో కొత్త ప్రైవేట్ రిపోజిటరీని సృష్టిస్తాము.
3. ఫాస్ట్లేన్ మరియు మ్యాచ్ యుటిలిటీని సెటప్ చేయడం
టెర్మినల్ను తెరిచి, ప్రాజెక్ట్తో ఫోల్డర్కి వెళ్లి, సూచించిన విధంగా ఫాస్ట్లేన్ని ప్రారంభించండి
$ fastlane init
అందుబాటులో ఉన్న వినియోగ కాన్ఫిగరేషన్లను ఎంచుకోమని మీరు ప్రాంప్ట్ చేయబడతారు. నాల్గవ ఎంపికను ఎంచుకోండి - మాన్యువల్ ప్రాజెక్ట్ సెటప్.
ప్రాజెక్ట్ కొత్త డైరెక్టరీ ఫాస్ట్లేన్ని కలిగి ఉంది, ఇందులో రెండు ఫైల్లు ఉన్నాయి - Appfile మరియు Fastfile. క్లుప్తంగా చెప్పాలంటే, మేము సేవా డేటాను Appfileలో నిల్వ చేస్తాము మరియు Fastlane పరిభాషలో లేన్స్ అని పిలువబడే Fastfileలో ఉద్యోగాలను వ్రాస్తాము. నేను అధికారిక డాక్యుమెంటేషన్ చదవమని సిఫార్సు చేస్తున్నాను:
మీకు ఇష్టమైన టెక్స్ట్ ఎడిటర్లో Appfileని తెరిచి, దానిని క్రింది ఫారమ్కు తీసుకురండి:
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
మేము టెర్మినల్కు తిరిగి వస్తాము మరియు అధికారిక మాన్యువల్ ప్రకారం మేము మ్యాచ్ని కాన్ఫిగర్ చేయడం ప్రారంభిస్తాము.
$ fastlane match init
$ fastlane match development
తరువాత, అభ్యర్థించిన డేటాను నమోదు చేయండి - రిపోజిటరీ, ఖాతా, పాస్వర్డ్ మొదలైనవి.
ఇది ముఖ్యం: మీరు మొదట మ్యాచ్ యుటిలిటీని ప్రారంభించినప్పుడు, రిపోజిటరీని డీక్రిప్ట్ చేయడానికి పాస్వర్డ్ను నమోదు చేయమని మిమ్మల్ని అడుగుతారు. ఈ పాస్వర్డ్ను సేవ్ చేయడం చాలా ముఖ్యం; CI సర్వర్ని సెటప్ చేసేటప్పుడు మాకు ఇది అవసరం!
ఫాస్ట్లేన్ ఫోల్డర్లో కొత్త ఫైల్ కనిపించింది - Matchfile. దీన్ని మీకు ఇష్టమైన టెక్స్ట్ ఎడిటర్లో తెరిచి ఇలా ప్రదర్శించండి:
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
Crashlytics మరియు/లేదా AppStoreలో డిస్ప్లే కోసం బిల్డ్లను సైన్ ఇన్ చేయడానికి, అంటే మీ అప్లికేషన్ యొక్క బండిల్ IDకి సైన్ ఇన్ చేయడానికి భవిష్యత్తులో మ్యాచ్ని ఉపయోగించాలనుకుంటే, మేము దీన్ని సరిగ్గా ఈ విధంగా నింపుతాము.
కానీ, మనకు గుర్తున్నట్లుగా, టెస్ట్ బిల్డ్పై సంతకం చేయడానికి మేము ప్రత్యేక వైల్డ్కార్డ్ IDని సృష్టించాము. కాబట్టి, Fastfileని తెరిచి, కొత్త లేన్ని నమోదు చేయండి:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
సేవ్ చేసి టెర్మినల్లోకి ప్రవేశించండి
fastlane testing_build_for_firebase
మరియు ఫాస్ట్లేన్ కొత్త సర్టిఫికేట్ను ఎలా సృష్టించిందో మరియు దానిని రిపోజిటరీలో ఎలా ఉంచిందో మనం చూస్తాము. గొప్ప!
XCodeని తెరవండి. ఇప్పుడు మేము Match Development com.company.* ఫారమ్ యొక్క అవసరమైన ప్రొవిజనింగ్ ప్రొఫైల్ని కలిగి ఉన్నాము, ఇది AmazingApp మరియు AmazingAppUITests లక్ష్యాల కోసం ప్రొవిజనింగ్ ప్రొఫైల్ విభాగంలో తప్పనిసరిగా పేర్కొనబడాలి.
ఇది అసెంబ్లింగ్ పరీక్షల కోసం లేన్ను జోడించడానికి మిగిలి ఉంది. పద వెళదాం
అసలు ఉదాహరణ నుండి కాపీ-పేస్ట్ చేద్దాం, తద్వారా మన లేన్ testing_build_for_firebase ఇలా కనిపిస్తుంది:
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
CircleCIలో ఫాస్ట్లేన్ని సెటప్ చేయడం గురించి పూర్తి సమాచారం కోసం, నేను అధికారిక డాక్యుమెంటేషన్ చదవమని సిఫార్సు చేస్తున్నాను
మా 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. మా టెస్ట్ బెంచ్ గురించి ఏమిటి? ఫైర్బేస్ని సెటప్ చేస్తోంది.
ఆ వ్యాసం దేనికోసం రాశారో తెలుసుకుందాం.
బహుశా మీ యాప్ ఫైర్బేస్ని ఉచిత ప్లాన్లో ఉపయోగిస్తుండవచ్చు లేదా బహుశా అస్సలు ఉపయోగించకపోవచ్చు. ఎటువంటి ప్రాథమిక వ్యత్యాసం లేదు, ఎందుకంటే పరీక్ష అవసరాల కోసం మేము ఒక సంవత్సరం ఉచిత ఉపయోగంతో ప్రత్యేక ప్రాజెక్ట్ను సృష్టించవచ్చు (చల్లగా, సరియైనదా?)
మేము మా ఇన్ఫ్రాస్ట్రక్చర్ ఖాతాకు లాగిన్ చేస్తాము (లేదా మరేదైనా, అది పట్టింపు లేదు), మరియు దీనికి వెళ్తాము
ఇది ముఖ్యం: Lane firebase_test_lab_ios_xctestలో Fastfileలో మునుపటి దశలో gcp_project పరామితి ప్రాజెక్ట్ పేరుతో సరిపోలాలి.
డిఫాల్ట్ సెట్టింగ్లు మాకు బాగా సరిపోతాయి.
ట్యాబ్ను మూసివేయవద్దు, అదే ఖాతాలో నమోదు చేసుకోండి
Google సంవత్సరానికి $300 ఇస్తోంది, ఇది ఆటోటెస్ట్లను నిర్వహించే సందర్భంలో సేవ యొక్క ఉచిత వినియోగానికి సమానం. మేము మీ చెల్లింపు సమాచారాన్ని నమోదు చేస్తాము, $1 పరీక్ష డెబిట్ కోసం వేచి ఉండండి మరియు మీ ఖాతాకు $300 అందుకుంటాము. ఒక సంవత్సరం తర్వాత, ప్రాజెక్ట్ స్వయంచాలకంగా ఉచిత టారిఫ్ ప్లాన్కు బదిలీ చేయబడుతుంది, కాబట్టి డబ్బు నష్టం గురించి ఆందోళన చెందాల్సిన అవసరం లేదు.
ఫైర్బేస్ ప్రాజెక్ట్తో ట్యాబ్కు తిరిగి వెళ్లి, దానిని బ్లేజ్ టారిఫ్ ప్లాన్కు బదిలీ చేద్దాం - ఇప్పుడు పరిమితిని మించిపోయినట్లయితే మనం చెల్లించాల్సిన అవసరం ఉంది.
gCloud ఇంటర్ఫేస్లో, మా Firebase ప్రాజెక్ట్ని ఎంచుకుని, “డైరెక్టరీ” ప్రధాన మెను ఐటెమ్ను ఎంచుకుని, Cloud Testing API మరియు Cloud Tools Result APIని జోడించండి.
ఆపై మెను ఐటెమ్ "IAM మరియు అడ్మినిస్ట్రేషన్" -> సేవా ఖాతాలు -> సేవా ఖాతాను సృష్టించండి. మేము ప్రాజెక్ట్ను సవరించడానికి హక్కులను మంజూరు చేస్తాము.
JSON ఆకృతిలో API కీని సృష్టించండి
మాకు డౌన్లోడ్ చేయబడిన JSON కొంచెం తర్వాత అవసరం, కానీ ప్రస్తుతానికి మేము టెస్ట్ ల్యాబ్ సెటప్ పూర్తయినట్లు పరిగణిస్తాము.
5. CircleCI ఏర్పాటు
సహేతుకమైన ప్రశ్న తలెత్తుతుంది - పాస్వర్డ్లతో ఏమి చేయాలి? మా బిల్డ్ మెషీన్ యొక్క ఎన్విరాన్మెంట్ వేరియబుల్ మెకానిజం మా పాస్వర్డ్లు మరియు ఇతర సున్నితమైన డేటాను సురక్షితంగా నిల్వ చేయడంలో మాకు సహాయపడుతుంది. CircleCI ప్రాజెక్ట్ సెట్టింగ్లలో, ఎన్విరాన్మెంట్ వేరియబుల్స్ని ఎంచుకోండి
మరియు కింది వేరియబుల్స్ను సెటప్ చేయండి:
- కీ: GOOGLE_APPLICATION_CREDENTIALS
విలువ: gCloud సేవా ఖాతా కీ యొక్క json ఫైల్ యొక్క కంటెంట్లు - కీ: MATCH_PASSWORD
విలువ: సర్టిఫికేట్లతో గితుబ్ రిపోజిటరీని డీక్రిప్ట్ చేయడానికి పాస్వర్డ్ - కీ: FASTLANE_PASSWORD
విలువ: Apple డెవలపర్ పోర్టల్ ఇన్ఫ్రాస్ట్రక్చర్ ఖాతా పాస్వర్డ్
మేము మార్పులను సేవ్ చేస్తాము, PRని సృష్టించండి మరియు సమీక్ష కోసం మా టీమ్ లీడ్కి పంపుతాము.
ఫలితాలు
ఈ సాధారణ అవకతవకల ఫలితంగా, మేము పరీక్ష సమయంలో పరికర స్క్రీన్పై వీడియోను రికార్డ్ చేయగల సామర్థ్యంతో మంచి, స్థిరమైన పని స్టాండ్ను అందుకున్నాము. పరీక్ష ఉదాహరణలో, నేను iPhone X పరికర నమూనాను పేర్కొన్నాను, అయితే వ్యవసాయ క్షేత్రం విభిన్న నమూనాలు మరియు iOS సంస్కరణల కలయిక నుండి గొప్ప ఎంపికను అందిస్తుంది.
రెండవ భాగం Android ప్రాజెక్ట్ కోసం Firebase Test Lab యొక్క దశల వారీ సెటప్కు అంకితం చేయబడుతుంది.
మూలం: www.habr.com