تست شاردینگ

وقتی حجم داده‌های تست زیاد باشد یا زمان اجرا طولانی شود، ما امکان تقسیم تست‌ها بین چندین دستگاه را ارائه می‌دهیم: sharding .

شاردینگ پیش‌نیازهایی برای پشتیبانی اجراکننده‌ی تست از شاردینگ دارد.

اکثر اجراکننده‌های تست اصلی از قبل از شاردینگ پشتیبانی می‌کنند، بنابراین نیازی به کار اضافی نیست. این موارد از قبل از شاردینگ پشتیبانی می‌کنند: تست‌های ابزار دقیق، تست‌های مبتنی بر میزبان و GTest.

دو نوع شاردینگ وجود دارد که ما در Tradefed پشتیبانی می‌کنیم: محلی و توزیع‌شده. آن‌ها شباهت‌هایی دارند، بنابراین این صفحه ویژگی‌های مشترک و سپس جزئیات هر یک را شرح می‌دهد.

خواص مشترک

هر دو نوع شاردینگ، ویژگی‌های یکسانی را از اجراکننده‌های تست فرض می‌کنند: شاردها باید مستقل و قطعی باشند. اولین قدم در هر دو شاردینگ، ساخت لیست کامل و مرتب‌شده از تست‌ها و سپس تقسیم آنها به گروه‌ها/شاردها (shards) مختلف است.

تفاوت اصلی فرم‌های شاردینگ در نحوه‌ی اجرای تست‌ها است. جزئیات بیشتر در بخش‌های زیر آمده است.

شاردینگ محلی

شاردینگ محلی به این معنی است که تمام دستگاه‌های درگیر در اجرای فراخوانی شاردینگ به یک میزبان فیزیکی یکسان متصل هستند.

اعدام

شاردینگ محلی از اتصال همه دستگاه‌ها به یک میزبان واحد بهره می‌برد و با ایجاد مجموعه‌ای از تست‌ها که باید اجرا شوند و هر دستگاه در زمان آزاد بودن (یعنی انجام تست قبلی) تست‌ها را انجام می‌دهد. این امر منجر به بهینه‌سازی استفاده از دستگاه می‌شود. ما آن را شاردینگ پویا نیز می‌نامیم.

گزینه‌ها

--shard-count XX

شاردینگ توزیع‌شده

شاردینگ توزیع‌شده به این معنی است که تمام دستگاه‌های درگیر در اجرای فراخوانی شاردینگ می‌توانند در هر مکانی قرار داشته باشند و به میزبان‌های فیزیکی مختلف متصل باشند.

اعدام

شاردینگ توزیع‌شده هنگام ساخت لیست تست‌ها رخ می‌دهد و محتوای هر شارد فقط شارد درخواست‌شده‌ی فعلی را اجرا می‌کند. بنابراین، همه شاردهای توزیع‌شده ابتدا لیست یکسانی را می‌سازند و سپس زیرمجموعه‌ای از آن را که متقابلاً منحصر به فرد است، اجرا می‌کنند که منجر به اجرای همه تست‌ها می‌شود.

ویژگی اصلی این فرم این است که خرده ریزها کاملاً از یکدیگر بی‌اطلاع هستند و می‌توانند به‌طور مستقل از هم خراب شوند.

اشکال اصلی این است که طول shard لزوماً متعادل نیست، صرفاً به این دلیل که نمی‌توانیم از قبل زمان اجرای هر تست در هر shard را پیش‌بینی کنیم. توزیع طوری ساخته شده است که تقریباً تعداد موارد تست یکسانی در هر shard داشته باشد.

گزینه‌ها

--shard-count XX --shard-index XX

شاردینگ توکن

شاردینگ توکن فقط با شاردینگ محلی قابل استفاده است. این پرچم در موارد استفاده شاردینگ غیرمحلی غیرفعال است. گاهی اوقات یکی از دستگاه‌های درگیر در شاردینگ منابع ویژه‌ای را در اختیار دارد که سایرین ندارند، مانند سیم کارت. برخی از آزمایش‌ها ممکن است فقط زمانی کار کنند که آن منبع ویژه در دسترس باشد و در غیر این صورت با شکست مواجه شوند.

تقسیم‌بندی توکن (Token sharding) راه‌حل ما برای چنین مواردی است. ماژول‌های تست می‌توانند منبع ویژه مورد نیاز خود را در AndroidTest.xml خود اعلام کنند و Tradefed تست‌ها را به دستگاهی که آن منبع را دارد، هدایت می‌کند.

پیکربندی XML

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

value توکن با TokenProperty مربوط به Tradefed مطابقت دارد و با یک handler در TokenProviderHelper مرتبط است.

این امر امکان اجرای ماژول‌های تست را روی دستگاه‌هایی که می‌توانند تست‌ها را به درستی انجام دهند، فراهم می‌کند.

اگر هیچ دستگاهی نتواند تست را اجرا کند، چه می‌شود؟

اگر هیچ دستگاهی منبعی مطابق با ماژول آزمایشی نداشته باشد، ماژول آزمایشی ناموفق بوده و از آن صرف نظر می‌شود زیرا نمی‌تواند به درستی اجرا شود.

برای مثال، اگر یک ماژول آزمایشی درخواست اجرای سیم‌کارت را داشته باشد اما هیچ دستگاهی سیم‌کارت نداشته باشد، ماژول آزمایشی با شکست مواجه می‌شود.

پیاده‌سازی

این پرچم ویژگی را به خط فرمان اصلی Tradefed ارسال کنید:

--enable-token-sharding