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