معالجة الخيارات في Tradefed

تُعدّ معالجة الخيارات من أهم العناصر في نهج Trade Federation المُركّب. وعلى وجه التحديد، تشكل الخيارات آلية يمكن من خلالها للمطوّر والمُدمِج ومسؤول اختبار التطبيقات العمل معًا بدون تكرار عمل بعضهم. ببساطة، يتيح لنا تنفيذنا لمعالجة الخيارات للمبرمج وضع علامة على عنصر فئة Java على أنّه قابل للضبط، وعند هذه النقطة يمكن لمُدمِج الاختبار تعديل قيمة هذا العنصر أو إلغاء تحديدها، ويمكن بعد ذلك لمُشغِّل الاختبار تعديلها أو إلغاء تحديدها. تعمل هذه الآلية مع جميع أنواع Java الأساسية، بالإضافة إلى أيّ مثيل Map أو Collection من الأنواع الأساسية.

ملاحظة: لا تعمل آلية معالجة الخيارات إلا مع الصفوف التي تطبّق إحدى الواجهات المضمّنة في رحلة الاختبار، وذلك فقط عندما يتم إنشاء مثيل لهذه الصفّة من خلال آلية رحلة الاختبار.

مطور التطبيق

في البداية، يضع المطوّر علامة "عضو" على أحد المشتركين باستخدام التعليق التوضيحي @Option. تحدّد هذه القيم (على الأقل) قيمتَي name وdescription، اللتين تحددَان اسم الوسيطة المرتبط بهذا الخيار والوصف الذي يظهر علىconsole‏ (وحدة تحكّم) TF عند تنفيذ الأمر باستخدام --help أو --help-all.

على سبيل المثال، لنفترض أنّنا نريد إنشاء اختبار هاتفي وظيفي يتصل بعدة أرقام هواتف، ويتوقع تلقّي تسلسل من نغمات DTMF من كل رقم بعد الاتصال به.

public class PhoneCallFuncTest extends IRemoteTest {
    @Option(name = "timeout", description = "How long to wait for connection, in millis")
    private long mWaitTime = 30 * 1000;  // 30 seconds

    @Option(name = "call", description = "Key: Phone number to attempt. " +
            "Value: DTMF to expect. May be repeated.")
    private Map<String, String> mCalls = new HashMap<String, String>;

    public PhoneCallFuncTest() {
        mCalls.add("123-456-7890", "01134");  // default
    }

هذا كل ما يحتاج إليه المطوِّر لإعداد نقطتَي ضبط لهذا الاختبار. ويمكنهم بعد ذلك استخدام mWaitTime وmCalls كالمعتاد، بدون التركيز كثيرًا على إمكانية ضبطهما. وبما أنّه يتم ضبط حقول @Option بعد إنشاء مثيل للصفّة، ولكن قبل استدعاء أسلوب run، يقدّم ذلك طريقة سهلة للمنفّذين لإعداد الإعدادات التلقائية لمحاولة أو إجراء نوع من الفلترة على حقلَي Map وCollection، اللذَين يتم إضافتهما فقط في حال عدم توفّر قيمة.

الشركة المتعهّدة

يعمل "المُدمِج" في عالم الإعدادات المكتوبة بتنسيق XML. يتيح تنسيق الضبط لمُدمِج المحتوى ضبط (أو إلحاق) قيمة لأي حقل @Option. على سبيل المثال، لنفترض أنّ المُدمِج أراد تحديد اختبار يستغرق وقت استجابة أقل ويتصل بالرقم التلقائي، بالإضافة إلى اختبار يستغرق وقتًا طويلاً ويتصل بعدد من الأرقام. يمكنه إنشاء زوج من الإعدادات التي قد تبدو على النحو التالي:

<?xml version="1.0" encoding="utf-8"?>
<configuration description="low-latency default test; low-latency.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="timeout" value="5000" />
    </test>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration description="call a bunch of numbers; many-numbers.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" />
        <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" />
        <!-- ... -->
    </test>
</configuration>

مشغّل الاختبار

يمكن لـ "أداة تنفيذ الاختبار" أيضًا الوصول إلى نقاط الضبط هذه من خلال وحدة تحكّم Trade Federation. أولاً وقبل كل شيء، يتم تنفيذ أمر (أي ملفّ إعدادات وجميع وسيطاته) باستخدام التعليمات run command <name> (أو run <name> اختصارًا). بالإضافة إلى ذلك، يمكنهم تحديد أي قائمة من الوسيطات التي تشكّل جزءًا من الأمر، والتي يمكن أن تستبدل الحقول التي تحدّدها عناصر دورة الحياة أو تتم إضافتها إليها ضمن كلّ إعداد.

لإجراء اختبار وقت الاستجابة المنخفض باستخدام many-numbers رقم هاتف، يمكن لـ "أداة تنفيذ الاختبارات" تنفيذ ما يلي:

tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#

أو للحصول على تأثير مماثل من الاتجاه المقابل، يمكن لـ "أداة تشغيل الاختبارات" تقليل وقت الانتظار لاختبار many-numbers:

tf> run many-numbers.xml --timeout 5000

ترتيب الخيارات

قد تلاحظ أنّ التنفيذ الأساسي لخيار call هو Map ، لذا عند تكرار --call على سطر الأوامر، يتم تخزينها كلها.

لا يمكن تخزين سوى قيمة واحدة في الخيار timeout الذي يستخدم long في التنفيذ الأساسي. وبالتالي، يتم تخزين القيمة الأخيرة المحدّدة فقط. --timeout 5 --timeout 10 تؤدي إلى timeout يحتوي على 10.

في حال استخدام List أو Collection كتنفيذ أساسي، يتم تخزين جميع القيم بالترتيب المحدّد في سطر الأوامر.

الخيارات المنطقية

يمكن ضبط خيارات النوع الأساسي المنطقي على true من خلال تمرير اسم الخيار مباشرةً، على سبيل المثال، --[option-name]، ويمكن ضبطه على false باستخدام بناء الجملة --no-[option-name].

انظر أيضًا

تمرير الخيارات إلى الحزمة وال وحداتها