لفهم هذا القسم، عليك أولاً دراسة 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) التي يتم تخزينه فيها. عند رؤية هذا المسار البعيد، سيحاول 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
التي ستُمرِّر المفتاح/القيمة إلى جميع عمليات التنزيل الديناميكية التي تمّت محاولة تنفيذها في
invocation.
البروتوكولات المتوافقة
في ما يلي البروتوكولات المتوافقة رسميًا والتنسيقات المقابلة لها:
- 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
الخروج من هذا الرمز باستخدام --enable-module-dynamic-download
على مستوى المجموعة،
ولكن لن يتم تفعيله في المجموعات الرئيسية، مثل مجموعة أدوات اختبار التوافق
(CTS) ومجموعة أدوات اختبار المورّدين
(VTS).
تنفيذ بروتوكول جديد
إنّ البروتوكولات المتوافقة لها تنفيذ في Tradefed لسمة
IRemoteFileResolver
، التي تحدّد العلامة المختصرة للبروتوكول الذي سيتم مطابقته في
مسار الملف من خلال getSupportedProtocol
. على سبيل المثال، يتم استخدام gs
لملف تعريف
بروتوكول Google Cloud Storage. الواجهة المقترَحة للتنفيذ هي
#resolveRemoteFiles(RemoteFileResolverArgs)
، وستكون الواجهة التي تتم
صياغها على المدى الطويل.
يمكن إضافة البروتوكولات التي تم تنفيذها إلى ملف الحِزمة META-INF services لتفعيل الميزة رسميًا.