اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

منهنجو نالو دمتري آهي، مان ڪمپني ۾ ٽيسٽر طور ڪم ڪريان ٿو MEL سائنس. ڪافي تازو مان هڪ نسبتا تازي خصوصيت سان معاملو ختم ڪيو فائر بيس ٽيسٽ ليب - يعني، اصلي ٽيسٽنگ فريم ورڪ XCUITest استعمال ڪندي iOS ايپليڪيشنن جي اوزار جي جانچ سان.

ان کان اڳ، مون اڳ ۾ ئي ڪوشش ڪئي هئي فائر بيس ٽيسٽ ليب اينڊرائيڊ لاءِ ۽ واقعي هر شي کي پسند ڪيو، تنهنڪري مون ڪوشش ڪرڻ جو فيصلو ڪيو ته منصوبي جي 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 ڏيو.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

ٺاھيل ھدف جي تعمير مرحلن واري سيڪشن ڏانھن وڃو ۽ ھدف جي انحصار جي موجودگي جي جانچ ڪريو - AmazingApp، Compile Sources - AmazingAppUITests.swift ۾.

هڪ سٺو عمل آهي مختلف تعميراتي اختيارن کي الڳ اسڪيمن ۾ الڳ ڪرڻ. اسان پنھنجي UI ٽيسٽ لاءِ ھڪ اسڪيم ٺاھيون ٿا [XCode -> پراڊڪٽ -> اسڪيم -> نئين اسڪيم] ۽ اھو ساڳيو نالو ڏيو: AmazingAppUITests.

ٺاهيل اسڪيم جي تعمير ۾ شامل ٿيڻ لازمي آھي مکيه ايپليڪيشن جو ھدف - AmazingApp ۽ Target UI ٽيسٽ - AmazingAppUITests - ڏسو اسڪرين شاٽ

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

اڳيون، اسان UI ٽيسٽ لاءِ نئين تعمير جي ترتيب ٺاھيون ٿا. XCode ۾، پروجيڪٽ فائل تي ڪلڪ ڪريو ۽ ڄاڻ سيڪشن ڏانھن وڃو. "+" تي ڪلڪ ڪريو ۽ نئين ٺاھ جوڙ ٺاھيو، مثال طور XCtest. اسان کي مستقبل ۾ ان جي ضرورت پوندي ته جيئن ٽمبرين سان ناچ ڪرڻ کان بچڻ لاءِ جڏهن اهو ڪوڊ سائن ڪرڻ جي اچي.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

توھان جي پروجيڪٽ ۾ گھٽ ۾ گھٽ ٽي ھدف آھن: مکيه ايپليڪيشن، يونٽ ٽيسٽ (آخر، اھي موجود آھن، صحيح؟) ۽ ھدف UI ٽيسٽ جيڪي اسان ٺاھيا آھن.

ھدف AmazingApp ڏانھن وڃو، سيٽنگون ٽيب ٺاھيو، ڪوڊ سائننگ سڃاڻپ سيڪشن. XCtest ترتيب ڏيڻ لاءِ، چونڊيو iOS ڊولپر. ۾ ڪوڊ سائننگ اسٽائل سيڪشن، منتخب ڪريو Manual. اسان اڃان تائين ڪو پرووائيسنگ پروفائيل تيار نه ڪيو آهي، پر اسان ضرور ان تي ٿوري دير کان پوءِ واپس وينداسين.

Target AmazingAppUITests لاءِ اسان ائين ئي ڪندا آهيون، پر پراڊڪٽ بنڊل جي سڃاڻپ ڪندڙ ڪالم ۾ اسين com.company.amazingappuitests داخل ڪندا آهيون.

2. ايپل ڊولپر پروگرام ۾ پروجيڪٽ قائم ڪرڻ

ايپل ڊولپر پروگرام صفحي ڏانھن وڃو، سرٽيفڪيٽ، سڃاڻپ ڪندڙ ۽ پروفائلز سيڪشن ڏانھن وڃو ۽ پوء سڃاڻپ ڪندڙ شيون جي ايپ آئي ڊي ڪالمن ڏانھن. AmazingAppUITests ۽ bundleID com.company.amazingappuitests نالي هڪ نئين ايپ ID ٺاهيو.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

ھاڻي اسان وٽ موقعو آھي ته پنھنجي ٽيسٽ کي الڳ سرٽيفڪيٽ سان سائن ڪري سگھون، پر... ٽيسٽ لاءِ بلڊ گڏ ڪرڻ جي طريقيڪار ۾ ايپليڪيشن کي پاڻ ۾ گڏ ڪرڻ ۽ ٽيسٽ رنر کي گڏ ڪرڻ شامل آھي. ان جي مطابق، اسان کي ٻه بنڊل IDs تي دستخط ڪرڻ جي مسئلي سان منهن ڏيڻو پوي ٿو هڪ رزق واري پروفائل سان. خوشقسمتيء سان، اتي ھڪڙو سادو ۽ خوبصورت حل آھي - وائلڊ ڪارڊ ايپ ID. اسان هڪ نئين ايپ ID ٺاهڻ جي طريقيڪار کي ورجايو، پر واضح ايپ ID جي بدران، وائلڊ ڪارڊ ايپ ID چونڊيو جيئن اسڪرين شاٽ ۾ آهي.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

هن موقعي تي، اسان developer.apple.com سان ڪم ڪري چڪا آهيون، پر اسان برائوزر ونڊو کي گهٽ نه ڪنداسين. اچو ته وڃون فاسٽ لين دستاويزي سائيٽ ۽ پڙهو ميچ يوٽيلٽي جي باري ۾ ڍڪ کان ڍڪ تائين.

هڪ محتاط پڙهندڙ اهو محسوس ڪيو ته هن افاديت کي استعمال ڪرڻ لاءِ اسان کي هڪ خانگي مخزن ۽ هڪ اڪائونٽ جي ضرورت پوندي جنهن ۾ ايپل ڊولپر پروگرام ۽ گٿب ٻنهي تائين رسائي هوندي. اسان ٺاهيندا آهيون (جيڪڏهن اوچتو اتي ڪا شيء ناهي) فارم جو اڪائونٽ [ايميل محفوظ ٿيل]، هڪ مضبوط پاسورڊ سان گڏ اچو، ان کي developer.apple.com سان رجسٽر ڪريو، ۽ ان کي پروجيڪٽ ايڊمنسٽريٽر طور مقرر ڪريو. اڳيون، اسان توهان جي ڪمپني جي گيٿب مخزن تائين اڪائونٽ تائين رسائي ڏيون ٿا ۽ AmazingAppMatch وانگر نالي سان هڪ نئون خانگي مخزن ٺاهيو.

3. فاسٽ لين ۽ ميچ يوٽيلٽي کي ترتيب ڏيڻ

ٽرمينل کوليو، پروجيڪٽ سان فولڊر ڏانھن وڃو ۽ فاسٽ لين کي شروع ڪريو جيئن اشارو ڪيو ويو آھي سرڪاري دستور. حڪم داخل ڪرڻ کان پوء

$ fastlane init

توهان کي حوصلا افزائي ڪئي ويندي ته دستياب استعمال جي ترتيبن کي چونڊيو. چوٿون آپشن چونڊيو - مينوئل پروجيڪٽ سيٽ اپ.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

پروجيڪٽ ۾ هڪ نئين ڊاريڪٽري فاسٽ لين آهي، جنهن ۾ ٻه فائلون آهن - ايپ فائل ۽ فاسٽ فائل. مختصر طور تي، اسان 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 پروفائل سيڪشن ۾ بيان ڪيو وڃي.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

اهو ٽيسٽ گڏ ڪرڻ لاء لين شامل ڪرڻ لاء رهي ٿو. اچو ته وڃون مخزن فاسٽ لين لاءِ هڪ پلگ ان پروجيڪٽ جيڪو ان کي آسان بڻائي ٿو ايڪسپورٽ کي فائر بيس ٽيسٽ ليب ڏانهن سيٽ ڪرڻ ۽ هدايتن تي عمل ڪريو.

اچو ته اصل مثال مان ڪاپي پيسٽ ڪريون ته جيئن اسان جو لين 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. اسان جي ٽيسٽ بينچ بابت ڇا؟ فائر بيس کي ترتيب ڏيڻ.

اچو ته هيٺ لهون ته مضمون ڇا لاءِ لکيو ويو هو.

شايد توهان جي ايپ استعمال ڪري ٿي فائر بيس هڪ مفت منصوبي تي، يا شايد بلڪل نه. بلڪل ڪو به بنيادي فرق نه آهي، ڇو ته جاچ جي ضرورتن لاءِ اسان هڪ سال جي مفت استعمال سان هڪ الڳ پروجيڪٽ ٺاهي سگهون ٿا (ٿڌي، صحيح؟)

اسان لاگ ان ٿيو اسان جي انفراسٽرڪچر اڪائونٽ ۾ (يا ڪو ٻيو، اهو فرق نٿو پوي)، ۽ وڃو فائر بيس ڪنسول صفحو. AmazingAppUITests نالي هڪ نئون منصوبو ٺاهيو.

ان لاء ضروري آهي: پوئين قدم ۾ Fastfile in lane firebase_test_lab_ios_xctest gcp_project پيٽرول کي پروجيڪٽ جي نالي سان ملائڻ گهرجي.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

ڊفالٽ سيٽنگون اسان کي چڱي طرح مناسب آهن.

ٽيب کي بند نه ڪريو، ساڳئي اڪائونٽ تحت رجسٽر ٿيو ڪلائوڊ - هي هڪ ضروري ماپ آهي، ڇاڪاڻ ته فائر بيس سان رابطو gcloud ڪنسول انٽرفيس استعمال ڪندي ٿئي ٿو.

گوگل هڪ سال لاءِ 300 ڊالر ڏئي رهيو آهي، جيڪو آٽو ٽيسٽ انجام ڏيڻ جي حوالي سان خدمت جي مفت استعمال جي هڪ سال جي برابر آهي. اسان توهان جي ادائگي جي معلومات داخل ڪريون ٿا، $1 جي ٽيسٽ ڊيبٽ جو انتظار ڪريو ۽ توهان جي اڪائونٽ ۾ $300 وصول ڪريو. هڪ سال کان پوء، پروجيڪٽ خود بخود مفت ٽريف پلان ڏانهن منتقل ڪيو ويندو، تنهنڪري پئسا جي ممڪن نقصان بابت پريشان ٿيڻ جي ڪا ضرورت ناهي.

اچو ته فائر بيس پروجيڪٽ سان ٽيب تي واپس وڃو ۽ ان کي بليز ٽريف پلان تي منتقل ڪريون - ھاڻي اسان وٽ ڪجھ ادا ڪرڻو آھي جيڪڏھن حد کان وڌي وڃي.

gcloud انٽرفيس ۾، اسان جو Firebase پروجيڪٽ چونڊيو، "ڊائريڪٽري" مين مينيو آئٽم چونڊيو ۽ Cloud Testing API ۽ Cloud Tools Result API شامل ڪريو.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

پوءِ مينيو آئٽم ڏانھن وڃو "IAM ۽ انتظاميه" -> سروس اڪائونٽس -> سروس اڪائونٽ ٺاھيو. اسان پروجيڪٽ کي ايڊٽ ڪرڻ جا حق ڏيون ٿا.

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

JSON فارميٽ ۾ هڪ API چيڪ ٺاهيو

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ

اسان کي ٿوري دير کان پوءِ ڊائون لوڊ ڪيل JSON جي ضرورت پوندي، پر ھاڻي اسان ٽيسٽ ليب سيٽ اپ تي غور ڪنداسين.

5. CircleCI قائم ڪرڻ

هڪ معقول سوال پيدا ٿئي ٿو - پاسورڊ سان ڇا ڪجي؟ اسان جي بلڊ مشين جو ماحولياتي متغير ميڪانيزم اسان کي محفوظ طور تي اسان جي پاسورڊ ۽ ٻين حساس ڊيٽا کي محفوظ ڪرڻ ۾ مدد ڏيندو. CircleCI پروجيڪٽ سيٽنگون ۾، چونڊيو ماحولياتي متغير

اسان فائر بيس ٽيسٽ ليب ۾ اوزارن جا ٽيسٽ هلون ٿا. حصو 1: iOS پروجيڪٽ
۽ ھيٺ ڏنل متغيرن کي ترتيب ڏيو:

  • ڪي: GOOGLE_APPLICATION_CREDENTIALS
    قدر: gcloud سروس اڪائونٽ چيڪ جي json فائل جو مواد
  • ڪي: MATCH_PASSWORD
    قدر: سرٽيفڪيٽ سان گڏ گٿب مخزن کي ختم ڪرڻ لاء پاسورڊ
  • ڪي: FASTLANE_PASSWORD
    قدر: ايپل ڊولپر پورٽل انفراسٽرڪچر اڪائونٽ پاسورڊ

اسان تبديلين کي محفوظ ڪريون ٿا، هڪ پي آر ٺاهيو ۽ ان کي اسان جي ٽيم جي اڳواڻي ڏانهن جائزو وٺڻ لاءِ موڪليو.

نتيجو

انهن سادي ڌانڌلي جي نتيجي ۾، اسان کي هڪ سٺو، مستحڪم ڪم ڪندڙ موقف حاصل ڪيو ويو آهي ٽيسٽ جي وقت ڊوائيس اسڪرين تي وڊيو رڪارڊ ڪرڻ جي صلاحيت سان. آزمائشي مثال ۾، مون وضاحت ڪئي آئي فون ايڪس ڊيوائس ماڊل، پر فارم مختلف ماڊلز ۽ iOS ورزن جي ميلاپ مان هڪ ڀرپور چونڊ مهيا ڪري ٿو.

ٻيو حصو هڪ اينڊرائيڊ پروجيڪٽ لاءِ فائر بيس ٽيسٽ ليب جي مرحليوار سيٽ اپ لاءِ وقف ڪيو ويندو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو