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