Atest هي أداة سطر أوامر تتيح للمستخدمين إنشاء اختبارات Android وتثبيتها وتشغيلها على الجهاز، ما يسرع بشكل كبير من إعادة تشغيل الاختبارات بدون الحاجة إلى معرفة خيارات سطر أوامر مجموعة أدوات اختبار Trade Federation. توضّح هذه الصفحة كيفية استخدام Atest لإجراء اختبارات Android.
للحصول على معلومات عامة عن كتابة اختبارات لنظام التشغيل Android، يُرجى الاطّلاع على مقالة اختبار نظام التشغيل Android.
للحصول على معلومات عن البنية العامة لخدمة Atest، يُرجى الرجوع إلى دليل مطوّري Atest.
للحصول على معلومات عن إجراء الاختبارات في ملفات TEST_MAPPING من خلال Atest، يُرجى الاطّلاع على مقالة إجراء الاختبارات في ملفات TEST_MAPPING.
لإضافة ميزة إلى Atest، اتّبِع خطوات عملية عمل مطوّري Atest.
إعداد البيئة
لإعداد بيئة Atest، اتّبِع التعليمات الواردة في إعداد البيئة واختيار هدف وإنشاء الرمز.
الاستخدام الأساسي
تأخذ أوامر Atest الشكل التالي:
atest test-to-run [optional-arguments ]
الوسيطات الاختيارية
يسرد الجدول التالي الوسيطات الأكثر استخدامًا. يمكنك الاطّلاع على القائمة الكاملة
من خلال atest --help
.
Option | خيار طويل | الوصف |
---|---|---|
-b |
--build |
تُنشئ استهدافات اختبارية. (تلقائي) |
-i |
--install |
تثبيت عناصر الاختبار (ملفات APK) على الجهاز (تلقائي) |
-t |
--test |
يُجري الاختبارات. (تلقائي) |
-s |
--serial |
يُجري الاختبارات على الجهاز المحدّد. يمكن اختبار جهاز واحد في كل مرة. |
-d |
--disable-teardown |
إيقاف إزالة الاختبار وتنظيفه |
|
--dry-run |
يمكنك إجراء عمليات تجريبيّة في Atest بدون إنشاء الاختبارات أو تثبيتها أو إجرائها. |
-m |
--rebuild-module-info |
يفرض إعادة إنشاء ملف module-info.json . |
-w |
--wait-for-debugger |
ينتظر انتهاء برنامج تصحيح الأخطاء قبل التنفيذ. |
-v |
--verbose |
تعرِض هذه القيمة التسجيل على مستوى تصحيح الأخطاء. |
|
--iterations |
تُجري حلقة الاختبار الاختبارات إلى أن يتم الوصول إلى الحد الأقصى من التكرار. (10 تلقائيًا) |
|
--rerun-until-failure [COUNT=10] |
إعادة تشغيل جميع الاختبارات إلى أن يحدث تعذّر أو يتمّ الوصول إلى الحدّ الأقصى من التكرارات (10 تلقائيًا) |
|
--retry-any-failure [COUNT=10] |
إعادة تشغيل الاختبارات غير الناجحة إلى أن يتم اجتيازها أو الوصول إلى الحد الأقصى من التكرار (10 تلقائيًا) |
|
--start-avd |
يتم إنشاء جهاز افتراضي Android تلقائيًا وإجراء الاختبارات على الجهاز الافتراضي. |
|
--acloud-create |
لإنشاء جهاز افتراضي Android باستخدام الأمر acloud . |
|
--[CUSTOM_ARGS] |
تُحدِّد وسيطات مخصّصة لمشغّلي الاختبارات. |
-a |
--all-abi |
يُجري الاختبارات لجميع تصاميم الأجهزة المتاحة. |
|
--host |
يُجري الاختبار بالكامل على المضيف بدون جهاز. ملاحظة: سيتعذّر إجراء اختبار مضيف يتطلّب جهازًا مزوّدًا بنظام التشغيل --host . |
|
--history |
تعرِض نتائج الاختبار بترتيب زمني. |
|
--latest-result |
لطباعة آخر نتيجة اختبار. |
لمزيد من المعلومات عن -b
و-i
و-t
، يُرجى الاطّلاع على القسم
تحديد الخطوات: الإنشاء أو التثبيت أو التشغيل.
تحديد الاختبارات
لإجراء الاختبارات، حدِّد اختبارًا واحدًا أو أكثر باستخدام أحد العلامات التالية:
- اسم الوحدة
- الوحدة:الفئة
- اسم الصف
- اختبار دمج Tradefed
- مسار الملف
- اسم الحزمة
يجب الفصل بين الإشارات إلى اختبارات متعددة باستخدام مسافات، على النحو التالي:
atest test-identifier-1 test-identifier-2
اسم الوحدة
لتنفيذ وحدة اختبار كاملة، استخدِم اسم الوحدة. أدخِل الاسم كما يظهر
في متغيّري LOCAL_MODULE
أو LOCAL_PACKAGE_NAME
في ملف
Android.mk
أو Android.bp
الخاص بهذا الاختبار.
أمثلة:
atest FrameworksServicesTests
atest CtsVideoTestCases
الوحدة:الفئة
لتشغيل صف واحد ضمن وحدة، استخدِم الوحدة:الصف. الوحدة هي
نفسها كما هو موضّح في اسم الوحدة. الفئة هي اسم
فئة الاختبار في ملف .java
، ويمكن أن يكون اسم الفئة المؤهَّلة بالكامل أو اسم
الأساسي.
أمثلة:
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
اسم الصف
لتشغيل فئة واحدة بدون ذكر اسم وحدة بشكل صريح، استخدِم اسم الفئة.
أمثلة:
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
اختبار دمج Tradefed
لإجراء الاختبارات المدمجة مباشرةً في TradeFed (غير الوحدات)، أدخِل
الاسم كما يظهر في ناتج الأمر tradefed.sh list configs
. على سبيل المثال:
لإجراء اختبار
reboot.xml
:
atest example/reboot
لإجراء اختبار
native-benchmark.xml
:
atest native-benchmark
مسار الملف
تتيح أداة Atest إجراء كلّ من الاختبارات المستندة إلى الوحدات والاختبارات المستندة إلى الدمج من خلال إدخال مسار ملف الاختبار أو الدليل الخاص بهما حسب الاقتضاء. ويتيح أيضًا تشغيل فئة واحدة من خلال تحديد مسار ملف Java الخاص بالفئة. يمكن استخدام المسارات النسبية والمطلقة.
تشغيل وحدة
توضِّح الأمثلة التالية طريقتَين لتشغيل وحدة CtsVideoTestCases
باستخدام
مسار ملف.
التشغيل من Android repo-root
:
atest cts/tests/video
التشغيل من Android repo-root/cts/tests/video
:
atest .
تشغيل فئة اختبارية
يوضِّح المثال التالي كيفية تشغيل فئة معيّنة ضمن وحدة
CtsVideoTestCases
باستخدام مسار ملف.
من جهاز Android repo-root
:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
إجراء اختبار دمج
يوضّح المثال التالي كيفية إجراء اختبار دمج باستخدام مسار ملف
من Android repo-root
:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
اسم الحزمة
تتيح أداة Atest البحث عن الاختبارات حسب اسم الحزمة.
أمثلة:
atest com.android.server.wm
atest com.android.uibench.janktests
تحديد الخطوات: الإنشاء أو التثبيت أو التشغيل
استخدِم الخيارات -b
و-i
و-t
لتحديد الخطوات التي تريد تنفيذها. إذا
لم تحدّد خيارًا، سيتم تنفيذ جميع الخطوات.
- أهداف الإنشاء فقط:
atest -b test-to-run
- إجراء الاختبارات فقط:
atest -t test-to-run
- تثبيت حزمة APK وإجراء الاختبارات:
atest -it test-to-run
- إنشاء التطبيق وتشغيله بدون تثبيته:
atest -bt test-to-run
يمكن أن يفرض Atest على الاختبار تخطّي خطوة التنظيف أو الإزالة. تُجري العديد من الاختبارات، مثل
CTS، عملية تنظيف للجهاز بعد إجراء الاختبار، لذا ستتعذّر محاولة إعادة إجراء الاختبار
باستخدام -t
بدون المَعلمة --disable-teardown
. استخدِم -d
قبل
-t
لتخطّي خطوة تنظيف الاختبار وإجراء الاختبار بشكلٍ متكرّر.
atest -d
test-to-run atest -t
test-to-run
تنفيذ طُرق معيّنة
يتيح Atest تنفيذ طرق معيّنة ضمن فئة اختبار. على الرغم من أنّه يجب إنشاء الوحدت الكاملة، إلا أنّ ذلك يقلل من الوقت اللازم لإجراء الاختبارات. لتنفيذ methods معيّنة، حدِّد الصف باستخدام أيّ من الطرق المتوافقة لتحديد الصف (Module:Class، ومسار الملف، وما إلى ذلك) وأضِف اسم method:
atest reference-to-class #method1
عند تحديد طُرق متعدّدة، افصل بينها باستخدام فواصل:
atest reference-to-class #method1 ,method2 ,method3
أمثلة:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
يوضّح المثالان التاليان الطرق المفضّلة لتشغيل طريقة واحدة،
testFlagChange
. يُفضَّل استخدام هذه الأمثلة بدلاً من استخدام اسم الفئة فقط،
لأنّ تحديد الوحدة أو موقع ملف Java يسمح لأداة Atest بالعثور على
الاختبار بسرعة أكبر بكثير.
باستخدام Module:Class:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
من جهاز Android repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
يمكن تنفيذ طرق متعدّدة من فئات ووحدات مختلفة:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
تنفيذ فئات متعددة
لتنفيذ فئات متعددة، افصل بينها بمسافات بالطريقة نفسها التي تُستخدَم لتنفيذ اختبارات متعددة. ينشئ Atest الفصول الدراسية ويشغّلها بكفاءة، لذا فإنّ تحديد مجموعة فرعية من الفصول الدراسية في وحدة معيّنة يُحسِّن الأداء مقارنةً بتشغيل الوحدة بأكملها.
لتشغيل صفَّين في الوحدة نفسها:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
لتنفيذ صفَّين دراسيَّين في وحدات مختلفة:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
تشغيل ملفات GTest الثنائية
يمكن لأداة Atest تشغيل ملفات GTest الثنائية. استخدِم -a
لإجراء هذه الاختبارات لجميع تصاميم الأجهزة المتاحة، والتي هي في هذا المثال armeabi-v7a
(ARM 32 بت) وarm64-v8a
(ARM 64 بت).
مثال على اختبار الإدخال:
atest -a libinput_tests inputflinger_tests
لاختيار ملف GTest ثنائي معيّن لتشغيله، استخدِم فاصلة منقوطة (:) لتحديد اسم الاختبار وعلامة الهاشتاغ (#) لتحديد طريقة فردية بشكل أكبر.
على سبيل المثال، بالنسبة إلى تعريف الاختبار التالي:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
لتنفيذ ما يلي لتحديد الاختبار بالكامل:
atest inputflinger_tests:InputDispatcherTest
أو يمكنك إجراء اختبار فردي باستخدام ما يلي:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
إجراء الاختبارات في TEST_MAPPING
يمكن أن يُجري Atest اختبارات في ملفات TEST_MAPPING
.
تشغيل اختبارات الفحص المُسبَق بشكل ضمني
يمكنك إجراء اختبارات ما قبل الإرسال في ملفات TEST_MAPPING
في الدليل الحالي والدليل الرئيسي:
atest
يمكنك إجراء اختبارات الفحص قبل الإرسال في ملفات TEST_MAPPING
في /path/to/project و
أدلّتها الرئيسية:
atest --test-mapping /path/to/project
تنفيذ مجموعة اختبار محدّدة
مجموعات الاختبار المتاحة هي: presubmit
(التلقائية) وpostsubmit
mainline-presubmit
وall
.
يمكنك إجراء اختبارات ما بعد الإرسال في ملفات TEST_MAPPING في الدليلَين الحالي والرئيسي:
atest :postsubmit
يمكنك إجراء اختبارات من جميع المجموعات في ملفات TEST_MAPPING:
atest :all
يمكنك إجراء اختبارات ما بعد الإرسال في ملفات TEST_MAPPING في /path/to/project و المجلدات الرئيسية:
atest --test-mapping /path/to/project :postsubmit
يمكنك إجراء اختبارات الخطوط الرئيسية في ملفات TEST_MAPPING في /path/to/project والمجلدات الرئيسية:
atest --test-mapping /path/to/project :mainline-presubmit
إجراء الاختبارات في الأدلة الفرعية
بشكلٍ تلقائي، لا يبحث Atest عن الاختبارات إلا في ملفات TEST_MAPPING وما فوق (من
الدليل الحالي أو الدليل المحدّد إلى الأدلة الرئيسية). إذا أردت أيضًا
إجراء اختبارات في ملفات TEST_MAPPING في الأدلة الفرعية، استخدِم --include-subdirs
لفرض أن تتضمّن أداة Atest هذه الاختبارات أيضًا:
atest --include-subdirs /path/to/project
إجراء الاختبارات في كلّ تكرار
يمكنك إجراء الاختبارات في التكرار من خلال تمرير الوسيطة --iterations
. سواء اجتاز الاختبار
أو تعذّر إجراؤه، سيكرّر Atest الاختبار إلى أن يتمّ الوصول إلى الحدّ الأقصى من التكرارات.
أمثلة:
بشكلٍ تلقائي، يتم تكرار Atest 10 مرات. يجب أن يكون عدد التكرارات عددًا صحيحًا موجبًا.
atest
test-to-run --iterationsatest
test-to-run --iterations 5
تسهِّل الأساليب التالية رصد الاختبارات غير الموثوق بها:
الطريقة 1: تنفيذ جميع الاختبارات إلى أن يحدث تعذّر أو يتمّ الوصول إلى الحدّ الأقصى من التكرارات
- يمكنك إيقاف العملية عند حدوث خطأ أو عند بلوغ الجولة العاشرة (تلقائيًا).
atest
test-to-run --rerun-until-failure - توقّف عند حدوث خطأ أو وصول التكرار إلى الجولة المائة.
atest
test-to-run --rerun-until-failure 100
الطريقة 2: تنفيذ الاختبارات غير الناجحة فقط إلى أن يتم اجتيازها أو الوصول إلى الحد الأقصى من التكرار
- لنفترض أنّ
test-to-run
يتضمّن حالات اختبار متعددة ويتعذّر إكمال أحد الاختبارات. يمكنك تنفيذ الاختبار الذي تعذّر إكماله 10 مرات فقط (تلقائيًا) أو إلى أن يتم اجتياز الاختبار.atest
test-to-run --retry-any-failure - أوقِف تشغيل الاختبار غير الناجح عند اجتيازه الجولة المائة أو بلوغها.
atest
test-to-run --retry-any-failure 100
إجراء اختبارات على أجهزة افتراضية Android
يمكن لأداة Atest إجراء اختبارات على جهاز افتراضي Android تم إنشاؤه حديثًا. شغِّل acloud create
لإنشاء
جهاز افتراضي Android وإنشاء عناصر، ثم استخدِم الأمثلة التالية لإجراء اختباراتك.
ابدأ جهاز Android الظاهري ونفِّذ الاختبارات عليه:
acloud create --local-instance --local-image && atest test-to-run
بدء جهاز افتراضي Android كجزء من عملية تشغيل اختبارية:
atest test-to-run --acloud-create "--local-instance --local-image"
لمزيد من المعلومات، يمكنك تنفيذ acloud create --help
.
تمرير الخيارات إلى الوحدة
يمكن لـ Atest تمرير الخيارات إلى وحدات الاختبار. لإضافة خيارات سطر أوامر TradeFed إلى عملية الاختبار، استخدِم البنية التالية وتأكَّد من أنّ المَعلمات المخصّصة تتّبع تنسيق خيارات سطر أوامر TradeFed.
atest test-to-run -- [CUSTOM_ARGS]
نقْل خيارات وحدة الاختبار إلى الجهات المعنيّة بإعداد الاختبار أو تشغيله والمُحدَّدة فيملف إعدادات الاختبار:
atest
test-to-run -- --module-arg module-name:option-name:option-valueatest
GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
نقْل الخيارات إلى نوع أو فئة عداء:
atest
test-to-run -- --test-arg test-class:option-name:option-valueatest
CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
لمزيد من المعلومات عن خيارات الاختبار فقط، يُرجى الاطّلاع على مقالة تمرير الخيارات إلى الوحدات.