قد يفشل الاختبار لأي سبب من الأسباب، وفي بعض الأحيان تكون إعادة تشغيل الاختبار كافية لنجاحه مرة أخرى (بسبب التقلب، مثل مشكلات في البنية التحتية الأساسية). يمكنك تكوين Tradefed لإجراء إعادة المحاولة تلقائيًا.
جوهر إعادة المحاولة التلقائية هو تجنب إعادة تشغيل كافة الاختبارات؛ فهو يعيد تشغيل الاختبارات الفاشلة فقط، مما يؤدي إلى توفير كبير في وقت التنفيذ.
يدعم Tradefed أيضًا إجراء الاختبارات عدة مرات من أجل اكتشاف الخلل عبر ميزة التكرارات . في هذه الحالة، سيتم إعادة تشغيل جميع الاختبارات، وسيفشل الاختبار في حالة فشل أي من التكرارات.
تمكين إعادة المحاولة التلقائية
يتم التحكم في إعادة المحاولة التلقائية عبر كائن RetryDecision الذي يوفر خيارين لتمكين الميزة: max-testcase-run-count
و retry-strategy
.
يحرك max-testcase-run-count
عدد مرات إعادة المحاولة أو التكرارات التي ستتم محاولتها. فهو يعين حدًا أعلى لتجنب إعادة المحاولة إلى الأبد. retry-strategy
هي التي تحدد كيفية إعادة المحاولة؛ راجع الأقسام التالية لمزيد من التفاصيل.
تعطيل إعادة المحاولة التلقائية
استخدم الخيار التالي:
--retry-strategy NO_RETRY
إعادة المحاولة الفاشلة
لإعادة محاولة فشل الاختبار، استخدم الخيارات التالية:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
سيؤدي هذا إلى إعادة محاولة الفشل حتى يمر أو حتى يتم الوصول إلى الحد الأقصى لعدد مرات إعادة المحاولة، أيهما يأتي أولاً.
التكرارات
لإعادة إجراء الاختبارات لعدد من الوقت، يمكن استخدام الخيارات التالية:
--retry-strategy ITERATIONS --max-testcase-run-count X
كيف تبدو النتائج؟
سيتلقى مُبلغو النتائج بشكل افتراضي نتائج مجمعة لجميع المحاولات.
على سبيل المثال: سيؤدي Fail
Pass
لـ RETRY_ANY_FAILURE
إلى Pass
مجمع نظرًا لأن إعادة المحاولة تمكنت من مسح الفشل.
من الممكن للصحفيين الحصول على النتائج غير المجمعة. للقيام بذلك، يحتاجون إلى توسيع واجهة ISupportGranularResults التي تعلن عن دعم النتائج التفصيلية (غير المجمعة).
تفاصيل التنفيذ
لتمكين إعادة المحاولة التلقائية لإعادة تشغيل حالات الفشل على مستوى حالة الاختبار، قم بتنفيذ ITestFilterReceiver .
إذا لم تتمكن من تنفيذ ITestFilterReceiver، فيمكنك تنفيذ IAutoRetriableTest للتحكم يدويًا في كيفية عمل إعادة التشغيل. يعد InstalledInstrumentationsTest مثالاً لتطبيق تلك الواجهة.