یک آزمایش ممکن است به هر دلیلی شکست بخورد، و گاهی اوقات صرفاً اجرای مجدد آزمایش برای قبولی مجدد آن کافی است (به دلیل ناپایداری، مثلاً به دلیل مشکلات زیرساختی). میتوانید Tradefed را طوری پیکربندی کنید که آزمایش مجدد را به صورت خودکار انجام دهد.
هسته اصلی auto-retry جلوگیری از اجرای مجدد همه تستها است؛ این قابلیت فقط تستهای ناموفق را دوباره اجرا میکند و در نتیجه باعث صرفهجویی زیادی در زمان اجرا میشود.
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 را که پشتیبانی از نتایج دانهای (غیر تجمیعی) را اعلام میکند، گسترش دهند.
جزئیات پیادهسازی
برای فعال کردن قابلیت auto-retry برای اجرای مجدد خطاها در سطح Test Case، باید ITestFilterReceiver را پیادهسازی کنید.
اگر نمیتوانید ITestFilterReceiver را پیادهسازی کنید، میتوانید IAutoRetriableTest را برای کنترل دستی نحوهی اجرای مجدد پیادهسازی کنید. InstalledInstrumentationsTest یک نمونه پیادهسازی از آن رابط است.