Apple WWDC 2020: الجديد في اختبار iOS

مرحبًا ، اسمي سيرجي وأنا أختبر تطبيقات iOS في Exness. في نهاية يونيو 2020 ، انتهى WWDC آخر. دعونا نرى ما جلبه إلى عالم اختبار تطبيقات iOS.



صورة



لكن أولاً ، رحلة تاريخية وجيزة: Apple WWDC (مؤتمر المطورين العالميين) ، أو ببساطة dub-dub ، هو مؤتمر تعقده Apple في كاليفورنيا منذ أواخر الثمانينيات. وقد عقد المؤتمر هذا العام على الإنترنت للمرة الأولى. وإذا تم سحب تذاكر سابقة في يانصيب ، وكان على أولئك الذين لم يتلقوا البريد الإلكتروني المطلوب أن يكونوا راضين عن الفيديو من الموقع https://developer.apple.com/videos/ ، هذا العام ، لأسباب واضحة ، لم تكن هناك خيارات أخرى: شاهد الجميع الفيديو ...  



لذا ، ما الذي يمكن أن تراه من الاختبار هناك؟



سأحجز على الفور أنه في WWDC 2020 لم تكن هناك جلسة عامة كبيرة مخصصة للاختبار في نظام Apple البيئي ، كما في السنوات السابقة (الاختبار في Xcode 2019 وما الجديد في اختبار 2018 ،2017 ). تم تلطيخ المستجدات في عام 2020 في ست جلسات صغيرة. اذهب!



XCTSkip لاختباراتك



أضاف Xcode 11.4 واجهة برمجة تطبيقات جديدة للتحكم في إطلاق الاختبارات بناءً على الظروف - XCTSkip. 



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



وقبل ذلك ، عندما جاءت الاختبارات لمثل هذه الحالات (التحقق من وظائف iPad فقط على iPhone) ، كان هناك خيار:



  • إنهاء حالة الاختبار ؛
  • ضع علامة على الاختبار على أنه نجح وانتقل ؛
  • فشل في الاختبار.


لدينا الآن خطأ حيث يتوقف الاختبار الحالي عن العمل ويتم وضع علامة عليه على أنه تم تخطيه. 



وهكذا، الآن XCTest ديه ثلاث حالات لاختبار مرت بدلا من اثنين:



صورة



مزيد من التفاصيل هنا و هنا .



معالجة المقاطعة والتنبيه في اختبارات واجهة المستخدم



كان التعامل مع المقاطعة والتنبيه في XCTest من قبل ، ولكن في الجلسة تم الكشف عن آلية عملها بمزيد من التفصيل. لقد وجدت أنها وظائف جديدة مثيرة للاهتمام تمت إضافتها في Xcode 11.4 و iOS / tvOS 13.4 و macOS 10.15.4 ، وهي إعادة تعيين الأذونات (المعروفة أيضًا باسم الموارد المحمية).



خلاصة القول هي: إذا كنت في وقت سابق ، على سبيل المثال ، في الاختبار رقم 1 منحت التطبيق حق الوصول إلى الكاميرا أو جهات الاتصال ، ثم لاحقًا ، في الاختبار رقم 2 ، ليس من السهل جدًا أخذ هذا الوصول. للقيام بذلك ، يجب عليك إعادة تثبيت التطبيق.



الآن ، باستخدام واجهة برمجة التطبيقات لإعادة تعيين التفويض للموارد المحمية ، يمكنك تحديد الوصول الممنوح مسبقًا: 



Class XCUIApplication {

	open func resetAuthorizationStatus(for: XCUIProtectedResource)

}


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



هذا يسمح لك بالسير على طول الطريق مع إصدار وجمع أذونات جهات الاتصال والتقويم والصور والميكروفون والكاميرا والموقع الجغرافي. على iOS ، يمكنك أيضًا إعادة تعيين الوصول إلى شبكة Bluetooth والوصول إلى لوحة المفاتيح ، والبدء بـ Xcode 12 / iOS 14 ، إلى بيانات Health. في نظام التشغيل Mac OS ، يمكنك إعادة تعيين الوصول إلى أدلة سطح المكتب والتنزيلات.



فيما يلي مثال على كيفية إعادة تعيين وصول التطبيق إلى الصور:




// Example
func testAddingPhotosFirstTime() throws {
	let app = XCUIApplication()
	app.resetAuthorizationStatus(for: .photos)

	app.launch()

	// Test code...
}


من المهم أن تتذكر أنه في كثير من الأحيان (ولكن ليس دائمًا) تؤدي إعادة تعيين الأذونات إلى قتل التطبيق.



مزيد من التفاصيل هنا ، هنا و هنا .



إزالة تأخر الرسوم المتحركة باستخدام XCTest



تعد تأخيرات الرسوم المتحركة ، أو السلوكيات ، سلوكًا يظهر فيه إطار في وقت متأخر عن المتوقع.

تصف المحاضرة كيفية منع ظهور التأخيرات في الرسوم المتحركة لتطبيقك عن طريق القياس والاختبار باستخدام Performance XCTests.



كما أنه يوفر أفضل الممارسات ويحدد أي التأخيرات يمكن تحملها وأيها يستحق البحث عنه:



صورة



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



الفرز وتشخيص الاختبارات الساقطة



غالبًا ما يكون إصلاح الاختبارات الفاشلة ألمًا يستغرق الكثير من الوقت والموارد.

سيحتوي Xcode 12 على واجهة برمجة تطبيقات جديدة من شأنها أن تسهل إصلاح الاختبارات الفاشلة. ينبغي أن تساعد واجهة برمجة التطبيقات في الإجابة بسرعة على الأسئلة: ماذا وكيف ولماذا والأهم - أين سقطت؟



إذا كان في وقت سابق ، بعد سقوط الاختبار ، كان عليك البحث عن موقع التعطل في

لوحة تنقل المشكلات أو متصفح التقارير ، ثم مع Xcode 12 أصبحت عملية البحث أسهل: الآن تم تمييز موقع العطل في الاختبار نفسه. 



يظهر خطأ مع تمييز رمادي إذا كان السطر يشير إلى سطر آخر في المستقبل:



صورة

 

وبالأحمر إذا حدث الخطأ مباشرة في هذا السطر:



صورة



ميزة جديدة مريحة - فتح محرر الشفرة ليس في نافذة منفصلة ، ولكن مباشرة في متصفح التقارير:



صورة



بالإضافة إلى ذلك ، تمت إضافة كائن XCTIssue جديد في Xcode 12 ، والذي ، بالإضافة إلى تغليف بيانات الخطأ التي جمعتها XCTest مسبقًا في حد ذاتها (الرسالة والمسار ورقم السطر وعلامة "متوقع") ، يضيف الآن:

 

  • أنواع مميزة

  • وصف مفصل

  • خطأ مرتبط

  • المرفقات.



مزيد من التفاصيل هنا و هنا .



اكتب الاختبارات لجعلها تفشل 



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

لذلك ما هو مقترح:



استخدم الرسائل البشرية المقروءة في التأكيد:



صورة



تأكد من استخدام نوع التأكيد المناسب لحالتك:



صورة



قم بفك الاختيارات الاختيارية لجعل تحطم اختباراتك يؤدي إلى حدوث خطأ بدلاً من التعطل. يوفر Swift العديد من الطرق للقيام بذلك ، ولكن تميل الاختبارات إلى استخدام XCTUnwrap ، وهو عبارة عن تبسيط للحماية يتيح البناء.



صورة



استخدم waitForExisting () بدلاً من sleep () للانتظار غير المتزامن.



استخدم XCTContext.runActivity () لزيادة قابلية قراءة سجل تنفيذ الاختبار:



صورة



وإذا كنت ترغب في إضافة تسجيل إضافي ، يمكنك إضافة مرفق أو إرفاق لقطة شاشة أو ناتج مصحح أخطاء مثل هنا. هذه الميزة مفيدة بشكل خاص إذا تم تشغيل الاختبارات الخاصة بك في CI / CD.



صورة



مزيد من التفاصيل هنا .



احصل على نتائج التشغيل التجريبي بشكل أسرع



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



يقدم Xcode 12 أدوات مكافحة التجميد. يعد هذا خيارًا جديدًا لاختبار خطة وقت التنفيذ المخصص.



عند تمكينه ، يحدد Xcode حدًا زمنيًا لكيفية تشغيل كل اختبار.

إذا تم تجاوز الحد ، يقوم Xcode بما يلي:



  1. يجمع تقرير (spindump) ؛
  2. يقتل اختبار معلق.
  3. أعد تشغيل عداء الاختبار بحيث يمكن تشغيل بقية المجموعة.


يعرض التقرير (spindump) أي الخيوط ، أي الوظيفة التي قضت معظم الوقت. سيسمح لك ذلك بمشاهدة اختناق اختباراتك بعينيك حتى قبل أن تبرد قهوة / شاي الصباح.



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



صورة



يمكنك أيضًا القيام بذلك باستخدام خيار الأمر xcodebuild:



xcodebuild option
-default-test-execution-time-allowance <seconds>


وبالمثل ، يمكنك تعيين الحد الأقصى لوقت تنفيذ الاختبار:



صورة



xcodebuild option
-maximun-test-execution-time-allowance <seconds>


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



Class XCTestCase: XCTest {
	var executionTimeAllowance: TimeInterval //    
}


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



يسمح لك Xcode 12 بتشغيل الاختبارات على أجهزة متعددة في نفس الوقت. تسمى هذه الميزة الاختبار الموزع الموازي. فوائد إجراء الاختبارات على أجهزة متعددة واضحة - توفير الوقت اللائق.



صورة



صورة



ولكن ، لسوء الحظ ، هناك أيضًا مآزق: ترتيب بدء الاختبارات بالتوازي ليس حتمية ، لا يوجد ضمان بأن يتم تنفيذ الاختبار رقم 6 على الجهاز رقم 1 بعد الاختبار رقم 5. يجب أن تؤخذ هذه الحقيقة في الاعتبار عند التخطيط لبدء الاختبارات باستخدام Parallel الاختبار الموزع.



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



الأمر لإجراء الاختبارات الموزعة المتوازية هو كما يلي: 



xcodebuild test
    -project MyProject.xcodeproj
    -scheme MyProject
    -parallel-testing-enabled YES
    -parallelize-test-among-desinations
    -destination 'platform=iOS,name=iPhone 11'
    -destination 'platform=iOS,name=iPad pro' 


مزيد من التفاصيل هنا .



بهذا نختتم مراجعة ميزات الاختبار الجديدة من WWDC 2020. شكرا للقراءة حتى النهاية.

آمل أن تجد هذه المقالة مفيدة. اختبار سعيد!



All Articles