تداول الخيار في Tradefed

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

مطور

للبدء ، يضع المطور علامة على العضو @Option التوضيحي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 بتعيين (أو إلحاق) قيمة لأي حقل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>

عداء اختبار

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

لإجراء اختبار زمن الوصول البطيء باستخدام أرقام الهواتف 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] .

أنظر أيضا

خيارات تمرير إلى الجناح والوحدات النمطية