تُعدّ معالجة الخيارات من أهم العناصر في نهج 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]
.