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

صورة

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

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

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

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

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

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


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

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

افتح المشروع في Xcode وقم بإنشاء هدف جديد باستخدام اختبارات واجهة المستخدم [XCode -> ملف -> جديد -> الهدف -> حزمة اختبار iOS] ، وأعطها اسم الحديث AmazingAppUITests.

صورة

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

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

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

صورة

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

صورة

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

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

بالنسبة إلى Target AmazingAppUITests ، فإننا نفعل الشيء نفسه ، ولكن في العمود Product Bundle Identifier ، ندخل com.company.amazingappuitests.

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


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

صورة

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

صورة

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

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

3. تكوين Fastlane والأداة المساعدة المباراة


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

 $ fastlane init 

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

صورة

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

افتح Appfile في محرر النصوص المفضل لديك واحضاره إلى النموذج التالي:

 app_identifier "com.company.amazingapp" # Bundle ID apple_dev_portal_id "infrastructureaccount@your.company.domain" #   ,     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("infrastructureaccount@your.company.domain") # 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 شهادة جديدة ووضعها في المستودع. ! ممتاز

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

صورة

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

انسخ من المثال الأصلي بحيث يبدو حارة 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 

للحصول على معلومات كاملة حول تكوين fastlane في 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 المختبر: 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 . إنشاء مشروع جديد يسمى AmazingAppUITests.

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

صورة

الإعدادات الافتراضية على ما يرام معنا.

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

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

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

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

صورة

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

صورة

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

صورة

سنحتاج إلى JSON الذي تم تنزيله في وقت لاحق بعض الشيء ، لكن الآن ، سننظر في إعداد Test Lab.

5. تكوين CircleCI


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

صورة
وابدأ المتغيرات التالية:

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

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

النتائج


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

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

Source: https://habr.com/ru/post/ar451786/


All Articles