توضّح هذه الصفحة كيفية كتابة برنامج تشغيل اختبار جديد في Tradefed.
الخلفية
إذا كنت مهتمًا بمعرفة مكان أدوات تشغيل الاختبارات في بنية Tradefed، يمكنك الاطّلاع على بنية أداة تشغيل الاختبارات.
هذا ليس شرطًا أساسيًا لكتابة برنامج تشغيل اختبار جديد، إذ يمكن كتابة برامج تشغيل الاختبار بشكل مستقل.
الحدّ الأدنى: تنفيذ الواجهة
الحد الأدنى من المتطلبات للتأهّل كبرنامج تشغيل اختبار Tradefed هو تنفيذ واجهة IRemoteTest، وتحديدًا طريقة run(TestInformation testInfo, ITestInvocationListener listener)
.
هذه الطريقة هي التي يتم استدعاؤها من خلال أداة الاختبار عند استخدام مشغّل الاختبار، على غرار Java Runnable.
ويُعدّ كل جزء من هذه الطريقة جزءًا من تنفيذ أداة تشغيل الاختبار.
نتائج التقارير من أداة تنفيذ الاختبار
يوفّر الإجراء run
في الواجهة الأساسية إمكانية الوصول إلى عنصر مستمع من النوع ITestInvocationListener
. هذا العنصر هو المفتاح لإعداد تقارير عن النتائج المنظَّمة من أداة تنفيذ الاختبار إلى إطار الاختبار.
من خلال عرض النتائج المنظَّمة، يمتلك برنامج تشغيل الاختبار الخصائص التالية:
- يجب تقديم قائمة صحيحة بجميع الاختبارات التي تم إجراؤها ومدة كل اختبار وما إذا كان قد تم اجتيازه أو تعذّر إجراؤه أو كان في حالة أخرى.
- إعداد تقارير مقاييس مرتبطة بالاختبارات، إذا كان ذلك منطبقًا، مثل مقاييس وقت التثبيت
- تضمين معظم أدوات البنية الأساسية، مثل عرض النتائج والمقاييس وما إلى ذلك
- من الأسهل عادةً تصحيح الأخطاء لأنّه يتوفّر تتبُّع أكثر تفصيلاً للتنفيذ.
مع ذلك، يبقى إعداد تقارير عن النتائج المنظَّمة أمرًا اختياريًا، فقد يريد برنامج تشغيل الاختبار ببساطة تقييم حالة عملية التشغيل بأكملها على أنّها PASSED أو FAILED بدون أي تفاصيل عن التنفيذ الفعلي.
يمكن استدعاء الأحداث التالية في أداة معالجة الأحداث لإبلاغ أداة الاختبار بالتقدّم الحالي في عمليات التنفيذ:
- testRunStarted: لإعلامك ببداية مجموعة من حالات الاختبار المرتبطة ببعضها.
- testStarted: لإعلامك ببدء تنفيذ حالة اختبار.
- testFailed/testIgnored: لإعلامك بتغيير حالة حالة الاختبار الجارية. ويُعدّ اختبار الحالة الذي لم يتم فيه أي تغيير ناجحًا.
- testEnded: لإرسال إشعار بانتهاء حالة الاختبار.
- testRunFailed: لإعلامك بأنّ الحالة العامة لتنفيذ مجموعة من حالات الاختبار هي تعذُّر. يمكن أن يكون التشغيل التجريبي ناجحًا أو فاشلاً بشكل مستقل عن نتائج حالات الاختبار استنادًا إلى ما كان متوقعًا من التنفيذ. على سبيل المثال، يمكن أن يعرض ملف ثنائي يشغّل عدة حالات اختبار جميع حالات الاختبار التي نجحت، ولكن مع رمز خروج يشير إلى حدوث خطأ (لأي أسباب، مثل تسريب الملفات وما إلى ذلك).
- testRunEnded: لإرسال إشعار بنهاية مجموعة من حالات الاختبار
يتحمّل منفّذ أداة تشغيل الاختبار مسؤولية الحفاظ على الترتيب الصحيح لعمليات معاودة الاتصال وضمانه، على سبيل المثال، التأكّد من استدعاء testRunEnded
في حال حدوث استثناء باستخدام عبارة finally
.
إنّ عمليات معاودة الاتصال الخاصة بحالات الاختبار (testStarted
وtestEnded
وما إلى ذلك) اختيارية. قد يتم تنفيذ اختبار بدون أي حالات اختبار.
قد تلاحظ أنّ بنية الأحداث هذه مستوحاة من بنية JUnit النموذجية. ويتم ذلك عمدًا للحفاظ على بساطة الأمور، إذ إنّ المطوّرين عادةً ما يكون لديهم معرفة بهذا الموضوع.
سجلات التقارير من أداة تنفيذ الاختبار
إذا كنت تكتب فئة اختبار أو مشغّل Tradefed خاصًا بك، عليك تنفيذ IRemoteTest والحصول على ITestInvocationListener
من خلال طريقة run()
. يمكن استخدام أداة الاستماع هذه لتسجيل الملفات على النحو التالي:
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
الاختبار باستخدام جهاز
تتيح الحد الأدنى من الواجهة المذكورة أعلاه إجراء اختبارات بسيطة جدًا ومعزولة ولا تتطلّب أي موارد معيّنة، مثل اختبارات الوحدات في Java.
يحتاج كتّاب الاختبارات الذين يريدون الانتقال إلى الخطوة التالية من اختبار الأجهزة إلى الواجهات التالية:
- تتيح السمة IDeviceTest
تلقّي العنصر
ITestDevice
الذي يمثّل الجهاز قيد الاختبار، كما توفّر واجهة برمجة التطبيقات للتفاعل معه. - تتيح واجهة IBuildReceiver للاختبار الحصول على العنصر
IBuildInfo
الذي تم إنشاؤه في خطوة موفّر الإصدار والذي يحتوي على جميع المعلومات والعناصر ذات الصلة بإعداد الاختبار.
يهتم مشغّلو الاختبار عادةً بهذه الواجهات من أجل الحصول على عناصر ذات صلة بالتنفيذ، مثل ملفات إضافية، والحصول على الجهاز قيد الاختبار الذي سيتم استهدافه أثناء التنفيذ.
الاختبار باستخدام أجهزة متعددة
يتيح إطار عمل Tradefed إجراء الاختبارات على أجهزة متعددة في الوقت نفسه. يكون ذلك مفيدًا عند اختبار المكوّنات التي تتطلّب تفاعلاً خارجيًا، مثل ربط هاتف بساعة.
لكتابة أداة تشغيل اختبار يمكنها استخدام أجهزة متعددة، عليك تنفيذ واجهة IMultiDeviceTest، والتي ستتيح تلقّي خريطة من ITestDevice
إلى IBuildInfo
تحتوي على القائمة الكاملة لتمثيلات الأجهزة ومعلومات الإصدار المرتبطة بها.
سيتم دائمًا استدعاء طريقة الضبط من الواجهة قبل طريقة run
، لذا يمكنك الافتراض بأمان أنّ البنية ستكون متاحة عند استدعاء run
.
الاختبارات التي تتوافق مع إعداداتها
قد تحتاج بعض عمليات تنفيذ أدوات تشغيل الاختبار إلى معلومات حول الإعداد العام لكي تعمل بشكل صحيح، مثل بعض البيانات الوصفية حول الاستدعاء أو الاختبارات التي تم تنفيذها من قبل، وما إلى ذلك.target_preparer
ولتحقيق ذلك، يمكن لأداة تنفيذ الاختبار الوصول إلى العنصر IConfiguration
الذي تشكّل جزءًا منه والذي يتم تنفيذه فيه. راجِع وصف
عنصر الإعداد
للحصول على مزيد من التفاصيل.
بالنسبة إلى تنفيذ أداة تشغيل الاختبار، عليك تنفيذ واجهة
IConfigurationReceiver
لتلقّي العنصر IConfiguration
.
Flexible test runner
يمكن أن توفّر أدوات تشغيل الاختبارات طريقة مرنة لإجراء الاختبارات إذا كانت تتيح التحكّم الدقيق فيها، على سبيل المثال، يمكن لأداة تشغيل اختبارات JUnit إجراء كل اختبار وحدة على حدة.
يتيح ذلك الاستفادة من هذا التحكّم الدقيق في إطار العمل والبنية الأساسية الأكبر، كما يتيح للمستخدمين تشغيل أداة تنفيذ الاختبار جزئيًا من خلال الفلترة.
يتم وصف إمكانية الفلترة في
واجهة ITestFilterReceiver،
التي تتيح تلقّي مجموعات من فلاتر include
وexclude
للاختبارات
التي يجب أو لا يجب تنفيذها.
نتبع قاعدة مفادها أنّه سيتم إجراء اختبار إذا كان يتطابق مع فلتر واحد أو أكثر من فلاتر التضمين، ولا يتطابق مع أي من فلاتر الاستبعاد. في حال عدم توفّر أي فلاتر تضمين، يجب تنفيذ جميع الاختبارات ما دامت لا تتطابق مع أي من فلاتر الاستبعاد.