كتابة اختبار بدون جهاز من جهة المضيف في TF

توضّح لك هذه الصفحة كيفية كتابة اختبار من جهة المضيف لا يتطلّب استخدام جهاز، مثل اختبار يتم تشغيله على مثيل Linux GCE. (لمعرفة تفاصيل عن كتابة اختبار موجَّه من المضيف يتطلّب جهازًا، يُرجى الرجوع إلى مقالة كتابة اختبار موجَّه من المضيف في 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) على مضيف. يمكن إنشاء ملف اختبار config النموذجي تلقائيًا. ما لم يكن اختبارك بحاجة إلى إعداد أو تنظيف خاص، يمكنك الاعتماد على إنشاء إعدادات الاختبار التلقائية لإنشاء إعدادات اختبار TF adequada.

لضبط 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).

اختبارات مضيف Java المعزول

يمكن تشغيل اختبارات Java بدون جهاز في بيئة معزولة مع تكلفة أداء طفيفة. ومع ذلك، هناك بعض الاعتبارات الرئيسية التي يجب مراعاتها قبل اختيار استخدام هذا الإصدار.

  • هذا هو أداة التشغيل التلقائية المستخدَمة لاختبارات وحدات Robolectric وJUnit.
  • لا يتيح Tradefed سوى اختبارات JUnit في بيئة العزل.
  • لا يُسمح إلا بالتبعيات المرتبطة بشكل ثابت. لا يتم تضمين أي تبعيات تمّ تحديدها باستخدام lib في مسار الطباعة.
  • لا يضع برنامج تشغيل العزل سوى أداة تشغيل البديل وملف 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.