نوشتن دونده آزمایش Tradefed

این صفحه نحوه نوشتن یک اجراکننده آزمایش جدید در Tradefed را شرح می‌دهد.

پس‌زمینه

اگر درباره جایگاه اجراکننده‌های آزمایش در معماری Tradefed کنجکاو هستید، ساختار اجراکننده آزمایش را ببینید.

این پیش‌نیاز نوشتن دونده آزمایشی جدید نیست؛ دونده‌های آزمایشی را می‌توان به‌صورت مجزا نوشت.

حداقل لازم: پیاده‌سازی میانای کاربری

حداقل شرایط لازم برای واجدشرایط شدن به‌عنوان اجراکننده آزمون Tradefed پیاده‌سازی واسط IRemoteTest و به‌طور خاص‌تر روش run(TestInformation testInfo, ITestInvocationListener listener) است.

این روش همان روشی است که هنگام استفاده از اجراکننده آزمایش توسط مهار فراخوانده می‌شود، مشابه با Java Runnable.

هر بخش از آن روش به‌عنوان بخشی از اجرای تست‌رانر درنظر گرفته می‌شود.

گزارش نتایج از اجراکننده آزمایش

روش run در میانای پایه به شیء شنونده از نوع ITestInvocationListener دسترسی می‌دهد. این شیء کلید گزارش کردن نتایج ساختاریافته از اجراکننده آزمایش به مهار است.

با گزارش کردن نتایج ساختاریافته، اجراکننده آزمایش دارای ویژگی‌های زیر است:

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

بااین‌حال، گزارش نتایج ساختاریافته اختیاری است؛ یک اجراکننده آزمون ممکن است به‌سادگی بخواهد وضعیت کل اجرا را به‌عنوان «موفق» یا «ناموفق» بدون هیچ جزئیاتی از اجرای واقعی ارزیابی کند.

رویدادهای زیر را می‌توان در شنونده فراخوانی کرد تا به مهارکننده اطلاع دهد پیشرفت فعلی اجراها:

  • testRunStarted: شروع گروهی از چارچوب‌های تست مرتبط را اعلام می‌کند.
    • testStarted: شروع یک مورد آزمایشی را اعلام می‌کند.
    • testFailed/testIgnored: تغییر وضعیت چارچوب تست درحال انجام را اطلاع می‌دهد. چارچوب تستی بدون هیچ تغییری در وضعیت گذر درنظر گرفته می‌شود.
    • testEnded: پایان چارچوب تست را اعلام می‌کند.
  • testRunFailed: اطلاع‌رسانی می‌کند که وضعیت کلی اجرای گروه چارچوب‌های تست ناموفق است. اجرای آزمایشی می‌تواند موفق یا ناموفق باشد صرف‌نظر از نتایج چارچوب‌های تست بسته به اینکه انتظار از اجرا چه بوده است. برای مثال، یک فایل اجرایی باینری که چندین مورد آزمایشی را اجرا می‌کند می‌تواند همه موارد آزمایشی موفق را گزارش کند اما با کد خروج خطا (به هر دلیلی: فایل‌های فاش‌شده و غیره).
  • testRunEnded: پایان گروه چارچوب‌های تست را اعلام می‌کند.

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

پاسخ‌های تماس موارد آزمایشی (testStarted، testEnded، و غیره) اختیاری است. ممکن است اجرای آزمایشی بدون هیچ چارچوب تستی انجام شود.

ممکن است متوجه شوید که این ساختار رویدادها از ساختار معمول JUnit الهام گرفته شده است. این کار به‌عمد انجام شده است تا همه چیز به چیزی اساسی که توسعه‌دهندگان معمولاً درباره آن اطلاعات دارند نزدیک باشد.

گزارش گزارش‌های دونده آزمایشی

اگر کلاس یا اجراکننده آزمایش Tradefed خودتان را می‌نویسید، IRemoteTest را پیاده‌سازی خواهید کرد و ازطریق روش run()، ITestInvocationListener را دریافت خواهید کرد. از این شنونده می‌توان برای ثبت فایل‌ها به‌صورت زیر استفاده کرد:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

آزمایش با دستگاه

میانای حداقلی بالا امکان اجرای آزمایش‌های بسیار ساده‌ای را فراهم می‌کند که مجزا هستند و به هیچ منبع خاصی نیاز ندارند، برای مثال آزمایش‌های واحد Java.

نویسندگان آزمایشی که می‌خواهند به مرحله بعدی آزمایش دستگاه بروند به میاناهای زیر نیاز دارند:

  • IDeviceTest امکان دریافت شیء ITestDevice را که نشان‌دهنده دستگاه تحت آزمایش است فراهم می‌کند و API را برای تعامل با آن ارائه می‌دهد.
  • IBuildReceiver به آزمایش اجازه می‌دهد شیء IBuildInfo ایجادشده در مرحله ارائه‌دهنده ساخت را که حاوی همه اطلاعات و مصنوعات مربوط به راه‌اندازی آزمایش است دریافت کند.

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

آزمایش با چند دستگاه

‫Tradefed از اجرای هم‌زمان آزمایش‌ها در چندین دستگاه پشتیبانی می‌کند. این ویژگی هنگام آزمایش مؤلفه‌هایی که به تعامل خارجی نیاز دارند، مانند جفت کردن تلفن و ساعت، مفید است.

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

تنظیم‌کننده از میانای کاربری همیشه قبل‌از روش run فراخوانده می‌شود، بنابراین می‌توان با اطمینان فرض کرد که ساختار هنگام فراخوانده شدن run دردسترس خواهد بود.

آزمایش‌های آگاه از تنظیماتشان

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

برای دستیابی به این هدف، اجراکننده آزمایش می‌تواند به شیء IConfiguration که بخشی از آن است و در آن اجرا می‌شود دسترسی داشته باشد. برای جزئیات بیشتر، شرح شیء پیکربندی را ببینید.

برای پیاده‌سازی اجراکننده آزمایش، باید IConfigurationReceiver را پیاده‌سازی کنید تا شیء IConfiguration را دریافت کنید.

اجراکننده آزمایش انعطاف‌پذیر

اگر اجراکننده‌های آزمایش کنترل دقیقی بر آزمایش‌هایشان داشته باشند، می‌توانند روشی انعطاف‌پذیر برای اجرای آزمایش‌هایشان ارائه دهند، برای مثال، اجراکننده آزمایش JUnit می‌تواند هر آزمایش واحد را به‌طور جداگانه اجرا کند.

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

پشتیبانی از فیلتر کردن در واسط ITestFilterReceiver توضیح داده شده است، که امکان دریافت مجموعه‌های فیلتر include و exclude را برای آزمایش‌هایی که باید یا نباید اجرا شوند فراهم می‌کند.

قرارداد ما این است که آزمایش زمانی اجرا می‌شود که با یک یا چند فیلتر گنجاندن مطابقت داشته باشد و با هیچ‌یک از فیلترهای کنار گذاشتن مطابقت نداشته باشد. اگر هیچ فیلتر دربرگیری‌ای ارائه نشده باشد، همه آزمایش‌ها باید اجرا شوند، به‌شرطی که با هیچ‌یک از فیلترهای استثنا مطابقت نداشته باشند.