أثناء اختبار VTS، يتم استخدام أوامر واجهة الأوامر لتنفيذ اختبار من جهة الهدف
النظام الثنائي، للحصول على أو تعيين الخصائص ومتغيرات البيئة ومعلومات النظام،
وبدء أو إيقاف إطار عمل Android. يمكنك تنفيذ واجهة هيكل الجهاز VTS.
باستخدام الأمر adb shell
أو برنامج تشغيل VTS Shell
يعمل على الجهاز (يُنصح به).
استخدام ADB Shell
الاختبارات التي تتطلب إيقاف منفذ USB أو إعادة تشغيل الجهاز أثناء
في الاختبار استخدام هيكل ADB لأن برنامج تشغيل واجهة VTS غير متاح بدون
اتصال USB دائم. يمكنك استدعاء ADB Shell من
AndroidDevice
في النص البرمجي لاختبار Python. أمثلة:
- الحصول على كائن جهاز Android:
self.device = self.android_devices[0]
- أصدر أمرًا واحدًا في Shell:
result = self.device.adb.shell(‘ls')
استخدام برنامج تشغيل هيكل VTS
برنامج تشغيل واجهة VTS هو برنامج ثنائي للوكيل يتم تشغيله على الجهاز وتنفيذه
أوامر واجهة الأوامر. بشكل افتراضي، يستخدم VTS برنامج تشغيل الغلاف إذا كان برنامج التشغيل قيد التشغيل
على الجهاز لأنّ هذه الطريقة لها وقت استجابة أقل من استخدام الأمر adb
shell
.
ويتوافق إطار عمل VTS مع إمكانية إجراء اختبارات على أجهزة متعدّدة، حيث يمكن لجميع أجهزة Android. يتم تمثيله ككائن AndroidDevice في الجزء الأساسي من الجري. تكون ميزة VTS تلقائيًا يضع وكيل VTS وبرنامج تشغيل برنامج تشغيل VTS في كل جهاز Android وينشئ اتصالات TCP لوكلاء VTS على هذه الأجهزة.
لتنفيذ أمر Shell، يُنشئ نص بايثون من جانب المضيف دالة استدعاء كائن ShellMirror داخل كائن AndroidDevice. مرآة الصدفة يحزم الكائن نصوص أوامر الأوامر في Protobuf ويرسلها (عبر قناة TCP) إلى وكيل VTS على نظام Android. الخاص بك. بعد ذلك، يعيد الوكيل الذي يعمل على الجهاز توجيه أمر Shell إلى VTS shell. برنامج التشغيل عبر مقبس Unix.
عندما يتلقى برنامج تشغيل واجهة VTS أمر واجهة مستخدم التشعبية، فإنه ينفذ الأمر
عبر nohup على
هيكل الجهاز لمنع التعليق. ثم يتم استخدام رمز Stdout وstderr ورمز الإرجاع
تم استردادها من nohup
وإرجاعها إلى وكيل VTS. أخيرًا، يستخدم الوكيل
على المضيف من خلال إحاطة نتيجة(نتائج) الأوامر في
رسالة واحدة (protobuf
).
الإيجابيات
تشمل مزايا استخدام برنامج تشغيل VTS بدلًا من adb
shell
ما يلي:
- الموثوقية: يستخدم برنامج تشغيل هيكل VTS
nohup
لتنفيذ الأوامر في الإعدادات التلقائية. نظرًا لإجراء اختبارات VTS اختبارات HAL وkernel ذات مستوى أقل في الغالب، ويضمنnohup
واجهة الأوامر عدم تعليق الأوامر أثناء التنفيذ. - الأداء: في حين أن الأمر
adb shell
ويخزن بعض النتائج في ذاكرة التخزين المؤقت (مثل سرد الملفات في دليل) لديه اتصال النفقات العامة عند تنفيذ مهام مثل تنفيذ برنامج ثنائي تجريبي. برنامج تشغيل هيكل VTS تحافظ على اتصال نشط أثناء الاختبار بحيث تكون النفقات العامة الوحيدة هي USB التواصل. في الاختبارات التي أجريناها، كان استخدام برنامج تشغيل VTS Shell لتنفيذ أمر باستخدام 100 طلب إلى برنامج ثنائي gtest فارغ أسرع بنحو 20 بالمائة من استخدامadb shell
؛ يكون الفرق الفعلي أكبر منذ ذلك الحين الاتصال التي تحتوي على تسجيل مكثف. - الحفاظ على الحالة: يحتفظ برنامج تشغيل هيكل VTS بوحدة طرفية لكل اسم محطة (اسم الوحدة الطرفية الافتراضي هو تلقائي). متغيرات البيئة المعينة في جلسة طرفية واحدة هي متاحة فقط للأوامر اللاحقة في نفس الجلسة.
- قابلة للتمديد: اتصالات أوامر Shell بين VTS وإطار العمل وبرنامج تشغيل الجهاز في Protobuf لتمكين العملاء والضغط عن بُعد والتشفير وما إلى ذلك في المستقبل. هناك احتمالات أخرى تتوفر أيضًا إمكانية تحسين الأداء، بما في ذلك تحليل النتائج من جانب الجهاز عندما تصبح النفقات العامة للاتصال أكبر من تحليل سلسلة النتائج.
العيوب
تشمل عيوب استخدام برنامج تشغيل VTS بدلًا من adb
shell
ما يلي:
- برامج ثنائية إضافية. يجب إرسال ملفات وكيل VTS إلى الجهاز بالكامل بعد تنفيذ الاختبار.
- يتطلب ذلك اتصالاً نشطًا. إذا كان اتصال TCP بين
فقدان المضيف والوكيل أثناء الاختبار (بسبب فصل USB أو إيقاف المنفذ
أو تعطُّل الجهاز وما إلى ذلك) إما عن قصد أو عن غير قصد، عندما
لا يمكن إرسالهما إلى وكيل VTS. حتى مع التبديل التلقائي إلى
adb shell
، نتيجة الأمر وحالته قبل قطع الاتصال غير معروفة.
أمثلة
أمثلة على استخدام أوامر واجهة الأوامر في نص برمجي اختبار Python من جهة المضيف لـ VTS:
- الحصول على كائن جهاز Android:
self.device = self.android_devices[0]
- الحصول على كائن واجهة المستخدم للجهاز المحدّد:
self.shell = self.device.shell
- أصدر أمرًا واحدًا في Shell:
results = self.shell.Execute(‘ls')
- إصدار قائمة بأوامر واجهة الأوامر:
results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
كائن نتيجة Command
كائن الإرجاع من تنفيذ أمر Shell هو قاموس يحتوي على
المفاتيح stdouts
وstderrs
وreturn_codes
.
بغض النظر عما إذا كان يتم تقديم أمر Shell كسلسلة واحدة أو كقائمة
سلاسل الأوامر، فإن كل قيمة في قاموس النتيجة تكون دائمًا قائمة.
للتحقق من رمز إرجاع قائمة من الأوامر، يجب أن يتحقق النص البرمجي للاختبار المؤشرات. مثال:
asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')
وبدلاً من ذلك، يمكن للنص البرمجي التحقّق من كل فهرس أوامر على حدة. مثال:
asserts.assertEqual(results[‘return_codes'][0], 0, ‘first command failed')
asserts.assertEqual(results[‘return_codes'][1], 0, ‘second command failed')