وقتی مجموعه آزمایشی بزرگ است یا زمان اجرا طولانی میشود، امکان تقسیم آزمایشها بین چند دستگاه را فراهم میکنیم: تکهبندی.
تکهبندی پیشنیازهایی دارد تا اجراکننده آزمایش بتواند از تکهبندی پشتیبانی کند.
اکثر اجراکنندگان آزمایش اصلی ازقبل از تکهتکه کردن پشتیبانی میکنند، بنابراین کار اضافی لازم نیست. این موارد ازقبل از قطعهبندی پشتیبانی میکنند: آزمایشهای ابزارگری، آزمایشهای سمت میزبان، GTest.
دو نوع تکهتکه کردن وجود دارد که در Tradefed پشتیبانی میکنیم: محلی و توزیعشده. این دو مورد شباهتهایی دارند، بنابراین این صفحه ابتدا ویژگیهای مشترک و سپس جزئیات هرکدام را شرح میدهد.
خصوصیتهای مشترک
هر دو شکل قطعهبندی ویژگیهای یکسانی را از اجراکنندههای آزمایش فرض میکنند: قطعهها باید مستقل و قطعی باشند. اولین مرحله در هر دو نوع تکهتکه کردن، ساختن فهرست کامل و مرتبشده آزمایشها و سپس تقسیم آنها به گروهها/تکههای مختلف است.
تفاوت اصلی فرمهای تکهتکه کردن در نحوه اجرای آزمایشها است. جزئیات بیشتر در بخشهای زیر.
تکهتکه کردن محلی
تکهتکه کردن محلی یعنی همه دستگاههای دخیل در اجرای فراخوانی تکهتکه به یک میزبان فیزیکی متصل هستند.
اجرا
تکه کردن محلی با ایجاد مجموعهای از آزمایشهایی که باید اجرا شوند و با داشتن هر دستگاهی که آزمایشها را وقتی آزاد است (یعنی آزمایش قبلی را انجام داده است) نظرسنجی میکند، از همه دستگاههایی که به میزبان یکسان متصل هستند بهره میبرد. این کار منجر به استفاده بهینه از دستگاه میشود. ما آن را توزیع پویا نیز مینامیم.
گزینهها
--shard-count XX
توزیع افقی
توزیع تکهتکه کردن یعنی همه دستگاههای درگیر در اجرای فراخوانی تکهتکه شده میتوانند در هر جایی باشند و به میزبانهای فیزیکی مختلف متصل شوند.
اجرا
توزیع تکهتکه کردن هنگام ساختن فهرست آزمایشها رخ میدهد و محتوای هر تکه فقط تکه درخواستی فعلی را اجرا میکند. بنابراین همه تکههای توزیعشده ابتدا همان فهرست را میسازند و سپس زیرمجموعه متقابلاً انحصاری آن را اجرا میکنند که منجر به اجرای همه آزمایشها میشود.
ویژگی اصلی این فرم این است که تکهها کاملاً از یکدیگر بیاطلاع هستند و میتوانند بهطور مستقل ازکار بیفتند.
نقص اصلی این است که طول تکه لزوماً متوازن نیست زیرا نمیتوانیم زمان اجرای هر آزمایش در هر تکه را ازقبل پیشبینی کنیم. توزیع بهگونهای انجام میشود که تقریباً تعداد یکسانی از موارد آزمایشی در هر تکه وجود داشته باشد.
گزینهها
--shard-count XX --shard-index XX
تکهتکه کردن کد
از تراشهسازی رمز فقط با تراشهسازی محلی میتوان استفاده کرد. پرچم در کاربردهای غیرمحلی تکهتکه کردن غیرعملیاتی است. گاهی اوقات یکی از دستگاههای درگیر در توزیع منابع ویژهای دارد که دیگران ندارند، مثلاً کارت سیمکارت. برخیاز آزمایشها ممکن است فقط زمانی کار کنند که آن منبع ویژه دردسترس باشد و درغیراینصورت ناموفق خواهند بود.
تکه کردن رمز راهکار ما برای چنین موارد استفادهای است. واحدهای آزمایشی میتوانند
اعلام کنند که به کدام منبع ویژه در AndroidTest.xml نیاز دارند، و
Tradefed آزمونها را به دستگاهی که منبع را دارد هدایت میکند.
پیکربندی XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
value از کد با Tradefed مطابقت دارد
TokenProperty
و با یک گرداننده در
TokenProviderHelper مرتبط است.
این کار امکان میدهد واحدهای آزمایشی دربرابر دستگاههایی که میتوانند آزمایشها را بهدرستی اجرا کنند اجرا شوند.
اگر هیچ دستگاهی نتواند آزمایش را اجرا کند چه میشود؟
اگر هیچیک از دستگاههای دردسترس منبعی نداشته باشند که با واحد آزمایش مطابقت داشته باشد، واحد آزمایش ناموفق میشود و از آن صرفنظر میشود زیرا نمیتواند بهدرستی اجرا شود.
برای مثال، اگر یک ماژول آزمایشی برای اجرا به سیمکارت نیاز داشته باشد اما هیچ دستگاهی سیمکارت نداشته باشد، ماژول آزمایشی ناموفق خواهد بود.
پیادهسازی
این پرچم ویژگی را به خط فرمان اصلی Tradefed منتقل کنید:
--enable-token-sharding