منهنجو نالو دمتري آهي، مان ڪمپني ۾ ٽيسٽر طور ڪم ڪريان ٿو
ان کان اڳ، مون اڳ ۾ ئي ڪوشش ڪئي هئي فائر بيس ٽيسٽ ليب اينڊرائيڊ لاءِ ۽ واقعي هر شي کي پسند ڪيو، تنهنڪري مون ڪوشش ڪرڻ جو فيصلو ڪيو ته منصوبي جي 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 -> فائل -> نئون -> ٽارگيٽ -> iOS ٽيسٽنگ بنڊل]، ان کي خود وضاحتي نالو AmazingAppUITests ڏيو.
ٺاھيل ھدف جي تعمير مرحلن واري سيڪشن ڏانھن وڃو ۽ ھدف جي انحصار جي موجودگي جي جانچ ڪريو - AmazingApp، Compile Sources - AmazingAppUITests.swift ۾.
هڪ سٺو عمل آهي مختلف تعميراتي اختيارن کي الڳ اسڪيمن ۾ الڳ ڪرڻ. اسان پنھنجي UI ٽيسٽ لاءِ ھڪ اسڪيم ٺاھيون ٿا [XCode -> پراڊڪٽ -> اسڪيم -> نئين اسڪيم] ۽ اھو ساڳيو نالو ڏيو: AmazingAppUITests.
ٺاهيل اسڪيم جي تعمير ۾ شامل ٿيڻ لازمي آھي مکيه ايپليڪيشن جو ھدف - AmazingApp ۽ Target UI ٽيسٽ - AmazingAppUITests - ڏسو اسڪرين شاٽ
اڳيون، اسان UI ٽيسٽ لاءِ نئين تعمير جي ترتيب ٺاھيون ٿا. XCode ۾، پروجيڪٽ فائل تي ڪلڪ ڪريو ۽ ڄاڻ سيڪشن ڏانھن وڃو. "+" تي ڪلڪ ڪريو ۽ نئين ٺاھ جوڙ ٺاھيو، مثال طور XCtest. اسان کي مستقبل ۾ ان جي ضرورت پوندي ته جيئن ٽمبرين سان ناچ ڪرڻ کان بچڻ لاءِ جڏهن اهو ڪوڊ سائن ڪرڻ جي اچي.
توھان جي پروجيڪٽ ۾ گھٽ ۾ گھٽ ٽي ھدف آھن: مکيه ايپليڪيشن، يونٽ ٽيسٽ (آخر، اھي موجود آھن، صحيح؟) ۽ ھدف UI ٽيسٽ جيڪي اسان ٺاھيا آھن.
ھدف AmazingApp ڏانھن وڃو، سيٽنگون ٽيب ٺاھيو، ڪوڊ سائننگ سڃاڻپ سيڪشن. XCtest ترتيب ڏيڻ لاءِ، چونڊيو iOS ڊولپر. ۾ ڪوڊ سائننگ اسٽائل سيڪشن، منتخب ڪريو Manual. اسان اڃان تائين ڪو پرووائيسنگ پروفائيل تيار نه ڪيو آهي، پر اسان ضرور ان تي ٿوري دير کان پوءِ واپس وينداسين.
Target AmazingAppUITests لاءِ اسان ائين ئي ڪندا آهيون، پر پراڊڪٽ بنڊل جي سڃاڻپ ڪندڙ ڪالم ۾ اسين com.company.amazingappuitests داخل ڪندا آهيون.
2. ايپل ڊولپر پروگرام ۾ پروجيڪٽ قائم ڪرڻ
ايپل ڊولپر پروگرام صفحي ڏانھن وڃو، سرٽيفڪيٽ، سڃاڻپ ڪندڙ ۽ پروفائلز سيڪشن ڏانھن وڃو ۽ پوء سڃاڻپ ڪندڙ شيون جي ايپ آئي ڊي ڪالمن ڏانھن. AmazingAppUITests ۽ bundleID com.company.amazingappuitests نالي هڪ نئين ايپ ID ٺاهيو.
ھاڻي اسان وٽ موقعو آھي ته پنھنجي ٽيسٽ کي الڳ سرٽيفڪيٽ سان سائن ڪري سگھون، پر... ٽيسٽ لاءِ بلڊ گڏ ڪرڻ جي طريقيڪار ۾ ايپليڪيشن کي پاڻ ۾ گڏ ڪرڻ ۽ ٽيسٽ رنر کي گڏ ڪرڻ شامل آھي. ان جي مطابق، اسان کي ٻه بنڊل IDs تي دستخط ڪرڻ جي مسئلي سان منهن ڏيڻو پوي ٿو هڪ رزق واري پروفائل سان. خوشقسمتيء سان، اتي ھڪڙو سادو ۽ خوبصورت حل آھي - وائلڊ ڪارڊ ايپ ID. اسان هڪ نئين ايپ ID ٺاهڻ جي طريقيڪار کي ورجايو، پر واضح ايپ ID جي بدران، وائلڊ ڪارڊ ايپ ID چونڊيو جيئن اسڪرين شاٽ ۾ آهي.
هن موقعي تي، اسان developer.apple.com سان ڪم ڪري چڪا آهيون، پر اسان برائوزر ونڊو کي گهٽ نه ڪنداسين. اچو ته وڃون
هڪ محتاط پڙهندڙ اهو محسوس ڪيو ته هن افاديت کي استعمال ڪرڻ لاءِ اسان کي هڪ خانگي مخزن ۽ هڪ اڪائونٽ جي ضرورت پوندي جنهن ۾ ايپل ڊولپر پروگرام ۽ گٿب ٻنهي تائين رسائي هوندي. اسان ٺاهيندا آهيون (جيڪڏهن اوچتو اتي ڪا شيء ناهي) فارم جو اڪائونٽ [ايميل محفوظ ٿيل]، هڪ مضبوط پاسورڊ سان گڏ اچو، ان کي developer.apple.com سان رجسٽر ڪريو، ۽ ان کي پروجيڪٽ ايڊمنسٽريٽر طور مقرر ڪريو. اڳيون، اسان توهان جي ڪمپني جي گيٿب مخزن تائين اڪائونٽ تائين رسائي ڏيون ٿا ۽ AmazingAppMatch وانگر نالي سان هڪ نئون خانگي مخزن ٺاهيو.
3. فاسٽ لين ۽ ميچ يوٽيلٽي کي ترتيب ڏيڻ
ٽرمينل کوليو، پروجيڪٽ سان فولڊر ڏانھن وڃو ۽ فاسٽ لين کي شروع ڪريو جيئن اشارو ڪيو ويو آھي
$ fastlane init
توهان کي حوصلا افزائي ڪئي ويندي ته دستياب استعمال جي ترتيبن کي چونڊيو. چوٿون آپشن چونڊيو - مينوئل پروجيڪٽ سيٽ اپ.
پروجيڪٽ ۾ هڪ نئين ڊاريڪٽري فاسٽ لين آهي، جنهن ۾ ٻه فائلون آهن - ايپ فائل ۽ فاسٽ فائل. مختصر طور تي، اسان Appfile ۾ سروس ڊيٽا ذخيرو ڪندا آهيون، ۽ Fastfile ۾ نوڪريون لکندا آهيون، جنهن کي Fastlane جي اصطلاحن ۾ لين سڏيو ويندو آهي. آئون سفارش ڪريان ٿو سرڪاري دستاويز پڙهڻ:
پنهنجي پسنديده ٽيڪسٽ ايڊيٽر ۾ ايپ فائل کوليو ۽ ان کي هيٺين فارم ۾ آڻيو.
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
اڳيون، داخل ڪيو ويو ڊيٽا - مخزن، اڪائونٽ، پاسورڊ، وغيره.
ان لاء ضروري آهي: جڏهن توهان پهريون ڀيرو ميچ يوٽيلٽي لانچ ڪندا، توهان کي چيو ويندو ته پاسورڊ داخل ڪرڻ لاءِ مخزن کي ڊڪرپٽ ڪرڻ لاءِ. هي پاسورڊ محفوظ ڪرڻ تمام ضروري آهي؛ اسان کي ان جي ضرورت پوندي جڏهن سي آءِ سرور کي ترتيب ڏيو!
ھڪڙو نئون فائل ظاهر ٿيو آھي فاسٽ لين فولڊر ۾ - 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 ٺاهي آهي ٽيسٽ بلڊ کي سائن ڪرڻ لاءِ. تنهن ڪري، فاسٽ فائل کوليو ۽ نئين لين داخل ڪريو:
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 جي ھدف لاءِ Provisioning پروفائل سيڪشن ۾ بيان ڪيو وڃي.
اهو ٽيسٽ گڏ ڪرڻ لاء لين شامل ڪرڻ لاء رهي ٿو. اچو ته وڃون
اچو ته اصل مثال مان ڪاپي پيسٽ ڪريون ته جيئن اسان جو لين 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. اسان جي ٽيسٽ بينچ بابت ڇا؟ فائر بيس کي ترتيب ڏيڻ.
اچو ته هيٺ لهون ته مضمون ڇا لاءِ لکيو ويو هو.
شايد توهان جي ايپ استعمال ڪري ٿي فائر بيس هڪ مفت منصوبي تي، يا شايد بلڪل نه. بلڪل ڪو به بنيادي فرق نه آهي، ڇو ته جاچ جي ضرورتن لاءِ اسان هڪ سال جي مفت استعمال سان هڪ الڳ پروجيڪٽ ٺاهي سگهون ٿا (ٿڌي، صحيح؟)
اسان لاگ ان ٿيو اسان جي انفراسٽرڪچر اڪائونٽ ۾ (يا ڪو ٻيو، اهو فرق نٿو پوي)، ۽ وڃو
ان لاء ضروري آهي: پوئين قدم ۾ Fastfile in lane firebase_test_lab_ios_xctest gcp_project پيٽرول کي پروجيڪٽ جي نالي سان ملائڻ گهرجي.
ڊفالٽ سيٽنگون اسان کي چڱي طرح مناسب آهن.
ٽيب کي بند نه ڪريو، ساڳئي اڪائونٽ تحت رجسٽر ٿيو
گوگل هڪ سال لاءِ 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
قدر: ايپل ڊولپر پورٽل انفراسٽرڪچر اڪائونٽ پاسورڊ
اسان تبديلين کي محفوظ ڪريون ٿا، هڪ پي آر ٺاهيو ۽ ان کي اسان جي ٽيم جي اڳواڻي ڏانهن جائزو وٺڻ لاءِ موڪليو.
نتيجو
انهن سادي ڌانڌلي جي نتيجي ۾، اسان کي هڪ سٺو، مستحڪم ڪم ڪندڙ موقف حاصل ڪيو ويو آهي ٽيسٽ جي وقت ڊوائيس اسڪرين تي وڊيو رڪارڊ ڪرڻ جي صلاحيت سان. آزمائشي مثال ۾، مون وضاحت ڪئي آئي فون ايڪس ڊيوائس ماڊل، پر فارم مختلف ماڊلز ۽ iOS ورزن جي ميلاپ مان هڪ ڀرپور چونڊ مهيا ڪري ٿو.
ٻيو حصو هڪ اينڊرائيڊ پروجيڪٽ لاءِ فائر بيس ٽيسٽ ليب جي مرحليوار سيٽ اپ لاءِ وقف ڪيو ويندو.
جو ذريعو: www.habr.com