آزمایش ممکن است به هر دلیلی ناموفق باشد و گاهیاوقات اجرای مجدد آزمایش برای موفقیتآمیز بودن آن کافی است (بهدلیل ناپایداری، مثلاً بهدلیل مشکلات در زیرساختهای اساسی). میتوانید 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 پیادهسازی نمونهای از آن واسط است.