
اسمي ديمتري ، أعمل كاختبار في
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"
نعود إلى المحطة ووفقًا للدليل الرسمي ، نبدأ في تهيئة المطابقة.
$ fastlane match init $ fastlane match development
بعد ذلك ، أدخل البيانات المطلوبة - المستودع ، الحساب ، كلمة المرور ، إلخ.
هام: في المرة الأولى التي تبدأ فيها تشغيل الأداة المساعدة للتطابق ، سيُطلب منك إدخال كلمة مرور لفك تشفير المستودع. من المهم جدًا الاحتفاظ بكلمة المرور هذه ، في مرحلة إعداد خادم CI ، سيكون من المفيد لنا!
ظهر ملف جديد في مجلد fastlane - Matchfile. افتح محرر النصوص المفضل لديك واحضره إلى النموذج:
git_url("https://github.com/YourCompany/AmazingAppMatch")
نحن نملأها بهذه الطريقة إذا كنا نرغب في استخدام مطابقة للتوقيع على تصميمات للنشر في Crashlytics و / أو AppStore ، أي للتوقيع على معرف الحزمة للتطبيق الخاص بك.
ولكن ، كما نتذكر ، لإنشاء إنشاء اختبار ، قمنا بإنشاء معرف Wildcard خاص. لذلك ، افتح Fastfile وأدخل حارة جديدة:
lane :testing_build_for_firebase do match( type: "development", readonly: true, app_identifier: "com.company.*", git_branch: "uitests"
حفظ ، أدخل في المحطة
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',
للحصول على معلومات كاملة حول تكوين 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
المختبر: 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
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.