كتابة برنامج لتشغيل اختبارات Tradefed

توضّح هذه الصفحة كيفية كتابة برنامج تشغيل اختبار جديد في 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.

أداة تشغيل الاختبار المرنة

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

يتيح ذلك الاستفادة من التحكّم الدقيق في إطار العمل والبنية الأساسية الأكبر، كما يتيح للمستخدمين تشغيل أداة تنفيذ الاختبار جزئيًا من خلال الفلترة.

يتم وصف إمكانية الفلترة في واجهة ITestFilterReceiver، التي تتيح تلقّي مجموعات من فلاتر include وexclude للاختبارات التي يجب أو لا يجب تنفيذها.

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