أوامر واجهة أوامر الجهاز

أثناء اختبار 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.

الشكل 1. برنامج تشغيل واجهة VTS

ويتوافق إطار عمل 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')