التعامل مع الخيارات في قائمة متداولة

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

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

مطور التطبيق

للبدء، يضع المطوّر علامة على العضو باستخدام تعليق توضيحي واحد (@Option) فهي تحدد (على الأقل) قيمتي name وdescription، وهما تحديد اسم الوسيطة المرتبط بهذا الخيار، والوصف الذي سيتم عرضه على وحدة تحكُّم 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>

عدّاء اختبار

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

لإجراء اختبار وقت الاستجابة السريع باستخدام رقمَي هاتف (many-numbers)، يجب أولاً تشغيل Test Runner. تنفيذها:

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].

راجِع أيضًا

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