تُعدّ معالجة الخيارات من أهم العناصر في نهج 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.
أولاً وقبل كل شيء، يشغّل أمرًا (أي config وجميع وسيطاته) مع
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]
.