ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

میرا نام دمتری ہے، میں کمپنی میں ٹیسٹر کے طور پر کام کرتا ہوں۔ ایم ای ایل سائنس. کافی حال ہی میں میں نے ایک نسبتاً حالیہ فیچر کے ساتھ کام ختم کیا۔ فائر بیس ٹیسٹ لیب — یعنی، مقامی ٹیسٹنگ فریم ورک XCUITest کا استعمال کرتے ہوئے iOS ایپلیکیشنز کی انسٹرومینٹل ٹیسٹنگ کے ساتھ۔

اس سے پہلے، میں نے Android کے لیے Firebase Test Lab کو پہلے ہی آزمایا تھا اور واقعی میں سب کچھ پسند آیا، اس لیے میں نے پروجیکٹ کے iOS ٹیسٹ انفراسٹرکچر کو اسی بنیاد پر رکھنے کی کوشش کرنے کا فیصلہ کیا۔ مجھے بہت زیادہ گوگل کرنا پڑا اور سب کچھ پہلی بار کام نہیں کرتا تھا، لہذا میں نے ان لوگوں کے لیے ایک سبق آموز مضمون لکھنے کا فیصلہ کیا جو ابھی تک جدوجہد کر رہے ہیں۔

لہذا، اگر آپ کے پاس iOS پروجیکٹ پر UI ٹیسٹ ہیں، تو آپ انہیں آج ہی حقیقی آلات پر چلانے کی کوشش کر سکتے ہیں، برائے مہربانی Good Corporation کی طرف سے فراہم کردہ۔ دلچسپی رکھنے والوں کے لیے بلی میں خوش آمدید۔

کہانی میں، میں نے کچھ ابتدائی ڈیٹا - 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 Testing Bundle]، اسے خود وضاحتی نام AmazingAppUITests دیتے ہیں۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

بنائے گئے ٹارگٹ کے بلڈ فیز سیکشن پر جائیں اور ٹارگٹ ڈیپینڈینسیز کی موجودگی کو چیک کریں - AmazingApp، Compile Sources - AmazingAppUITests.swift میں۔

ایک اچھا عمل یہ ہے کہ مختلف تعمیراتی اختیارات کو الگ الگ اسکیموں میں الگ کیا جائے۔ ہم اپنے UI ٹیسٹوں کے لیے ایک اسکیم بناتے ہیں [XCode -> Product -> Scheme -> New Scheme] اور اسے وہی نام دیتے ہیں: AmazingAppUITests۔

بنائی گئی اسکیم کی تعمیر میں مرکزی ایپلیکیشن کا ہدف شامل ہونا چاہیے - AmazingApp اور Target UI ٹیسٹ - AmazingAppUITests - اسکرین شاٹ دیکھیں

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

اگلا، ہم UI ٹیسٹوں کے لیے ایک نئی بلڈ کنفیگریشن بناتے ہیں۔ ایکس کوڈ میں، پروجیکٹ فائل پر کلک کریں اور انفارمیشن سیکشن میں جائیں۔ "+" پر کلک کریں اور ایک نئی کنفیگریشن بنائیں، مثال کے طور پر XCtest۔ جب کوڈ پر دستخط کرنے کی بات آتی ہے تو ہمیں دف کے ساتھ ناچنے سے بچنے کے لیے مستقبل میں اس کی ضرورت ہوگی۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

آپ کے پروجیکٹ میں کم از کم تین اہداف ہیں: بنیادی ایپلیکیشن، یونٹ ٹیسٹ (آخر کار، وہ موجود ہیں، ٹھیک ہے؟) اور ہدف UI ٹیسٹ جو ہم نے بنائے ہیں۔

Target AmazingApp، Build Settings tab، Code Signing Identity سیکشن پر جائیں۔ XCtest کنفیگریشن کے لیے، iOS ڈیولپر کو منتخب کریں۔ کوڈ سائننگ اسٹائل سیکشن میں، مینوئل کو منتخب کریں۔ ہم نے ابھی تک پروویژننگ پروفائل نہیں بنایا ہے، لیکن ہم اس پر تھوڑی دیر بعد ضرور واپس آئیں گے۔

Target AmazingAppUITests کے لیے ہم ایسا ہی کرتے ہیں، لیکن پروڈکٹ بنڈل آئیڈینٹیفائر کالم میں ہم com.company.amazingappuitest درج کرتے ہیں۔

2. ایپل ڈویلپر پروگرام میں ایک پروجیکٹ ترتیب دینا

ایپل ڈویلپر پروگرام کے صفحے پر جائیں، سرٹیفکیٹس، شناخت کنندگان اور پروفائلز سیکشن پر جائیں اور پھر شناخت کنندہ آئٹم کے ایپ آئی ڈی کالم پر جائیں۔ AmazingAppUITests اور bundleID com.company.amazingappuitest کے نام سے ایک نئی ایپ ID بنائیں۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

اب ہمارے پاس ایک علیحدہ سرٹیفکیٹ کے ساتھ اپنے ٹیسٹوں پر دستخط کرنے کا موقع ہے، لیکن... ٹیسٹنگ کے لیے بلڈ کو جمع کرنے کے طریقہ کار میں خود ایپلیکیشن کو اسمبل کرنا اور ٹیسٹ رنر کو اسمبل کرنا شامل ہے۔ اسی مناسبت سے، ہمیں ایک پروویژننگ پروفائل کے ساتھ دو بنڈل آئی ڈیز پر دستخط کرنے کے مسئلے کا سامنا ہے۔ خوش قسمتی سے، ایک سادہ اور خوبصورت حل ہے - وائلڈ کارڈ ایپ آئی ڈی۔ ہم ایک نئی ایپ آئی ڈی بنانے کے طریقہ کار کو دہراتے ہیں، لیکن واضح ایپ آئی ڈی کے بجائے، اسکرین شاٹ کی طرح وائلڈ کارڈ ایپ آئی ڈی کو منتخب کریں۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

اس وقت، ہم developer.apple.com کے ساتھ کام کر چکے ہیں، لیکن ہم براؤزر ونڈو کو کم سے کم نہیں کریں گے۔ چلو چلتے ہیں فاسٹ لین دستاویزات کی سائٹ اور کور سے کور تک میچ کی افادیت کے بارے میں پڑھیں۔

ایک دھیان رکھنے والے قاری نے دیکھا کہ اس یوٹیلیٹی کو استعمال کرنے کے لیے ہمیں ایک پرائیویٹ ریپوزٹری اور ایپل ڈویلپر پروگرام اور گیتھب دونوں تک رسائی کے ساتھ ایک اکاؤنٹ کی ضرورت ہوگی۔ ہم فارم کا اکاؤنٹ بناتے ہیں (اگر اچانک ایسی کوئی چیز نہیں ہے) [ای میل محفوظ]، ایک مضبوط پاس ورڈ کے ساتھ آئیں، اسے developer.apple.com کے ساتھ رجسٹر کریں، اور اسے بطور پروجیکٹ ایڈمنسٹریٹر مقرر کریں۔ اس کے بعد، ہم اکاؤنٹ کو آپ کی کمپنی کے گیتھب ریپوزٹری تک رسائی دیتے ہیں اور AmazingAppMatch جیسے نام کے ساتھ ایک نیا پرائیویٹ ریپوزٹری بناتے ہیں۔

3. فاسٹ لین اور میچ یوٹیلیٹی کو ترتیب دینا

ایک ٹرمینل کھولیں، پروجیکٹ کے ساتھ فولڈر میں جائیں اور فاسٹ لین کو شروع کریں جیسا کہ اشارہ کیا گیا ہے۔ سرکاری دستی. کمانڈ داخل کرنے کے بعد

$ fastlane init

آپ کو دستیاب استعمال کنفیگریشنز کو منتخب کرنے کے لیے کہا جائے گا۔ چوتھا آپشن منتخب کریں - دستی پروجیکٹ سیٹ اپ۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 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

اگلا، درخواست کردہ ڈیٹا درج کریں - ذخیرہ، اکاؤنٹ، پاس ورڈ، وغیرہ۔

اہم: جب آپ سب سے پہلے میچ یوٹیلیٹی لانچ کرتے ہیں، تو آپ سے ریپوزٹری کو ڈکرپٹ کرنے کے لیے پاس ورڈ درج کرنے کو کہا جائے گا۔ اس پاس ورڈ کو محفوظ کرنا بہت ضروری ہے؛ CI سرور سیٹ اپ کرتے وقت ہمیں اس کی ضرورت ہوگی!

فاسٹ لین فولڈر - میچ فائل میں ایک نئی فائل نمودار ہوئی ہے۔ اسے اپنے پسندیدہ ٹیکسٹ ایڈیٹر میں کھولیں اور اسے اس طرح دکھائیں:

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

ہم اسے بالکل اسی طرح پُر کرتے ہیں اگر ہم مستقبل میں کریشلیٹکس اور/یا AppStore میں ڈسپلے کے لیے تعمیرات پر دستخط کرنے کے لیے میچ کا استعمال کرنا چاہتے ہیں، یعنی آپ کی درخواست کے بنڈل 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

اور ہم دیکھتے ہیں کہ کس طرح فاسٹ لین نے ایک نیا سرٹیفکیٹ بنایا اور اسے ذخیرہ میں رکھا۔ زبردست!

ایکس کوڈ کھولیں۔ اب ہمارے پاس Match Development com.company.* فارم کا ضروری پروویژننگ پروفائل ہے، جسے AmazingApp اور AmazingAppUITests کے اہداف کے لیے پروویژننگ پروفائل سیکشن میں بتانا ضروری ہے۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

ٹیسٹوں کو جمع کرنے کے لیے لین کو شامل کرنا باقی ہے۔ چلو چلتے ہیں ذخیرہ فاسٹ لین کے لیے ایک پلگ ان پروجیکٹ جو Firebase ٹیسٹ لیب میں ایکسپورٹ ترتیب دینا اور ہدایات پر عمل کرنا آسان بناتا ہے۔

آئیے اصل مثال سے کاپی پیسٹ کریں تاکہ ہماری لین 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

سرکل سی آئی میں فاسٹ لین قائم کرنے کے بارے میں مکمل معلومات کے لیے، میں آفیشل دستاویزات کو پڑھنے کی تجویز کرتا ہوں۔ اوقات، два.

ہمارے 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. ہمارے ٹیسٹ بینچ کے بارے میں کیا خیال ہے؟ Firebase ترتیب دیا جا رہا ہے۔

آئیے نیچے آتے ہیں کہ مضمون کس لیے لکھا گیا تھا۔

شاید آپ کی ایپ فائر بیس کو مفت پلان پر استعمال کرتی ہے، یا شاید بالکل نہیں۔ اس میں قطعی طور پر کوئی بنیادی فرق نہیں ہے، کیونکہ جانچ کی ضروریات کے لیے ہم ایک سال کے مفت استعمال کے ساتھ ایک الگ پروجیکٹ بنا سکتے ہیں (ٹھیک ہے، ٹھیک ہے؟)

ہم اپنے انفراسٹرکچر اکاؤنٹ میں لاگ ان ہوتے ہیں (یا کوئی اور، اس سے کوئی فرق نہیں پڑتا)، اور جاتے ہیں۔ فائر بیس کنسول صفحہ. AmazingAppUITests کے نام سے ایک نیا پروجیکٹ بنائیں۔

اہم: Fastfile in lane firebase_test_lab_ios_xctest میں پچھلے مرحلے میں gcp_project پیرامیٹر پروجیکٹ کے نام سے مماثل ہونا چاہئے۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

پہلے سے طے شدہ ترتیبات ہمارے ساتھ بہت اچھی طرح سے سوٹ کرتی ہیں۔

ٹیب کو بند نہ کریں، اسی اکاؤنٹ کے تحت اندراج کریں۔ جی کلاؤڈ - یہ ایک ضروری اقدام ہے، کیونکہ Firebase کے ساتھ بات چیت gcloud کنسول انٹرفیس کے ذریعے ہوتی ہے۔

گوگل ایک سال کے لیے $300 دے رہا ہے، جو آٹو ٹیسٹ کرنے کے تناظر میں سروس کے مفت استعمال کے ایک سال کے برابر ہے۔ ہم آپ کی ادائیگی کی معلومات درج کرتے ہیں، $1 کے ٹیسٹ ڈیبٹ کا انتظار کریں اور آپ کے اکاؤنٹ میں $300 وصول کریں۔ ایک سال کے بعد، پروجیکٹ خود بخود ایک مفت ٹیرف پلان میں منتقل ہو جائے گا، اس لیے رقم کے ممکنہ نقصان کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔

آئیے فائربیس پروجیکٹ کے ساتھ ٹیب پر واپس آتے ہیں اور اسے بلیز ٹیرف پلان میں منتقل کرتے ہیں - اب ہمارے پاس کچھ ادا کرنا ہے اگر حد سے تجاوز ہو جائے۔

gcloud انٹرفیس میں، ہمارا Firebase پروجیکٹ منتخب کریں، "ڈائریکٹری" مین مینو آئٹم کو منتخب کریں اور Cloud Testing API اور Cloud Tools Result API شامل کریں۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

پھر مینو آئٹم "IAM اور انتظامیہ" -> سروس اکاؤنٹس -> سروس اکاؤنٹ بنائیں پر جائیں۔ ہم پروجیکٹ میں ترمیم کرنے کے حقوق دیتے ہیں۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

JSON فارمیٹ میں ایک API کلید بنائیں

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ

ہمیں تھوڑی دیر بعد ڈاؤن لوڈ کردہ JSON کی ضرورت ہوگی، لیکن ابھی کے لیے ہم ٹیسٹ لیب کے سیٹ اپ کو مکمل سمجھیں گے۔

5. سرکل سی آئی کا قیام

ایک معقول سوال پیدا ہوتا ہے - پاس ورڈ کے ساتھ کیا کرنا ہے؟ ہماری تعمیراتی مشین کا ماحولیاتی متغیر طریقہ کار ہمارے پاس ورڈز اور دیگر حساس ڈیٹا کو محفوظ طریقے سے ذخیرہ کرنے میں ہماری مدد کرے گا۔ CircleCI پروجیکٹ سیٹنگز میں، Environment Variables کو منتخب کریں۔

ہم Firebase ٹیسٹ لیب میں انسٹرومینٹل ٹیسٹ چلاتے ہیں۔ حصہ 1: iOS پروجیکٹ
اور درج ذیل متغیرات مرتب کریں:

  • کلید: GOOGLE_APPLICATION_CREDENTIALS
    قدر: gcloud سروس اکاؤنٹ کلید کی json فائل کے مشمولات
  • کلید: MATCH_PASSWORD
    قدر: سرٹیفکیٹ کے ساتھ گیتھب ریپوزٹری کو ڈکرپٹ کرنے کے لیے پاس ورڈ
  • کلید: FASTLANE_PASSWORD
    قدر: ایپل ڈویلپر پورٹل انفراسٹرکچر اکاؤنٹ کا پاس ورڈ

ہم تبدیلیوں کو محفوظ کرتے ہیں، ایک PR بناتے ہیں اور اسے جائزہ کے لیے اپنی ٹیم لیڈ کو بھیجتے ہیں۔

کے نتائج

ان آسان ہیرا پھیری کے نتیجے میں، ہمیں ٹیسٹنگ کے وقت ڈیوائس اسکرین پر ویڈیو ریکارڈ کرنے کی صلاحیت کے ساتھ ایک اچھا، مستحکم ورکنگ سٹینڈ ملا۔ ٹیسٹ کی مثال میں، میں نے آئی فون ایکس ڈیوائس ماڈل کی وضاحت کی، لیکن فارم مختلف ماڈلز اور iOS ورژن کے امتزاج سے بھرپور انتخاب فراہم کرتا ہے۔

دوسرا حصہ اینڈرائیڈ پروجیکٹ کے لیے فائر بیس ٹیسٹ لیب کے مرحلہ وار سیٹ اپ کے لیے وقف کیا جائے گا۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں