توضِّح هذه الصفحة كيفية كتابة اختبار من جهة المضيف لا يتطلّب جهازًا، مثل اختبار يتم تشغيله على آلة افتراضية على Linux في Google Compute Engine. (لمعرفة تفاصيل حول كتابة اختبار من جهة المضيف يتطلّب جهازًا، يُرجى الرجوع إلى مقالة كتابة اختبار من جهة المضيف في Trade Federation.)
أنواع الاختبارات من جهة المضيف
يمكنك تشغيل عدة أنواع من الاختبارات من جهة المضيف من خلال Trade Federation (TF).
الاختبارات الأصلية (gtest)
يمكنك إنشاء اختبارات أصلية (gtests) لاختبار منصة. إذا لم يكن الاختبار يتطلّب جهازًا، يمكنك تشغيله على مضيف، ما يجعله أسرع بكثير. لضبط هذه الاختبارات لتشغيلها على مضيف اختبار، استخدِم أداة تشغيل TF HostGTest.
في ما يلي نموذج لإعداد اختبار TradeFed:
<configuration description="Runs hello_world_test."> <option name="null-device" value="true" /> <test class="com.android.tradefed.testtype.HostGTest" > <option name="module-name" value="hello_world_test" /> </test> </configuration>
يشغّل إعداد الاختبار اختبار gtest (hello_world_test) على مضيف. يمكن إنشاء إعداد الاختبار النموذجي تلقائيًا. ما لم يكن الاختبار بحاجة إلى إعداد أو تنظيف خاص، يمكنك الاعتماد على إنشاء إعداد الاختبار تلقائيًا لإنشاء إعدادات اختبار TF مناسبة.
لضبط اختبار gtest من جهة المضيف وتفعيل إنشاء إعداد الاختبار تلقائيًا، اضبط
host_supported على true في
Android.bp، كما في hello_world_test.
لمزيد من المعلومات حول كتابة اختبار أصلي، يُرجى الاطّلاع على مقالة إضافة مثال على اختبار أصلي جديد.
اختبارات المضيف JAR
اختبارات المضيف JAR (Java)، مثل JUnit، هي اختبارات لا تحتاج إلى التشغيل على جهاز، وتوفّر تغطية الرمز البرمجي لمشروع Java. يمكن ضبط هذه الاختبارات لتشغيلها على مضيف اختبار باستخدام أداة التشغيل HostTest.
نموذج لإعداد اختبار TradeFed
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
يشغّل إعداد الاختبار اختبار JUnit من جهة المضيف لـ HelloWorldHostTest. يُرجى العِلم أنّه يمكن إنشاء إعداد الاختبار أعلاه تلقائيًا. ما لم يكن الاختبار بحاجة إلى إعداد أو تنظيف خاص، يمكنك الاعتماد على إنشاء إعداد الاختبار تلقائيًا لإنشاء إعداد اختبار TradeFed مناسب.
لمزيد من التفاصيل حول كيفية كتابة اختبار مضيف JAR، يُرجى الرجوع إلى الـ JAR (Java) Host Tests صفحة.
اختبارات المضيف Java المعزولة
يمكن تشغيل اختبارات Java بدون جهاز في بيئة معزولة مع تكلفة أداء طفيفة. ومع ذلك، هناك بعض الاعتبارات الرئيسية التي يجب أخذها في الحسبان قبل اختيار استخدام هذه البيئة.
- هذه هي أداة التشغيل التلقائية المستخدَمة لاختبارات الوحدات في Robolectric وJUnit.
- لا يتيح Tradefed سوى اختبارات JUnit في البيئة المعزولة.
- لا يتم توفير سوى التبعيات المرتبطة بشكل ثابت. لا يتم تضمين أي تبعيات تم الإعلان عنها
باستخدام
libفي مسار الفئة. - لا تضع أداة تشغيل العزل سوى أداة تشغيل shim وملف JAR للاختبار في مسار الفئة.
- هناك بعض النفقات الثابتة لكل عملية تشغيل اختبار يتم تنفيذها باستخدام أداة التشغيل هذه.
نموذج لإعداد اختبار Tradefed (معزول)
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.IsolatedHostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
نموذج لإعداد Soong للإنشاء التلقائي
بدلاً من إنشاء إعداد الاختبار يدويًا كما هو موضح أعلاه، يمكن لـ Soong إنشاء الإعداد تلقائيًا باستخدام إعلان مثل هذا المثال.
java_test_host {
name: "HelloWorldHostTest",
test_options: {
unit_test: true,
},
test_suites: ["general-tests"],
srcs: ["test/**/*.java"],
static_libs: [
"junit",
],
}اختبارات Robolectric
تستخدم اختبارات Robolectric أداة التشغيل نفسها التي تستخدمها اختبارات المضيف المعزولة، مع بعض الخيارات الخاصة.
- يتيح الخيار
robolectric-resourcesتمرير بعض خيارات سطر الأوامر الخاصة بـ Robolectric إلى العملية الفرعية، بالإضافة إلى إضافة بنية شجرةandroid-allإلى مسار فئة العملية الفرعية. في حين أنّ الخيارَين الآخرَين من أفضل الممارسات، فإنّ هذا الخيار إلزامي لـ تشغيل اختبارات Robolectric بنجاح. - يتيح الخيار
java-folderتغيير وقت تشغيل Java الذي تستخدمه العملية الفرعية. هذا ضروري لأنّ Robolectric يفضّل إصدارات معيّنة من Java قد لا تتوافق مع JVM المفضّل لنظام المضيف. - يتيح الخيار
exclude-pathsلأداة تشغيل العملية الفرعية تجنُّب تحميل وحدات معيّنة على الإطلاق، وهو أمر مفيد عندما يأتي ملف JAR مع فئات غير ضرورية قد تتسبب في حدوث أخطاء في التحميل.java.هو استثناء شائع لتجنُّب عرض استثناءاتSecurityException.
نموذج لإعداد Robolectric
<configuration description="Executes a Sample Robolectric Test"> <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" /> <option name="exclude-paths" value="java" /> <option name="use-robolectric-resources" value="true" /> <test class="com.android.tradefed.testtype.IsolatedHostTest"> <option name="jar" value="RobolectricExampleTest.jar" /> </test> </configuration>
نموذج لإعداد Soong للإنشاء التلقائي في Robolectric
بدلاً من إنشاء إعداد الاختبار يدويًا كما هو موضح أعلاه، يمكن لـ Soong إنشاء الإعداد تلقائيًا باستخدام إعلان مثل هذا المثال.
android_robolectric_test {
name: "HelloWorldRoboTest",
srcs: [
"src/**/*.java",
],
// Include the testing libraries
static_libs: [
"mockito-robolectric-prebuilt",
"platform-test-annotations",
"testng",
"truth-prebuilt",
],
instrumentation_for: "HelloWorldApp",
}اختبار Python
إذا كانت منطق الاختبار مكتوبة بلغة Python، استخدِم نوع التصميم python_test_host لإنشاء ملف par يمكن تشغيله بواسطة TF PythonBinaryHostTest.
نموذج لإعداد اختبار TradeFed
<configuration description="Config to run atest unittests"> <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" > <option name="par-file-name" value="atest_unittests" /> <option name="test-timeout" value="2m" /> </test> </configuration>
إعداد حزمة الاختبار
لكي يتمكّن TF من الوصول إلى الاختبار من جهة المضيف لإصدار معيّن، اضبط إعداد
وحدة الاختبار `test_suites`على
`general-tests`:
test_suites: ["general-tests"],
باستخدام هذا الإعداد، يتم تجميع الاختبار في general-tests.zip على هدف test_suites.