برای درک این بخش، ابتدا Tradefed @Option را مطالعه کنید.
گزینههای معمولی در Tradefed به کلاسهای آزمایشی اجازه میدهند تا اطلاعات اضافی را از پیکربندی XML یا خط فرمان دریافت کنند. این ویژگی به شما اجازه می دهد تا یک مرحله اضافی را طی کرده و در صورت لزوم برخی از این اطلاعات اضافی را حل کنید.
مثال گزینه فایل
فایل نمونه @option:
@Option(name = 'config-file')
private File mConfigFile;
موارد فوق را می توان از طریق پیکربندی XML تنظیم کرد:
<option name="config-file" value="/tmp/file" />
یا از طریق دستور:
--config-file /tmp/file
توضیحات
این ویژگی به شما امکان میدهد تا گزینههای @ تایپ شده با فایل را که از راه دور هستند در یک فایل محلی حل کنید تا از دیدگاه کاربر بهطور یکپارچه در دسترس باشد.
برای این کار، فایل باید با یک مسیر سبک از راه دور مشخص شود. به عنوان مثال:
--config-file gs://bucket/tmp/file
این مسیر به فایلی در یک سطل Google Cloud Storage (GCS) که در آن ذخیره می شود اشاره می کند. Tradefed با دیدن آن مسیر راه دور، سعی می کند فایل را به صورت محلی دانلود کرده و آن را به @Option اختصاص دهد. این باعث می شود که متغیر mConfigFile
اکنون به نسخه محلی فایل اشاره کند که می تواند برای آزمایش استفاده شود.
اگر فایل راه دور به هر دلیلی قابل دانلود نباشد، Tradefed یک ConfigurationException
می اندازد که از اجرای آزمایش جلوگیری می کند. ما از دست دادن آن فایلها را یک شکست مهم در نظر میگیریم، زیرا برخی از مصنوعات آزمایشی نیز وجود ندارند.
از پارامترهای پرس و جو استفاده کنید
افزودن پارامترهای پرس و جو به URL با استفاده از ?
. به عنوان مثال، gs://bucket/path?unzip=true
. کلید/مقدار unzip=true
در پیاده سازی رابط IRemoteFileResolver در دسترس خواهد بود.
دو رفتار داخلی موجود است:
- unzip: اگر روی
true
تنظیم شده باشد و فایل دانلود شده فشرده باشد، به طور خودکار در یک مکان موقت از حالت فشرده خارج می شود. مثال:?unzip=true
- اختیاری: پیش فرض به
false
. اگر رویtrue
تنظیم شود و رزولوشن ناموفق باشد، استثنایی ایجاد نمی کند و به سادگی جایگزین فایل نمی شود. مثال:?optional=true
همچنین میتوانید آرگومانهای پرس و جوی سراسری را از طریق --dynamic-download-args key=value
ارسال کنید که کلید/مقدار را به همه دانلودهای پویا که در فراخوانی انجام شده است ارسال میکند.
پروتکل های پشتیبانی شده
پروتکل های رسمی پشتیبانی شده و فرمت های مربوط به آنها عبارتند از:
- Google Cloud Storage، پروتکل:
gs
، قالب:gs://<bucket name>/path
- فایل های محلی، پروتکل:
file
، فرمت:file:/local/path
- پیوندهای http، پروتکل:
http
، فرمت:http://url
- لینک https، پروتکل:
https
، فرمت:https://url
محدودیت ها
وضوح پویای @Option در حال حاضر تنها از تعداد محدودی از پروتکلها و مکانها برای دانلود پشتیبانی میکند. وضوح @Option در حال حاضر فقط برای پیکربندی اصلی XML Tradefed فعال است.
اگر بهصورت مجموعه اجرا شود، ماژولهای فعلی ( AndroidTest.xml
) فایلها را بهطور پیشفرض حل نمیکنند. این به معنای جلوگیری از ایجاد برخی وابستگی های ناشناخته توسط ماژول ها است . با استفاده از --enable-module-dynamic-download
در سطح مجموعه می توان از این امر جلوگیری کرد، اما مجموعه های اصلی مانند Compatibility Test Suite (CTS) و Vendor Test Suite (VTS) آن را فعال نمی کنند.
یک پروتکل جدید پیاده سازی کنید
پروتکلهایی که پشتیبانی میشوند دارای پیادهسازی در Tradefed از رابط IRemoteFileResolver هستند، که تگ کوتاه پروتکل را تعریف میکند که در مسیر فایل از طریق getSupportedProtocol
مطابقت داده میشود. به عنوان مثال، gs
برای پروتکل Google Cloud Storage استفاده می شود. رابط پیشنهادی برای پیاده سازی #resolveRemoteFiles(RemoteFileResolverArgs)
است که رابط نگهداری طولانی مدت خواهد بود.
پروتکل های پیاده سازی شده را می توان به فایل خدمات META-INF هارنس اضافه کرد تا پشتیبانی به طور رسمی فعال شود.