قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

اسمي ديمتري، أعمل كمختبر في الشركة ميل العلوم. لقد انتهيت مؤخرًا من التعامل مع ميزة حديثة نسبيًا من مختبر اختبار Firebase - على وجه التحديد، مع الاختبار الآلي لتطبيقات iOS باستخدام إطار الاختبار الأصلي XCUITest.

قبل ذلك، كنت قد قمت بالفعل بتجربة Firebase Test Lab لنظام Android وأعجبني كل شيء حقًا، لذلك قررت أن أحاول وضع البنية التحتية لاختبار iOS للمشروع على قدم المساواة. لقد اضطررت إلى البحث في Google كثيرًا ولم ينجح كل شيء في المرة الأولى، لذلك قررت أن أكتب مقالة تعليمية لأولئك الذين ما زالوا يعانون.

لذا، إذا كانت لديك اختبارات واجهة مستخدم على مشروع يعمل بنظام التشغيل iOS، فيمكنك بالفعل تجربة تشغيلها على أجهزة حقيقية اليوم، والتي تفضلت شركة Good Corporation بتوفيرها. للمهتمين مرحبا بكم في القط.

في القصة، قررت الاعتماد على بعض البيانات الأولية - مستودع خاص على GitHub ونظام البناء CircleCI. اسم التطبيق هو AmazingApp، ومعرف الحزمة هو com.company.amazingapp. أقدم هذه البيانات على الفور لتقليل الارتباك اللاحق.

إذا قمت بتنفيذ حلول معينة في مشروعك بشكل مختلف، شارك تجربتك في التعليقات.

1. الاختبارات نفسها

قم بإنشاء فرع مشروع جديد لاختبارات واجهة المستخدم:

$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”

لنفتح المشروع في XCode وننشئ هدفًا جديدًا باختبارات واجهة المستخدم [XCode -> File -> New -> Target -> iOS Testing Bundle]، ونعطيه الاسم الذي لا يحتاج إلى شرح AmazingAppUITests.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

انتقل إلى قسم مراحل البناء في الهدف الذي تم إنشاؤه وتحقق من وجود تبعيات الهدف - AmazingApp، في Compile Sources - AmazingAppUITests.swift.

من الممارسات الجيدة فصل خيارات البناء المختلفة في مخططات منفصلة. قمنا بإنشاء مخطط لاختبارات واجهة المستخدم الخاصة بنا [XCode -> Product -> Scheme -> New Scheme] وأعطناه نفس الاسم: AmazingAppUITests.

يجب أن يتضمن إنشاء المخطط الذي تم إنشاؤه هدف التطبيق الرئيسي - اختبارات AmazingApp وTarget UI - AmazingAppUITests - انظر لقطة الشاشة

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

بعد ذلك، نقوم بإنشاء تكوين بناء جديد لاختبارات واجهة المستخدم. في XCode، انقر فوق ملف المشروع وانتقل إلى قسم المعلومات. انقر فوق "+" وقم بإنشاء تكوين جديد، على سبيل المثال XCtest. سنحتاج إلى هذا في المستقبل لتجنب الرقص بالدف عندما يتعلق الأمر بتوقيع التعليمات البرمجية.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

هناك ثلاثة أهداف على الأقل في مشروعك: التطبيق الرئيسي، واختبارات الوحدة (هناك بعضها، أليس كذلك؟) وواجهة المستخدم المستهدفة للاختبارات التي أنشأناها.

انتقل إلى Target AmazingApp، وعلامة التبويب إعدادات البناء، وقسم هوية توقيع الرمز. لتكوين XCtest، حدد iOS Developer. في القسم نمط توقيع الرمز، حدد يدوي. لم نقم بإنشاء ملف تعريف التوفير بعد، ولكننا سنعود إليه بالتأكيد بعد قليل.

بالنسبة إلى Target AmazingAppUITests، نفعل الشيء نفسه، ولكن أدخل com.company.amazingappuitests في عمود معرف حزمة المنتج.

2. إعداد مشروع في برنامج Apple Developer

نذهب إلى صفحة برنامج Apple Developer، وننتقل إلى قسم الشهادات والمعرفات وملفات التعريف، ثم إلى عمود معرفات التطبيقات في عنصر المعرفات. قم بإنشاء معرف تطبيق جديد باسم AmazingAppUITests ومعرف الحزمة com.company.amazingappuitests.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

الآن لدينا الفرصة لتوقيع اختباراتنا بشهادة منفصلة، ​​ولكن... يتضمن الإجراء الخاص بتجميع البنية للاختبار تجميع التطبيق نفسه وتجميع مشغل الاختبار. وبناءً على ذلك، نواجه مشكلة توقيع معرفي الحزمة مع ملف تعريف توفير واحد. لحسن الحظ، هناك حل بسيط وأنيق - Wildcard App ID. نكرر الإجراء الخاص بإنشاء معرف تطبيق جديد، ولكن بدلاً من معرف التطبيق الصريح، حدد معرف تطبيق Wildcard كما في لقطة الشاشة.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

في هذه المرحلة، انتهينا من العمل مع Developer.apple.com، لكننا لن نقوم بتصغير نافذة المتصفح. لنذهب إلى موقع التوثيق Fastlane واقرأ عن أداة المطابقة من الغلاف إلى الغلاف.

لاحظ القارئ اليقظ أنه من أجل استخدام هذه الأداة، نحتاج إلى مستودع خاص وحساب يمكنه الوصول إلى كل من برنامج Apple Developer وGithub. نقوم بإنشاء (إذا لم يكن هناك شيء من هذا القبيل فجأة) حسابًا للنموذج [البريد الإلكتروني محمي]، استخدم كلمة مرور قوية، وقم بتسجيلها على موقع Developer.apple.com، وقم بتعيينه كمسؤول للمشروع. بعد ذلك، امنح حسابك حق الوصول إلى مستودع github الخاص بشركتك وأنشئ مستودعًا خاصًا جديدًا باسم مثل AmazingAppMatch.

3. إعداد Fastlane وأداة المطابقة

افتح محطة طرفية، وانتقل إلى المجلد الذي يحتوي على المشروع وقم بتهيئة الخط السريع كما هو موضح في الدليل الرسمي. بعد إدخال الأمر

$ fastlane init

سيُطلب منك تحديد تكوينات الاستخدام المتاحة. حدد الخيار الرابع - الإعداد اليدوي للمشروع.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

ظهر دليل Fastlane جديد في المشروع، حيث يوجد ملفان - Appfile و Fastfile. باختصار - في Appfile نقوم بتخزين بيانات الخدمة، وفي Fastfile نكتب الوظائف، بمصطلحات Fastlane التي تسمى الممرات. أوصي بقراءة الوثائق الرسمية: وقت, اثنان.

افتح ملف 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!

ظهر ملف جديد في مجلد Fastlane - 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، أي لتوقيع معرف الحزمة الخاص بتطبيقك.

ولكن، كما نتذكر، أنشأنا معرف Wildcard خاصًا للتوقيع على الإصدار التجريبي. لذلك، افتح 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

ونرى كيف قام Fastlane بإنشاء شهادة جديدة ووضعها في المستودع. عظيم!

افتح اكس كود. لدينا الآن ملف تعريف التوفير الضروري للنموذج Match Development com.company.*، والذي يجب تحديده في قسم ملف تعريف التوفير لأهداف AmazingApp وAmazingAppUITests.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

يبقى إضافة حارة لتجميع الاختبارات. لنذهب إلى مخزن مشروع مكون إضافي لـ fastlane يسهّل إعداد التصدير إلى Firebase Test Lab واتباع التعليمات.

قم بالنسخ واللصق من المثال الأصلي بحيث ينتهي الأمر بـ test_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. ماذا عن مقعد الاختبار لدينا؟ إعداد Firebase.

دعنا ننتقل في الواقع إلى ما كتب المقال من أجله.

ربما يستخدم تطبيقك Firebase في خطة مجانية، أو ربما لا يستخدم Firebase على الإطلاق. لا يوجد أي فرق جوهري على الإطلاق، لأنه لتلبية احتياجات الاختبار، يمكننا إنشاء مشروع منفصل مع سنة من الاستخدام المجاني (رائع، هاه؟)

نقوم بتسجيل الدخول إلى حساب البنية التحتية الخاص بنا (أو أي حساب آخر، لا يهم)، ونذهب إلى صفحة وحدة التحكم في Firebase. أنشئ مشروعًا جديدًا باسم AmazingAppUITests.

هام: في الخطوة السابقة، في Fastfile في المسار firebase_test_lab_ios_xctest، يجب أن تتطابق المعلمة gcp_project مع اسم المشروع.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

الإعدادات الافتراضية تناسبنا بشكل جيد.

لا تغلق علامة التبويب، قم بالتسجيل تحت نفس الحساب في Gcloud - هذا إجراء ضروري، حيث يتم الاتصال بـ Firebase باستخدام واجهة وحدة التحكم gcloud.

تقدم Google مبلغ 300 دولار أمريكي لمدة عام، وهو ما يعادل في سياق إجراء الاختبارات التلقائية سنة من الاستخدام المجاني للخدمة. نقوم بإدخال معلومات الدفع الخاصة بك، وننتظر الخصم التجريبي بقيمة 1 دولار ونحصل على 300 دولار في حسابك. بعد مرور عام، سيتم نقل المشروع تلقائيًا إلى خطة تعريفة مجانية، لذلك لا داعي للقلق بشأن احتمال خسارة المال.

دعنا نعود إلى علامة التبويب الخاصة بمشروع Firebase وننقله إلى خطة تعريفة Blaze - الآن لدينا ما ندفعه في حالة تجاوز الحد.

في واجهة gcloud، حدد مشروع Firebase الخاص بنا، وحدد عنصر القائمة الرئيسية "الدليل" وأضف Cloud Testing API وCloud Tools Result API.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

ثم انتقل إلى عنصر القائمة "IAM والإدارة" -> حسابات الخدمة -> إنشاء حساب خدمة. منح الإذن لتحرير المشروع.

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

قم بإنشاء مفتاح API بتنسيق JSON

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS

سنحتاج إلى تنزيل JSON بعد قليل، ولكن في الوقت الحالي سنعتبر أن إعداد Test Lab مكتمل.

5. إعداد CircleCI

يطرح سؤال معقول - ماذا تفعل بكلمات المرور؟ ستساعدنا آلية متغيرات البيئة الخاصة بجهاز البناء الخاص بنا على تخزين كلمات المرور والبيانات الحساسة الأخرى بشكل آمن. في إعدادات مشروع CircleCI، حدد متغيرات البيئة

قم بإجراء اختبارات مفيدة في Firebase Test Lab. الجزء الأول: مشروع iOS
وقم بتعيين المتغيرات التالية:

  • المفتاح: GOOGLE_APPLICATION_CREDENTIALS
    القيمة: محتويات ملف json لمفتاح حساب خدمة gcloud
  • المفتاح: MATCH_PASSWORD
    القيمة: كلمة المرور لفك تشفير مستودع جيثب بالشهادات
  • المفتاح: FASTLANE_PASSWORD
    القيمة: كلمة مرور حساب البنية التحتية لـ Apple Developer Portal

نقوم بحفظ التغييرات وإنشاء العلاقات العامة وإرسالها إلى قائد فريقنا للمراجعة.

نتائج

ونتيجة لهذه التلاعبات البسيطة، حصلنا على منصة عمل جيدة ومستقرة مع القدرة على تسجيل الفيديو على شاشة الجهاز في وقت الاختبار. في حالة الاختبار، حددت طراز جهاز iPhone X، لكن المزرعة توفر مجموعة غنية من مجموعة من الطرز المختلفة وإصدارات iOS.

سيتم تخصيص الجزء الثاني لإعداد Firebase Test Lab لمشروع Android خطوة بخطوة.

المصدر: www.habr.com

إضافة تعليق