اختبار أتمتة iOS مع Xcode إطار واجهة المستخدم

⚡ ملخص ذكي

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

  • 🔘 دورة تطوير البرمجيات القائمة على الاختبار: التصميم والاختبار والتنفيذ والاختبار مرة أخرى تشكل المراحل الأربع المطبقة على اختبار تطبيقات نظام التشغيل iOS.
  • ☑️ المتطلبات الأساسية: جهاز ماك يعمل بنظام التشغيل OS X مع Xcode تم تثبيت بيئة التطوير المتكاملة (IDE)، وإطار عمل الأتمتة، وحزمة تطوير البرامج لنظام iOS (SDK).
  • ✅ مسار الآلات الموسيقية: تقوم أداة التشغيل الآلي بتسجيل نص برمجي، وعرضه في سجل النصوص البرمجية، وإعادة تشغيله عند الطلب.
  • 🧪 مسار وحدة التحكم: هدف حزمة اختبار الوحدة، ومخطط نشط، ومجموعة اختبار، وفئة اختبار مكتوبة بلغة Objective-C.
  • ⚠️ الإهمال: تم إيقاف استخدام أداة UIAutomation في Xcode تمت إزالة الإصدار 8؛ XCUITest هو الإصدار البديل المدعوم.
  • 🛠️ المكافئ الحديث: يتم استبدال برنامج Instruments النصي المسجل بحزمة اختبار واجهة المستخدم بالإضافة إلى استعلامات XCUIApplication.

اختبار أتمتة نظام التشغيل iOS باستخدام Xcode إطار عمل أتمتة واجهة المستخدم لتشغيل نص برمجي مسجل على تطبيق

اختبار أتمتة iOS باستخدام Xcode

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

دورة تطوير قائمة على الاختبارات لاختبار أتمتة تطبيقات iOS، توضح مراحل التصميم والاختبار والتنفيذ وإعادة الاختبار.

التطوير القائم على الاختبار (TDD) هو أ تجريب نموذج يُطبق على اختبار تطبيقات iOS، وهو يندرج ضمن الممارسة الأوسع لـ اختبار المحمولفي هذا النموذج، يتعين على المختبر اتباع المراحل الأربع التالية:

  • تصميم: حدد ما تريد اختباره وصمم حالات الاختبار الخاصة بك.
  • اختبار: قم بتشغيل جميع الاختبارات وتحقق مما إذا كانت أي من حالات الاختبار تفشل.
  • تنفيذ: Revاستخدم الكود الخاص بك وقم بإصلاح الأخطاء التي تسببت في فشل الاختبار.
  • أعد الاختبار: إذا فشل أحد الاختبارات، فارجع إلى التصميم الأصلي. أما إذا نجحت جميع حالات الاختبار، فإن الكود يفي بجميع المتطلبات المختبرة.

اعداد Xcode مشروع لاختبار واجهة المستخدم

لإنشاء برنامج اختبار لنظام iOS، أنت بحاجة إلى جهاز Mac. يجب أن يكون مثبتًا على جهاز Mac الخاص بك البرامج التالية:

  • OS X — نظام التشغيل الخاص بجهاز ماك.
  • Xcode IDE — أداة تطوير تطبيقات نظام التشغيل iOS.
  • إطار عمل للاختبار الآلي — أتمتة واجهة المستخدم، وOCUnit، وما إلى ذلك.
  • حزمة تطوير البرامج لنظام التشغيل iOS 4 أو ما يفوقها.

⚠️ ملاحظة حول الإصدار: تصف المتطلبات المذكورة أعلاه مجموعة الأدوات المستخدمة في الحقبة التي كُتبت فيها الإرشادات التالية. على جهاز ماك حديث، Xcode يأتي البرنامج مزودًا بإطاري عمل XCTest وXCUITest، ولم تعد أداة أتمتة واجهة المستخدم جزءًا من التثبيت. تم الاحتفاظ بالخطوات الأصلية أدناه لأنها توثق كيفية عمل إطار العمل، وسيتم شرح البديل الحديث لاحقًا.

كيفية إنشاء أتمتة iOS باستخدام UI Automation Framework

تقوم الخطوات الثمانية التالية بتسجيل نص برمجي باستخدام أداة التشغيل الآلي وإعادة تشغيله على التطبيق قيد الاختبار.

الخطوة 1) إطلاق الأدوات

افتح XCode -> افتح أداة المطور -> أداة القياس

الآلات الموسيقية الافتتاحية من Xcode افتح قائمة أدوات المطور

الخطوة 2) إضافة أداة الأتمتة

في نافذة الأدوات، حدد أداة التشغيل الآلي.

تحديد أداة التشغيل الآلي في مُحدد قوالب الأدوات

لإنشاء نص برمجي للاختبار، يمكنك إما تسجيل سيناريو الاختبار أو يمكنك برمجته يدويًا.

الخطوة 3) اضغط على الزر الأحمر

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

زر التسجيل الأحمر في شريط أدوات الآلات الموسيقية يُستخدم لبدء وإيقاف التسجيل trace

الخطوة 4) إنشاء برنامج نصي جديد

في نافذة البرامج النصية، انقر فوق إضافة > إنشاء لإنشاء برنامج نصي جديد.

قائمة "إضافة وإنشاء" في نافذة "برامج الأدوات" لإنشاء برنامج تشغيل آلي جديد

الخطوة 5) اختر الهدف

أنت الآن في Tracنافذة e. استخدم خيار الاختيار Target اسحب للأسفل للانتقال إلى نسخة تصحيح الأخطاء من تطبيقك.

اختار Target اسحب للأسفل في الأدوات Tracنافذة تشير إلى إصدار التصحيح

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

واجهة تطبيق SimpleDrillDown النموذجية المستخدمة كتطبيق قيد الاختبار

الخطوة 6) ابدأ بتسجيل البرنامج النصي الخاص بك

قم بتسجيل البرنامج النصي الخاص بك عن طريق الضغط على زر التسجيل في أعلى أو أسفل الأداة.

زر التسجيل الموجود على حافة نافذة الأدوات والذي يبدأ عملية التقاط النصوص البرمجية

الآن يمكنك تنفيذ بعض إجراءات واجهة المستخدم على تطبيقك قيد الاختبار، وسيتم تسجيل البرنامج النصي الخاص بك.

الخطوة 7) انظر البرنامج النصي الخاص بك

لرؤية النص الخاص بك، اضغط على Tracانقر على القائمة المنسدلة "سجل / سجل المحرر" ثم انتقل إلى عرض سجل البرنامج النصي.

Tracتُستخدم القائمة المنسدلة "سجل e" و"سجل المحرر" للتبديل إلى عرض سجل البرنامج النصي.

سترى البرنامج النصي المسجل الخاص بك.

تم عرض نص برمجة أتمتة واجهة المستخدم المسجل في عرض سجل نصوص Instruments

الخطوة 8) تشغيل البرنامج النصي الخاص بك

اضغط على زر التشغيل. سيتم تشغيل البرنامج النصي، ويمكنك إيقافه بعد ظهور السجلات.

تشغيل نص التشغيل الآلي المسجل مع إخراج السجل في نافذة الأدوات

⚠️ ملاحظة تاريخية: تم إيقاف استخدام أداة الأتمتة المستخدمة في هذه الخطوات الثماني في Xcode تمت إزالة الإصدار 8 وما بعده، لذلك لم يعد موجودًا في الإصدار الحالي Xcode عمليات التثبيت. تم الاحتفاظ بالخطوات هنا كسجل لكيفية عمل الإطار؛ بالنسبة للعمل الجديد، استخدم دليل XCUITest الموجود أسفل هذه الصفحة.

كيفية إنشاء أتمتة iOS باستخدام إطار عمل OCUnit

أما المسار الثاني فيضع الاختبارات داخل Xcode المشروع نفسه بدلاً من أن يكون داخل الأدوات.

الخطوة 1) ابدأ Xcode بيئة التطوير المتكاملة، إضافة هدف حزمة اختبار الوحدة

إضافة هدف حزمة اختبار الوحدة إلى هدف موجود Xcode تنفيذ المشاريع

الخطوة الثانية: اكتب اسم حزمة اختبار الوحدة الجديدة كما هو موضح في الشكل أعلاه، ثم انقر فوق "إنهاء".

الخطوة 3) اجعل اختبار الوحدة هو الهدف النشط

تحديد حزمة اختبار الوحدة كهدف نشط في Xcode

الخطوة الرابعة) أضف مجموعة لفصول الاختبار

إنشاء مجموعة مشروع لاستضافة فئات اختبار وحدة iOS

الخطوة 5) إضافة فئة اختبار الوحدة

إضافة ملف فئة اختبار وحدة جديد داخل مجموعة الاختبار في Xcode

الخطوة السادسة) ابدأ الآن بتنفيذك

فئة اختبار الوحدة الفارغة في Xcode المحرر جاهز للتنفيذ التجريبي

يستخدم OCUnit لغة Objective-C لإنشاء برنامج الاختبار، لذا يجب على المطور معرفة هذه اللغة. Xcode إصدارات الشحن وحدة التجارب بدلاً من ذلك، يتم ذلك عبر XCTest، الذي يدعم كلاً من Objective-C و Swift، لكن بنية الهدف والفئة الموضحة في هذه الخطوات الست لم تتغير.

UIAutomation مقابل XCUITest: ما الذي تغير؟

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

البعد أتمتة واجهة المستخدم (الأدوات) اختبار XCUIT
الحالة تم إيقافها في Xcode 8 وتم حذفها من الإصدارات اللاحقة إطار عمل اختبار واجهة المستخدم المدعوم من Apple
حيث توجد الاختبارات البرامج النصية داخل أداة tracوثيقة إلكترونية هدف حزمة اختبار واجهة المستخدم داخل Xcode تنفيذ المشاريع
اللغة Javaسيناريو Swift أو Objective-C
عداء الاختبار أداة الأتمتة XCTest، وهو نفس برنامج تشغيل اختبارات الوحدة
التكامل المستمر محرج - يتم تشغيله من خلال الأدوات يتم تشغيله من سطر الأوامر جنبًا إلى جنب مع اختبارات الوحدة
تسجيل زر التسجيل في شريط أدوات الآلات الموسيقية زر التسجيل في Xcode محرر، والذي يصدر Swift

والنتيجة العملية لذلك هي أن مجموعة اختبارات XCUITest هي عبارة عن شفرة مصدرية عادية للمشروع. تتم مراجعتها وترقيم إصداراتها وتنفيذها مثل بقية قاعدة الشفرة، وهذا هو السبب الرئيسي لتسجيلها.tracاختفى النموذج الإلكتروني.

كيفية كتابة اختبار واجهة مستخدم لنظام iOS باستخدام XCUITest

إنّ المكافئ الحديث لخطوات الآلات الثمانية مختصر. يعكس الهيكل أدناه فكرة التسجيل ثم إعادة التشغيل نفسها، لكن الناتج هو ملف مصدر بدلاً من trace.

  1. أضف الهدف. In Xcode اختر ملف > جديد > Target ثم اختر قالب حزمة اختبار واجهة المستخدم، أو حدد خيار تضمين الاختبارات عند إنشاء مشروع جديد.
  2. افتح فئة الاختبار التي تم إنشاؤها. Xcode يقوم بإنشاء فئة فرعية من XCTestCase مع طرق إعداد واختبار فارغة.
  3. قم بتشغيل التطبيق قيد الاختبار. قم بإنشاء مثيل XCUIApplication وقم باستدعاء launch عليه، مما يؤدي إلى بدء تشغيل التطبيق في عملية منفصلة.
  4. استفسر وتصرف. يمكنك الوصول إلى العناصر من خلال استعلامات العناصر - الأزرار والجداول والنصوص الثابتة - واستدعاء وظائف النقر أو الكتابة أو التمرير عليها.
  5. أكد. استخدم XCTAssert للتحقق من وجود العنصر المتوقع بعد الإجراء.
  6. يركض. قم بتنفيذ الاختبار من Xcode مستكشف الاختبار، أو من سطر الأوامر بحيث يتم تشغيل نفس المجموعة في التكامل المستمر.

يتبع الاختبار البسيط هذا الشكل:

import XCTest

final class AppUITests: XCTestCase {

    func testTappingFirstRowShowsDetail() {
        let app = XCUIApplication()
        app.launch()

        // act on the first row of the list
        app.tables.cells.element(boundBy: 0).tap()

        // verify that the next screen appeared
        XCTAssertTrue(app.staticTexts.firstMatch.waitForExistence(timeout: 5))
    }
}

لا يزال المُسجِّل موجودًا: فوضع المؤشر داخل دالة اختبار والضغط على زر التسجيل في المحرر يُولِّد هذه الاستعلامات تلقائيًا، وهو نتاج مباشر للخطوة 6 المذكورة أعلاه. المبادئ الأوسع لـ اختبار الأتمتة يُطبق دون تغيير.

نموذج أتمتة واجهة المستخدم Code

تتضمن هذه المقالة بعض الأمثلة على شفرة المصدر. وهي تساعدك على فهم البرنامج التعليمي بشكل أوضح وأسرع.

نموذج أتمتة واجهة المستخدم — نص اختبار لعرض توضيحي لأتمتة واجهة المستخدم.

الأسئلة الشائعة

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

تقترح نماذج التعلم الآلي استعلامات استبدال العناصر عند تغيير الشاشة، وتُصنّف حالات الفشل غير المستقرة حسب السبب الجذري، وتُحدد أيّ حالات الفشل تُعدّ تراجعًا حقيقيًا. وهذا مهمٌّ لمجموعات واجهات المستخدم، حيث قد تؤدي تعديلات التخطيط البسيطة إلى تعطيل العديد من المحددات في آنٍ واحد.

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

Appium يقوم النظام بتشغيل نظام iOS من خلال برنامج التشغيل XCUITest، الذي حل محل برنامج التشغيل UIAutomation الأقدم. وتتمثل الميزة في وجود لغة اختبار واحدة متعددة المنصات لنظام iOS و Android؛ المقايضة هي طبقة إضافية بين الاختبار وبرنامج التشغيل الخاص بشركة Apple.

يُنفَّذ اختبار الوحدة داخل عملية التطبيق ويستدعي التعليمات البرمجية مباشرةً. أما اختبار واجهة المستخدم فيُشغِّل التطبيق كعملية منفصلة ويتفاعل فقط من خلال الواجهة، لذا فهو أبطأ ولكنه يتحقق من صحة تجربة المستخدم الفعلية.

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

يُعيد كل اختبار تشغيل التطبيق وينتظر اكتمال الرسوم المتحركة. يتحسن الاستقرار عند تعيين مُعرّفات إمكانية الوصول بدلاً من المطابقة على التسميات، والانتظار حتى وجود العنصر بدلاً من الانتظار.ping، إعادة ضبط الحالة بين الاختبارات، والحفاظ على تركيز كل حالة على رحلة واحدة.

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

تلخيص هذه التدوينة بـ: