لفهم هذا القسم، عليك أولاً دراسة Tradefed @Option.
تتيح الخيارات النموذجية في Tradefed لفئات الاختبار تلقّي معلومات إضافية من إعدادات XML أو سطر الأوامر. تتيح لك هذه الميزة اتخاذ خطوة إضافية وحلّ بعض هذه المعلومات الإضافية إذا كان ذلك ضروريًا.
مثال على خيار الملف
مثال على ملف @option:
@Option(name = 'config-file')
private File mConfigFile;
يمكن ضبط ما سبق من خلال إعدادات XML:
<option name="config-file" value="/tmp/file" />
أو من خلال الأمر:
--config-file /tmp/file
الوصف
تتيح لك هذه الميزة تحويل ملفات @Options من النوع File التي تكون عن بُعد إلىملف محلي لتكون متاحة بسلاسة من وجهة نظر المستخدم.
لكي يعمل هذا الإجراء، يجب تحديد الملف باستخدام مسار نمط عن بُعد. على سبيل المثال:
--config-file gs://bucket/tmp/file
يشير هذا المسار إلى ملف داخل حزمة Google Cloud Storage (GCS) حيث يتم تخزينه. عند استبدال الملف عند رؤية هذا المسار البعيد،
ستحاول تنزيل الملف محليًا وتعيينه على @Option. وينتج عن ذلك تغيير mConfigFile
بحيث يشير الآن إلى الإصدار المحلي من الملف الذي يمكن استخدامه من خلال الاختبار.
إذا تعذّر تنزيل الملف البعيد لأي سبب، سيُرسِل Tradefed خطأ
ConfigurationException
سيمنع تنفيذ الاختبار. نعتبر أن فقد هذه الملفات بمثابة فشل فادح لأن بعض عناصر الاختبار
ستكون مفقودة.
استخدام مَعلمات طلب البحث
يمكن إضافة مَعلمات طلب البحث إلى عنوان URL باستخدام ?
. على سبيل المثال،
gs://bucket/path?unzip=true
. سيتوفّر المفتاح/القيمة unzip=true
في تنفيذ
واجهة IRemoteFileResolver.
يتوفّر سلوكان مضمّنان:
- فك الضغط: إذا تم الضبط على
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
تنفيذ بروتوكول جديد
تحتوي البروتوكولات المتوافقة على تنفيذ في Tradefed لواجهة
IRemoteFileAnswerr
التي تحدّد العلامة القصيرة للبروتوكول التي ستتم مطابقتها في
مسار الملف من خلال getSupportedProtocol
. على سبيل المثال، يتم استخدام gs
لملف تعريف
بروتوكول Google Cloud Storage. الواجهة المقترَحة للتنفيذ هي
#resolveRemoteFiles(RemoteFileResolverArgs)
، وستكون الواجهة التي تتم
صياغها على المدى الطويل.
يمكن إضافة البروتوكولات التي تم تنفيذها إلى ملف الحِزمة META-INF services لتفعيل الميزة رسميًا.