كتابة اختبار بدون جهاز من جهة المضيف في 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) على مضيف. يمكن إنشاء نموذج اختبار الإعداد تلقائيًا. ما لم يكن اختبارك بحاجة إلى إعداد أو تنظيف خاص، يمكنك الاعتماد على ميزة إنشاء إعدادات الاختبار تلقائيًا لإنشاء إعدادات اختبار مناسبة في 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).

اختبارات المضيف الفردية في 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 قد لا تتوافق مع آلة Java الافتراضية (JVM) المفضّلة في نظام المضيف.
  • يتيح الخيار exclude-paths لتطبيق subprocess runner تجنُّب تحميل وحدات معيّنة على الإطلاق، وهو أمر مفيد عندما يتضمّن ملف 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 المستهدف.